@@ -10,7 +10,8 @@ import { toSortedObject } from '@socketsecurity/registry/lib/objects'
1010import {
1111 fetchPackageManifest ,
1212 isValidPackageName ,
13- readPackageJson
13+ readPackageJson ,
14+ readPackageJsonSync
1415} from '@socketsecurity/registry/lib/packages'
1516import { isRelative } from '@socketsecurity/registry/lib/path'
1617import { naturalCompare } from '@socketsecurity/registry/lib/sorts'
@@ -31,6 +32,7 @@ const {
3132 MODULE_SYNC ,
3233 REQUIRE ,
3334 ROLLUP_EXTERNAL_SUFFIX ,
35+ SOCKET_IS_PUBLISHED ,
3436 SOCKET_WITH_SENTRY ,
3537 TAP ,
3638 VENDOR ,
@@ -67,6 +69,28 @@ async function getSentryManifest() {
6769 return _sentryManifest
6870}
6971
72+ let _socketVersionHash
73+ function getSocketVersionHash ( ) {
74+ if ( _socketVersionHash === undefined ) {
75+ const { version } = readPackageJsonSync ( rootPath )
76+ let gitHash = ''
77+ try {
78+ ; ( { stdout : gitHash } = spawnSync (
79+ 'git' ,
80+ [ 'rev-parse' , '--short' , 'HEAD' ] ,
81+ 'utf8'
82+ ) )
83+ } catch { }
84+ // Make each build generate a unique version id, regardless.
85+ // Mostly for development: confirms the build refreshed. For prod
86+ // builds the git hash should suffice to identify the build.
87+ _socketVersionHash = JSON . stringify (
88+ `${ version } :${ gitHash } :${ randomUUID ( ) . split ( '-' ) [ 0 ] } ${ constants . ENV [ SOCKET_IS_PUBLISHED ] ? ':pub' : '' } `
89+ )
90+ }
91+ return _socketVersionHash
92+ }
93+
7094async function moveDtsFiles ( namePattern , srcPath , destPath ) {
7195 for ( const filepath of await tinyGlob ( [ `**/${ namePattern } .d.ts{.map,}` ] , {
7296 absolute : true ,
@@ -208,7 +232,13 @@ export default () => {
208232 cli : `${ rootSrcPath } /cli.ts` ,
209233 constants : `${ rootSrcPath } /constants.ts` ,
210234 'shadow-bin' : `${ rootSrcPath } /shadow/shadow-bin.ts` ,
211- 'npm-injection' : `${ rootSrcPath } /shadow/npm-injection.ts`
235+ 'npm-injection' : `${ rootSrcPath } /shadow/npm-injection.ts` ,
236+ // Lazily access constants.ENV[SOCKET_WITH_SENTRY].
237+ ...( constants . ENV [ SOCKET_WITH_SENTRY ]
238+ ? {
239+ 'instrument-with-sentry' : `${ rootSrcPath } /instrument-with-sentry.ts`
240+ }
241+ : { } )
212242 } ,
213243 output : [
214244 {
@@ -251,9 +281,20 @@ export default () => {
251281 delimiters : [ '\\b' , '' ] ,
252282 preventAssignment : true ,
253283 values : {
254- "process.env['TAP']" : JSON . stringify ( ! ! constants . ENV [ TAP ] ) ,
284+ "process.env['SOCKET_CLI_VERSION']" ( ) {
285+ return JSON . stringify ( getSocketVersionHash ( ) )
286+ } ,
287+ "process.env['SOCKET_IS_PUBLISHED']" : JSON . stringify (
288+ // Lazily access constants.ENV[SOCKET_IS_PUBLISHED].
289+ ! ! constants . ENV [ SOCKET_IS_PUBLISHED ]
290+ ) ,
255291 "process.env['SOCKET_WITH_SENTRY']" : JSON . stringify (
292+ // Lazily access constants.ENV[SOCKET_WITH_SENTRY].
256293 ! ! constants . ENV [ SOCKET_WITH_SENTRY ]
294+ ) ,
295+ "process.env['TAP']" : JSON . stringify (
296+ // Lazily access constants.ENV[TAP].
297+ ! ! constants . ENV [ TAP ]
257298 )
258299 }
259300 } ) ,
0 commit comments