|
| 1 | +import { spawnSync } from 'node:child_process' |
| 2 | +import { randomUUID } from 'node:crypto' |
1 | 3 | import { builtinModules, createRequire } from 'node:module' |
2 | 4 | import path from 'node:path' |
3 | 5 |
|
@@ -37,6 +39,11 @@ const { |
37 | 39 | ROLLUP_ENTRY_SUFFIX, |
38 | 40 | ROLLUP_EXTERNAL_SUFFIX, |
39 | 41 | 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, |
40 | 47 | VENDOR |
41 | 48 | } = constants |
42 | 49 |
|
@@ -74,6 +81,29 @@ const requireUrlAssignmentRegExp = |
74 | 81 |
|
75 | 82 | const splitUrlRequiresRegExp = /require\(["']u["']\s*\+\s*["']rl["']\)/g |
76 | 83 |
|
| 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 | + |
77 | 107 | function isAncestorsExternal(id, depStats) { |
78 | 108 | // Lazily access constants.rootPackageJsonPath. |
79 | 109 | const { dependencies: pkgDeps } = require(constants.rootPackageJsonPath) |
@@ -225,6 +255,52 @@ export default function baseConfig(extendConfig = {}) { |
225 | 255 | purgePolyfills.rollup({ |
226 | 256 | replacements: {} |
227 | 257 | }), |
| 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 | + }), |
228 | 304 | // Convert un-prefixed built-in imports into "node:"" prefixed forms. |
229 | 305 | replacePlugin({ |
230 | 306 | delimiters: ['(?<=(?:require\\(|from\\s*)["\'])', '(?=["\'])'], |
|
0 commit comments