@@ -77,17 +77,52 @@ packageJson.dependencies['minecraft-data'] = 'file:../node-minecraft-data'
7777fs.writeFileSync('package.json', `${JSON.stringify(packageJson, null, 2)}\n`, 'utf8')
7878NODE
7979 npm install --omit=dev --ignore-scripts --package-lock=true --no-audit --no-fund
80- npm ls --omit=dev --all --json > dependency-tree.json
80+ # npm ls recursively validates dependencies declared by the linked data
81+ # source package, including its generator/test toolchain. Those packages are
82+ # intentionally absent from this runtime-only install, so derive a stable
83+ # production inventory from the authoritative lockfile instead.
84+ node << 'NODE '
85+ const fs = require('fs')
86+ const lock = JSON.parse(fs.readFileSync('package-lock.json', 'utf8'))
87+ if (lock.lockfileVersion !== 3 || lock.packages == null) {
88+ throw new Error(`Unsupported package-lock schema: ${lock.lockfileVersion}`)
89+ }
90+ const compareText = (a, b) => a < b ? -1 : a > b ? 1 : 0
91+ const sortedObject = value => Object.fromEntries(Object.entries(value || {}).sort(([a], [b]) => compareText(a, b)))
92+ const packages = Object.entries(lock.packages)
93+ .filter(([, metadata]) => metadata.dev !== true)
94+ .sort(([a], [b]) => compareText(a, b))
95+ .map(([location, metadata]) => ({
96+ location: location || '.',
97+ name: metadata.name || null,
98+ version: metadata.version || null,
99+ resolved: metadata.resolved || null,
100+ integrity: metadata.integrity || null,
101+ link: metadata.link === true,
102+ optional: metadata.optional === true,
103+ dependencies: sortedObject(metadata.dependencies),
104+ optionalDependencies: sortedObject(metadata.optionalDependencies),
105+ peerDependencies: sortedObject(metadata.peerDependencies)
106+ }))
107+ const inventory = {
108+ schemaVersion: 1,
109+ source: 'package-lock.json production entries',
110+ lockfileVersion: lock.lockfileVersion,
111+ packageCount: packages.length,
112+ packages
113+ }
114+ fs.writeFileSync('production-lock-inventory.json', `${JSON.stringify(inventory, null, 2)}\n`, 'utf8')
115+ NODE
81116)
82117
83118mkdir -p " $output_directory "
84119mv " $nmp_directory " " $output_directory /node-minecraft-protocol"
85120mv " $wrapper_directory " " $output_directory /node-minecraft-data"
86121
87122lock_path=" $output_directory /node-minecraft-protocol/package-lock.json"
88- tree_path =" $output_directory /node-minecraft-protocol/dependency-tree .json"
123+ inventory_path =" $output_directory /node-minecraft-protocol/production-lock-inventory .json"
89124test -s " $lock_path "
90- test -s " $tree_path "
125+ test -s " $inventory_path "
91126
92127sha256_file () {
93128 sha256sum " $1 " | awk ' {print $1}'
@@ -112,7 +147,7 @@ cat > "$output_directory/client-build-manifest.json" <<EOF
112147 },
113148 "installScriptsEnabled": false,
114149 "packageLockSha256": "$( sha256_file " $lock_path " ) ",
115- "dependencyTreeSha256 ": "$( sha256_file " $tree_path " ) "
150+ "productionLockInventorySha256 ": "$( sha256_file " $inventory_path " ) "
116151}
117152EOF
118153
0 commit comments