Skip to content

Commit 2648809

Browse files
author
Nir Maoz
authored
Inject package version during build instead of importing it from pack… (#434)
1 parent bf972b3 commit 2648809

File tree

8 files changed

+59
-3
lines changed

8 files changed

+59
-3
lines changed

__TESTS__/unit/analytics/analytics.node.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import pkg from '../../../src/package.json';
77
import {createNewImageWithAnalytics} from "./testUtils/createNewImageWithAnalytics";
88

9+
// Since packageVersion value is only set during build, we need to mock it during tests
10+
jest.mock("../../../src/internal/utils/packageVersion", () => ({packageVersion: pkg.version}));
11+
912
describe('Add analytics to a regular URL', () => {
1013
it('Works with default values', () => {
1114
const cldImage = createNewImageWithAnalytics('sample');

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"build:docs": "node ./scripts/buildDocs.js",
2121
"build:entryPoints": "ts-node ./scripts/createEntrypoints.ts",
2222
"build:copyCleanPackageJSON": "ts-node scripts/copyPackageJsonToSrc.ts",
23+
"build:injectPackageVersion": "ts-node ./scripts/injectPackageVersionToDistFiles.ts",
2324
"lint": "eslint src __TESTS__ --color --ext .ts",
2425
"start": "rollup -c rollup.dev.config.js -w",
2526
"bundlewatch": "bundlewatch --config ./bundlewatch.config.js",
@@ -36,6 +37,7 @@
3637
"@release-it/bumper": "^2.0.0",
3738
"@rollup/plugin-json": "^4.1.0",
3839
"@rollup/plugin-node-resolve": "^7.1.1",
40+
"@rollup/plugin-replace": "^3.0.0",
3941
"@types/jest": "^25.2.3",
4042
"@types/mock-fs": "^4.10.0",
4143
"@types/node": "^15.14.2",
@@ -71,6 +73,7 @@
7173
"prettier": "^2.3.1",
7274
"prismjs": "^1.14.0",
7375
"release-it": "^14.2.0",
76+
"replace-in-file": "^6.2.0",
7477
"rimraf": "^3.0.2",
7578
"rollup": "^2.3.2",
7679
"rollup-plugin-babel": "^4.4.0",

rollup.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import resolve from '@rollup/plugin-node-resolve';
22
import typescript from 'rollup-plugin-typescript';
33
import json from '@rollup/plugin-json';
44
import commonjs from 'rollup-plugin-commonjs';
5+
import replace from '@rollup/plugin-replace';
6+
import {version} from './package.json';
57

68
export default [{
79
input: 'src/index.ts',
@@ -15,6 +17,9 @@ export default [{
1517
plugins: [
1618
json(),
1719
resolve(),
20+
replace({
21+
'PACKAGE_VERSION_INJECTED_DURING_BUILD': version
22+
}),
1823
typescript({ target: "es5"}),
1924
commonjs()
2025
]

rollup.dev.config.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import resolve from '@rollup/plugin-node-resolve';
22
import babel from 'rollup-plugin-babel';
3-
import serve from 'rollup-plugin-serve'
3+
import serve from 'rollup-plugin-serve';
44
import typescript from "rollup-plugin-typescript";
55
import json from '@rollup/plugin-json';
6+
import replace from '@rollup/plugin-replace';
7+
import {version} from './package.json';
68

79
export default {
810
input: 'src/index.ts',
@@ -19,6 +21,9 @@ export default {
1921
contentBase: 'playground'
2022
}),
2123
resolve(),
24+
replace({
25+
'PACKAGE_VERSION_INJECTED_DURING_BUILD': version
26+
}),
2227
babel({
2328
exclude: 'node_modules/**' // only transpile our source code
2429
})

scripts/build.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ npm run build:ESM
1212
npm run build:UMD
1313
npm run build:entryPoints
1414
npm run build:docs
15+
npm run build:injectPackageVersion
1516

1617
#cp CHANGELOG.md to dist
1718
cp ./CHANGELOG.md ./dist
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/* eslint @typescript-eslint/no-var-requires: 0 */
2+
3+
/**
4+
* This script goes over dist files and replaces the package version placeholder to be the actual package version.
5+
*/
6+
const replace = require('replace-in-file');
7+
const {version} = require('../package.json');
8+
const {resolve} = require('path');
9+
10+
const distFolder = resolve('./dist');
11+
const options = {
12+
files: [`${distFolder}/**/*.js`, `${distFolder}/**/*.ts`],
13+
from: /PACKAGE_VERSION_INJECTED_DURING_BUILD/g,
14+
to: version
15+
};
16+
17+
// Internationally not catching errors so that build will fail on error
18+
const fileNamesReplaced = replace
19+
.sync(options)
20+
.filter((fileData: typeof replace.ReplaceResult) => fileData.hasChanged)
21+
.map((fileData: typeof replace.ReplaceResult) => fileData.file);
22+
23+
// files is not empty
24+
if (fileNamesReplaced.length) {
25+
console.log('Successfully injected package version to dist files:', fileNamesReplaced);
26+
} else {
27+
throw 'Failed to inject package version to dist files because no matching files where found';
28+
}

src/internal/utils/packageVersion.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const packageVersion = 'PACKAGE_VERSION_INJECTED_DURING_BUILD';
2+
3+
/**
4+
* Export package version (injected during our build).
5+
* Reason for this is that If we import values from from package.json,
6+
* it will cause an error for users who do not have an 'import from json' plugin
7+
* as part of their build process / bundler.
8+
*/
9+
export {
10+
packageVersion
11+
};

src/sdkAnalytics/getSDKAnalyticsSignature.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {encodeVersion} from "./encodeVersion";
22
import {getAnalyticsOptions} from "./getAnalyticsOptions";
33
import {ITrackedPropertiesThroughAnalytics} from "./interfaces/ITrackedPropertiesThroughAnalytics";
4-
import pkg from '../package.json';
4+
import {packageVersion} from "../internal/utils/packageVersion";
55

66
/**
77
* @private
@@ -29,7 +29,7 @@ function ensureShapeOfTrackedProperties(trackedAnalytics?: Partial<ITrackedPrope
2929
const defaults = {
3030
techVersion: getNodeVersion(),
3131
sdkCode: 'T', // Base code
32-
sdkSemver : pkg.version.split('-')[0], // remove -beta, -alpha or other tagged versions from the version string
32+
sdkSemver : packageVersion.split('-')[0], // remove -beta, -alpha or other tagged versions from the version string
3333
responsive: false,
3434
placeholder: false,
3535
lazyload: false,

0 commit comments

Comments
 (0)