11import assert from 'node:assert'
2- import { spawnSync } from 'node:child_process'
3- import { randomUUID } from 'node:crypto'
42import { existsSync , promises as fs } from 'node:fs'
53import path from 'node:path'
64import util from 'node:util'
@@ -13,8 +11,7 @@ import { toSortedObject } from '@socketsecurity/registry/lib/objects'
1311import {
1412 fetchPackageManifest ,
1513 isValidPackageName ,
16- readPackageJson ,
17- readPackageJsonSync
14+ readPackageJson
1815} from '@socketsecurity/registry/lib/packages'
1916import { isRelative } from '@socketsecurity/registry/lib/path'
2017import { naturalCompare } from '@socketsecurity/registry/lib/sorts'
@@ -39,11 +36,9 @@ const {
3936 SHADOW_BIN ,
4037 SOCKET ,
4138 SOCKET_CLI_LEGACY_BUILD ,
42- SOCKET_CLI_PUBLISHED_BUILD ,
4339 SOCKET_CLI_SENTRY_BUILD ,
44- SOCKET_CLI_VERSION_HASH ,
40+ SOCKET_CLI_TEST_DIST_BUILD ,
4541 VENDOR ,
46- VITEST ,
4742 WITH_SENTRY ,
4843 depStatsPath,
4944 rootDistPath,
@@ -85,6 +80,23 @@ const sharedOutputs = {
8580 sourcemapDebugIds : true
8681}
8782
83+ const sharedPlugins = [
84+ // Inline process.env values.
85+ replacePlugin ( {
86+ delimiters : [ '(?<![\'"])\\b' , '(?![\'"])' ] ,
87+ preventAssignment : true ,
88+ values : [ [ SOCKET_CLI_TEST_DIST_BUILD , 'false' ] ] . reduce (
89+ ( obj , { 0 : name , 1 : value } ) => {
90+ obj [ `process.env.${ name } ` ] = value
91+ obj [ `process.env['${ name } ']` ] = value
92+ obj [ `process.env[${ name } ]` ] = value
93+ return obj
94+ } ,
95+ { }
96+ )
97+ } )
98+ ]
99+
88100async function copyInitGradle ( ) {
89101 const filepath = path . join ( rootSrcPath , 'commands/manifest/init.gradle' )
90102 const destPath = path . join ( rootDistPath , 'init.gradle' )
@@ -103,28 +115,6 @@ async function getSentryManifest() {
103115 return _sentryManifest
104116}
105117
106- let _socketVersionHash
107- function getSocketVersionHash ( ) {
108- if ( _socketVersionHash === undefined ) {
109- const randUuidSegment = randomUUID ( ) . split ( '-' ) [ 0 ]
110- const { version } = readPackageJsonSync ( rootPath )
111- let gitHash = ''
112- try {
113- gitHash = spawnSync ( 'git' , [ 'rev-parse' , '--short' , 'HEAD' ] , {
114- encoding : 'utf8'
115- } ) . stdout . trim ( )
116- } catch { }
117- // Make each build generate a unique version id, regardless.
118- // Mostly for development: confirms the build refreshed. For prod builds
119- // the git hash should suffice to identify the build.
120- _socketVersionHash = `${ version } :${ gitHash } :${ randUuidSegment } ${
121- // Lazily access constants.ENV[SOCKET_CLI_PUBLISHED_BUILD].
122- constants . ENV [ SOCKET_CLI_PUBLISHED_BUILD ] ? ':pub' : ':dev'
123- } `
124- }
125- return _socketVersionHash
126- }
127-
128118async function globDtsAndMapFiles ( namePattern , srcPath ) {
129119 return await tinyGlob ( [ `**/${ namePattern } {.d.ts{.map,},.js.map}` ] , {
130120 absolute : true ,
@@ -351,52 +341,7 @@ export default () => {
351341 return true
352342 } ,
353343 plugins : [
354- // Inline process.env values.
355- replacePlugin ( {
356- delimiters : [ '(?<![\'"])\\b' , '(?![\'"])' ] ,
357- preventAssignment : true ,
358- values : [
359- [
360- SOCKET_CLI_VERSION_HASH ,
361- ( ) => JSON . stringify ( getSocketVersionHash ( ) )
362- ] ,
363- [
364- SOCKET_CLI_LEGACY_BUILD ,
365- ( ) =>
366- JSON . stringify (
367- // Lazily access constants.ENV[SOCKET_CLI_LEGACY_BUILD].
368- ! ! constants . ENV [ SOCKET_CLI_LEGACY_BUILD ]
369- )
370- ] ,
371- [
372- SOCKET_CLI_PUBLISHED_BUILD ,
373- ( ) =>
374- JSON . stringify (
375- // Lazily access constants.ENV[SOCKET_CLI_PUBLISHED_BUILD].
376- ! ! constants . ENV [ SOCKET_CLI_PUBLISHED_BUILD ]
377- )
378- ] ,
379- [
380- SOCKET_CLI_SENTRY_BUILD ,
381- ( ) =>
382- JSON . stringify (
383- // Lazily access constants.ENV[SOCKET_CLI_SENTRY_BUILD].
384- ! ! constants . ENV [ SOCKET_CLI_SENTRY_BUILD ]
385- )
386- ] ,
387- [
388- VITEST ,
389- ( ) =>
390- // Lazily access constants.ENV[TAP].
391- ! ! constants . ENV [ VITEST ]
392- ]
393- ] . reduce ( ( obj , { 0 : name , 1 : value } ) => {
394- obj [ `process.env.${ name } ` ] = value
395- obj [ `process.env['${ name } ']` ] = value
396- obj [ `process.env[${ name } ]` ] = value
397- return obj
398- } , { } )
399- } ) ,
344+ ...sharedPlugins ,
400345 {
401346 async generateBundle ( _options , bundle ) {
402347 for ( const basename of Object . keys ( bundle ) ) {
@@ -425,6 +370,7 @@ export default () => {
425370 ]
426371 } )
427372
373+ const keptRequireDtsMapFiles = new Set ( )
428374 const requireConfig = baseConfig ( {
429375 input : {
430376 ...sharedInputs
@@ -436,23 +382,32 @@ export default () => {
436382 }
437383 ] ,
438384 plugins : [
385+ ...sharedPlugins ,
439386 {
440387 async generateBundle ( _options , bundle ) {
441388 for ( const basename of Object . keys ( bundle ) ) {
442389 const data = bundle [ basename ]
443- if (
444- data . type === 'chunk' &&
445- basename !== VENDOR_JS &&
446- ! data . code . includes ( `'./${ VENDOR_JS } '` )
447- ) {
448- data . code = createStubCode ( `../${ MODULE_SYNC } /${ basename } ` )
390+ if ( data . type === 'chunk' ) {
391+ if (
392+ basename !== VENDOR_JS &&
393+ ! data . code . includes ( `'./${ VENDOR_JS } '` )
394+ ) {
395+ data . code = createStubCode ( `../${ MODULE_SYNC } /${ basename } ` )
396+ } else {
397+ keptRequireDtsMapFiles . add (
398+ path . basename ( basename , path . extname ( basename ) )
399+ )
400+ }
449401 }
450402 }
451403 } ,
452404 async writeBundle ( ) {
453405 await Promise . all ( [
454406 updateDepStats ( requireConfig . meta . depStats ) ,
455- removeDtsAndMapFiles ( '*' , distRequirePath ) ,
407+ removeDtsAndMapFiles (
408+ `!(${ [ ...keptRequireDtsMapFiles ] . sort ( naturalCompare ) . join ( '|' ) } )` ,
409+ distRequirePath
410+ ) ,
456411 moveDtsAndMapFiles ( CONSTANTS , distModuleSyncPath , rootDistPath )
457412 ] )
458413 await Promise . all ( [
0 commit comments