Skip to content

Commit 2297a22

Browse files
committed
Fix compile time replacements across builds
1 parent d86fff1 commit 2297a22

File tree

5 files changed

+110
-43
lines changed

5 files changed

+110
-43
lines changed

.config/rollup.base.config.mjs

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { spawnSync } from 'node:child_process'
2+
import { randomUUID } from 'node:crypto'
13
import { builtinModules, createRequire } from 'node:module'
24
import path from 'node:path'
35

@@ -37,6 +39,11 @@ const {
3739
ROLLUP_ENTRY_SUFFIX,
3840
ROLLUP_EXTERNAL_SUFFIX,
3941
SLASH_NODE_MODULES_SLASH,
42+
SOCKET_CLI_LEGACY_BUILD,
43+
SOCKET_CLI_PUBLISHED_BUILD,
44+
SOCKET_CLI_SENTRY_BUILD,
45+
SOCKET_CLI_VERSION_HASH,
46+
VITEST,
4047
VENDOR
4148
} = constants
4249

@@ -74,6 +81,29 @@ const requireUrlAssignmentRegExp =
7481

7582
const splitUrlRequiresRegExp = /require\(["']u["']\s*\+\s*["']rl["']\)/g
7683

84+
let _socketVersionHash
85+
function getSocketVersionHash() {
86+
if (_socketVersionHash === undefined) {
87+
const randUuidSegment = randomUUID().split('-')[0]
88+
// Lazily access constants.rootPath.
89+
const { version } = readPackageJsonSync(constants.rootPath)
90+
let gitHash = ''
91+
try {
92+
gitHash = spawnSync('git', ['rev-parse', '--short', 'HEAD'], {
93+
encoding: 'utf8'
94+
}).stdout.trim()
95+
} catch {}
96+
// Make each build generate a unique version id, regardless.
97+
// Mostly for development: confirms the build refreshed. For prod builds
98+
// the git hash should suffice to identify the build.
99+
_socketVersionHash = `${version}:${gitHash}:${randUuidSegment}${
100+
// Lazily access constants.ENV[SOCKET_CLI_PUBLISHED_BUILD].
101+
constants.ENV[SOCKET_CLI_PUBLISHED_BUILD] ? ':pub' : ':dev'
102+
}`
103+
}
104+
return _socketVersionHash
105+
}
106+
77107
function isAncestorsExternal(id, depStats) {
78108
// Lazily access constants.rootPackageJsonPath.
79109
const { dependencies: pkgDeps } = require(constants.rootPackageJsonPath)
@@ -225,6 +255,52 @@ export default function baseConfig(extendConfig = {}) {
225255
purgePolyfills.rollup({
226256
replacements: {}
227257
}),
258+
// Inline process.env values.
259+
replacePlugin({
260+
delimiters: ['(?<![\'"])\\b', '(?![\'"])'],
261+
preventAssignment: true,
262+
values: [
263+
[
264+
SOCKET_CLI_VERSION_HASH,
265+
() => JSON.stringify(getSocketVersionHash())
266+
],
267+
[
268+
SOCKET_CLI_LEGACY_BUILD,
269+
() =>
270+
JSON.stringify(
271+
// Lazily access constants.ENV[SOCKET_CLI_LEGACY_BUILD].
272+
!!constants.ENV[SOCKET_CLI_LEGACY_BUILD]
273+
)
274+
],
275+
[
276+
SOCKET_CLI_PUBLISHED_BUILD,
277+
() =>
278+
JSON.stringify(
279+
// Lazily access constants.ENV[SOCKET_CLI_PUBLISHED_BUILD].
280+
!!constants.ENV[SOCKET_CLI_PUBLISHED_BUILD]
281+
)
282+
],
283+
[
284+
SOCKET_CLI_SENTRY_BUILD,
285+
() =>
286+
JSON.stringify(
287+
// Lazily access constants.ENV[SOCKET_CLI_SENTRY_BUILD].
288+
!!constants.ENV[SOCKET_CLI_SENTRY_BUILD]
289+
)
290+
],
291+
[
292+
VITEST,
293+
() =>
294+
// Lazily access constants.ENV[VITEST].
295+
!!constants.ENV[VITEST]
296+
]
297+
].reduce((obj, { 0: name, 1: value }) => {
298+
obj[`process.env.${name}`] = value
299+
obj[`process.env['${name}']`] = value
300+
obj[`process.env[${name}]`] = value
301+
return obj
302+
}, {})
303+
}),
228304
// Convert un-prefixed built-in imports into "node:"" prefixed forms.
229305
replacePlugin({
230306
delimiters: ['(?<=(?:require\\(|from\\s*)["\'])', '(?=["\'])'],

.config/rollup.dist.config.mjs

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@ const {
4141
SOCKET_CLI_LEGACY_BUILD,
4242
SOCKET_CLI_PUBLISHED_BUILD,
4343
SOCKET_CLI_SENTRY_BUILD,
44-
SOCKET_CLI_VERSION_HASH,
44+
SOCKET_CLI_TEST_DIST_BUILD,
4545
VENDOR,
46-
VITEST,
4746
WITH_SENTRY,
4847
depStatsPath,
4948
rootDistPath,
@@ -90,44 +89,15 @@ const sharedPlugins = [
9089
replacePlugin({
9190
delimiters: ['(?<![\'"])\\b', '(?![\'"])'],
9291
preventAssignment: true,
93-
values: [
94-
[SOCKET_CLI_VERSION_HASH, () => JSON.stringify(getSocketVersionHash())],
95-
[
96-
SOCKET_CLI_LEGACY_BUILD,
97-
() =>
98-
JSON.stringify(
99-
// Lazily access constants.ENV[SOCKET_CLI_LEGACY_BUILD].
100-
!!constants.ENV[SOCKET_CLI_LEGACY_BUILD]
101-
)
102-
],
103-
[
104-
SOCKET_CLI_PUBLISHED_BUILD,
105-
() =>
106-
JSON.stringify(
107-
// Lazily access constants.ENV[SOCKET_CLI_PUBLISHED_BUILD].
108-
!!constants.ENV[SOCKET_CLI_PUBLISHED_BUILD]
109-
)
110-
],
111-
[
112-
SOCKET_CLI_SENTRY_BUILD,
113-
() =>
114-
JSON.stringify(
115-
// Lazily access constants.ENV[SOCKET_CLI_SENTRY_BUILD].
116-
!!constants.ENV[SOCKET_CLI_SENTRY_BUILD]
117-
)
118-
],
119-
[
120-
VITEST,
121-
() =>
122-
// Lazily access constants.ENV[VITEST].
123-
!!constants.ENV[VITEST]
124-
]
125-
].reduce((obj, { 0: name, 1: value }) => {
126-
obj[`process.env.${name}`] = value
127-
obj[`process.env['${name}']`] = value
128-
obj[`process.env[${name}]`] = value
129-
return obj
130-
}, {})
92+
values: [[SOCKET_CLI_TEST_DIST_BUILD, 'false']].reduce(
93+
(obj, { 0: name, 1: value }) => {
94+
obj[`process.env.${name}`] = value
95+
obj[`process.env['${name}']`] = value
96+
obj[`process.env[${name}]`] = value
97+
return obj
98+
},
99+
{}
100+
)
131101
})
132102
]
133103

.config/rollup.test.config.mjs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import replacePlugin from '@rollup/plugin-replace'
2+
13
import { isValidPackageName } from '@socketsecurity/registry/lib/packages'
24
import { isRelative } from '@socketsecurity/registry/lib/path'
35

@@ -9,7 +11,8 @@ import {
911
normalizeId
1012
} from '../scripts/utils/packages.js'
1113

12-
const { BABEL_RUNTIME, ROLLUP_EXTERNAL_SUFFIX } = constants
14+
const { BABEL_RUNTIME, ROLLUP_EXTERNAL_SUFFIX, SOCKET_CLI_TEST_DIST_BUILD } =
15+
constants
1316

1417
export default () => {
1518
// Lazily access constants.rootSrcPath
@@ -54,6 +57,22 @@ export default () => {
5457
return true
5558
}
5659
}
57-
: {})
60+
: {}),
61+
plugins: [
62+
// Inline process.env values.
63+
replacePlugin({
64+
delimiters: ['(?<![\'"])\\b', '(?![\'"])'],
65+
preventAssignment: true,
66+
values: [[SOCKET_CLI_TEST_DIST_BUILD, 'true']].reduce(
67+
(obj, { 0: name, 1: value }) => {
68+
obj[`process.env.${name}`] = value
69+
obj[`process.env['${name}']`] = value
70+
obj[`process.env[${name}]`] = value
71+
return obj
72+
},
73+
{}
74+
)
75+
})
76+
]
5877
})
5978
}

scripts/constants.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const SOCKET = 'socket'
2727
const SOCKET_CLI_LEGACY_BUILD = 'SOCKET_CLI_LEGACY_BUILD'
2828
const SOCKET_CLI_PUBLISHED_BUILD = 'SOCKET_CLI_PUBLISHED_BUILD'
2929
const SOCKET_CLI_SENTRY_BUILD = 'SOCKET_CLI_SENTRY_BUILD'
30+
const SOCKET_CLI_TEST_DIST_BUILD = 'SOCKET_CLI_TEST_DIST_BUILD'
3031
const SOCKET_CLI_VERSION_HASH = 'SOCKET_CLI_VERSION_HASH'
3132
const VENDOR = 'vendor'
3233

@@ -95,6 +96,7 @@ const constants = createConstantsObject(
9596
SOCKET_CLI_LEGACY_BUILD,
9697
SOCKET_CLI_PUBLISHED_BUILD,
9798
SOCKET_CLI_SENTRY_BUILD,
99+
SOCKET_CLI_TEST_DIST_BUILD,
98100
SOCKET_CLI_VERSION_HASH,
99101
VENDOR,
100102
WITH_SENTRY,

src/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ const lazyRootPath = () =>
212212
// it will be dead code eliminated by Rollup.
213213
path.resolve(
214214
realpathSync.native(__dirname),
215-
process.env['VITEST'] ? '../..' : '..'
215+
process.env['SOCKET_CLI_TEST_DIST_BUILD'] ? '../..' : '..'
216216
)
217217

218218
const lazyRootPkgJsonPath = () =>

0 commit comments

Comments
 (0)