@nimbus-sh/worker 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esbuild-wasm-bundle.generated.d.ts +24 -24
- package/dist/esbuild-wasm-bundle.generated.d.ts.map +1 -1
- package/dist/esbuild-wasm-bundle.generated.js +24 -24
- package/dist/facets/cirrus-real.js +3 -3
- package/dist/facets/compose.d.ts +3 -0
- package/dist/facets/compose.d.ts.map +1 -1
- package/dist/facets/compose.js +10 -3
- package/dist/facets/esbuild-bundle-pool.d.ts +1 -1
- package/dist/facets/esbuild-bundle-pool.js +3 -3
- package/dist/facets/esbuild-transform.d.ts +6 -2
- package/dist/facets/esbuild-transform.d.ts.map +1 -1
- package/dist/facets/esbuild-transform.js +8 -4
- package/dist/facets/manager.d.ts +54 -15
- package/dist/facets/manager.d.ts.map +1 -1
- package/dist/facets/manager.js +227 -144
- package/dist/facets/real-vite-hmr.d.ts +2 -0
- package/dist/facets/real-vite-hmr.d.ts.map +1 -1
- package/dist/facets/real-vite-hmr.js +3 -2
- package/dist/git/commands.d.ts +17 -1
- package/dist/git/commands.d.ts.map +1 -1
- package/dist/git/commands.js +73 -9
- package/dist/git/network-facet.d.ts +2 -0
- package/dist/git/network-facet.d.ts.map +1 -1
- package/dist/git/network-facet.js +10 -5
- package/dist/hosted/commands.d.ts.map +1 -1
- package/dist/hosted/commands.js +28 -39
- package/dist/hosted/runtime.d.ts +24 -2
- package/dist/hosted/runtime.d.ts.map +1 -1
- package/dist/hosted/runtime.js +70 -13
- package/dist/hosted/services.d.ts +14 -2
- package/dist/hosted/services.d.ts.map +1 -1
- package/dist/hosted/services.js +15 -2
- package/dist/loaders/generated-workers.d.ts +2 -2
- package/dist/loaders/generated-workers.d.ts.map +1 -1
- package/dist/loaders/generated-workers.js +4 -4
- package/dist/loaders/pre-bundle-preamble.d.ts +6 -3
- package/dist/loaders/pre-bundle-preamble.d.ts.map +1 -1
- package/dist/loaders/pre-bundle-preamble.js +13 -8
- package/dist/node-shims-artifact.generated.js +3 -3
- package/dist/npm/cache.d.ts +6 -1
- package/dist/npm/cache.d.ts.map +1 -1
- package/dist/npm/cache.js +8 -6
- package/dist/npm/install-batch-facet.d.ts +2 -0
- package/dist/npm/install-batch-facet.d.ts.map +1 -1
- package/dist/npm/install-batch-facet.js +29 -15
- package/dist/npm/installer.d.ts +8 -4
- package/dist/npm/installer.d.ts.map +1 -1
- package/dist/npm/installer.js +173 -113
- package/dist/npm/npx-install.d.ts +3 -1
- package/dist/npm/npx-install.d.ts.map +1 -1
- package/dist/npm/npx-install.js +4 -1
- package/dist/npm/placement.d.ts +16 -0
- package/dist/npm/placement.d.ts.map +1 -0
- package/dist/npm/placement.js +33 -0
- package/dist/npm/r2-cache.d.ts +10 -6
- package/dist/npm/r2-cache.d.ts.map +1 -1
- package/dist/npm/r2-cache.js +32 -16
- package/dist/npm/resolve-one-facet.d.ts +3 -0
- package/dist/npm/resolve-one-facet.d.ts.map +1 -1
- package/dist/npm/resolve-one-facet.js +1 -0
- package/dist/npm/resolver.d.ts +11 -6
- package/dist/npm/resolver.d.ts.map +1 -1
- package/dist/npm/resolver.js +12 -3
- package/dist/runtime/bash-repl.d.ts +5 -3
- package/dist/runtime/bash-repl.d.ts.map +1 -1
- package/dist/runtime/bash-repl.js +8 -3
- package/dist/runtime/cpython-resident.d.ts.map +1 -1
- package/dist/runtime/cpython-resident.js +2 -10
- package/dist/runtime/esbuild-wasm-bytes.d.ts +25 -18
- package/dist/runtime/esbuild-wasm-bytes.d.ts.map +1 -1
- package/dist/runtime/esbuild-wasm-bytes.js +55 -30
- package/dist/runtime/facet-loader-host.d.ts.map +1 -1
- package/dist/runtime/facet-loader-host.js +0 -9
- package/dist/runtime/node-shims.d.ts.map +1 -1
- package/dist/runtime/node-shims.js +853 -181
- package/dist/runtime/python-repl.d.ts +4 -3
- package/dist/runtime/python-repl.d.ts.map +1 -1
- package/dist/runtime/python-repl.js +10 -39
- package/dist/runtime/ruby-repl.d.ts +3 -2
- package/dist/runtime/ruby-repl.d.ts.map +1 -1
- package/dist/runtime/ruby-repl.js +7 -6
- package/dist/runtime/ruby-resident.d.ts.map +1 -1
- package/dist/runtime/ruby-resident.js +5 -16
- package/dist/runtime/runtime-catalog.js +1 -1
- package/dist/runtime/wasi/preamble.d.ts +0 -22
- package/dist/runtime/wasi/preamble.d.ts.map +1 -1
- package/dist/runtime/wasi/preamble.js +160 -1445
- package/dist/runtime-catalog.generated.js +1 -1
- package/dist/session/hibernation.d.ts +45 -2
- package/dist/session/hibernation.d.ts.map +1 -1
- package/dist/session/hibernation.js +78 -1
- package/dist/session/init.d.ts.map +1 -1
- package/dist/session/init.js +1 -0
- package/dist/session/nimbus-session.d.ts +16 -23
- package/dist/session/nimbus-session.d.ts.map +1 -1
- package/dist/session/nimbus-session.js +25 -36
- package/dist/session/npm-install-port.d.ts.map +1 -1
- package/dist/session/npm-install-port.js +1 -0
- package/dist/session/port-capability.d.ts.map +1 -1
- package/dist/session/port-capability.js +11 -1
- package/dist/session/programmatic.js +2 -2
- package/dist/session/routes.d.ts.map +1 -1
- package/dist/session/routes.js +4 -2
- package/dist/session/rpc.d.ts +7 -44
- package/dist/session/rpc.d.ts.map +1 -1
- package/dist/session/rpc.js +17 -67
- package/dist/session/supervisor-op.d.ts +8 -3
- package/dist/session/supervisor-op.d.ts.map +1 -1
- package/dist/session/supervisor-op.js +10 -45
- package/dist/session/supervisor-rpc.d.ts +47 -22
- package/dist/session/supervisor-rpc.d.ts.map +1 -1
- package/dist/session/supervisor-rpc.js +64 -26
- package/dist/vfs/facet-resident-store.d.ts.map +1 -1
- package/dist/vfs/facet-resident-store.js +4 -2
- package/dist/workspace-host.d.ts +2 -1
- package/dist/workspace-host.d.ts.map +1 -1
- package/dist/wrangler/nimbus-wrangler.d.ts.map +1 -1
- package/dist/wrangler/nimbus-wrangler.js +3 -0
- package/package.json +30 -4
- package/public/_assets/esbuild-0.24.2.js +2380 -0
- package/public/_assets/runtime/{node-shims-8f8c64edd2a1f0f5.js → node-shims-7b4dd7a76d95d21e.js} +852 -180
- package/scripts/bundle-esbuild-wasm.mjs +55 -39
- package/scripts/bundle-facet-workers.mjs +45 -7
- package/scripts/bundle-runtime.mjs +35 -8
package/dist/npm/cache.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* Hit = row(s) returned with size > 0; miss = empty result set. Callers
|
|
19
19
|
* fall through to L2/L3/L4 on miss.
|
|
20
20
|
*/
|
|
21
|
+
import { placementName } from './placement.js';
|
|
21
22
|
import { recordHit as _l1RecordHit, recordMiss as _l1RecordMiss } from '@nimbus-sh/core/_shared/cache-stats.js';
|
|
22
23
|
// ── NpmCache ────────────────────────────────────────────────────────────
|
|
23
24
|
export class NpmCache {
|
|
@@ -233,7 +234,7 @@ export class NpmCache {
|
|
|
233
234
|
return { written, failed };
|
|
234
235
|
}
|
|
235
236
|
// ── Lockfile ──────────────────────────────────────────────────────────
|
|
236
|
-
/** Read the lockfile for a project.
|
|
237
|
+
/** Read the lockfile for a project, keyed by placement path. Null if not found. */
|
|
237
238
|
readLockfile(projectPath) {
|
|
238
239
|
this.ensureSchema();
|
|
239
240
|
const rows = [...this.sql.exec(`SELECT name, resolved_ver, integrity, deps_json, hoisted_path
|
|
@@ -242,8 +243,9 @@ export class NpmCache {
|
|
|
242
243
|
return null;
|
|
243
244
|
const result = new Map();
|
|
244
245
|
for (const r of rows) {
|
|
245
|
-
|
|
246
|
-
|
|
246
|
+
const placement = String(r.name);
|
|
247
|
+
result.set(placement, {
|
|
248
|
+
name: placementName(placement),
|
|
247
249
|
resolvedVer: String(r.resolved_ver),
|
|
248
250
|
integrity: String(r.integrity),
|
|
249
251
|
depsJson: String(r.deps_json),
|
|
@@ -267,14 +269,14 @@ export class NpmCache {
|
|
|
267
269
|
// Clear existing lockfile for this project
|
|
268
270
|
this.sql.exec(`DELETE FROM pkg_lockfile WHERE project_path = ?`, projectPath);
|
|
269
271
|
// Batch insert: DO SQLite ~100 var limit. 6 cols → max 16 rows (16×6=96).
|
|
270
|
-
const entryList = [...entries
|
|
272
|
+
const entryList = [...entries];
|
|
271
273
|
const BATCH = 16;
|
|
272
274
|
for (let i = 0; i < entryList.length; i += BATCH) {
|
|
273
275
|
const batch = entryList.slice(i, i + BATCH);
|
|
274
276
|
const placeholders = batch.map(() => '(?,?,?,?,?,?)').join(',');
|
|
275
277
|
const values = [];
|
|
276
|
-
for (const e of batch) {
|
|
277
|
-
values.push(projectPath,
|
|
278
|
+
for (const [placement, e] of batch) {
|
|
279
|
+
values.push(projectPath, placement, e.resolvedVer, e.integrity, e.depsJson, e.hoistedPath);
|
|
278
280
|
}
|
|
279
281
|
this.sql.exec(`INSERT INTO pkg_lockfile (project_path, name, resolved_ver, integrity, deps_json, hoisted_path) VALUES ${placeholders}`, ...values);
|
|
280
282
|
}
|
|
@@ -49,6 +49,8 @@ export interface InstallBatchSpec {
|
|
|
49
49
|
export interface InstallBatchPerPackage {
|
|
50
50
|
name: string;
|
|
51
51
|
version: string;
|
|
52
|
+
/** The spec's identity: one version may land at two directories. Absent from pre-placement shards. */
|
|
53
|
+
pkgDir?: string;
|
|
52
54
|
fileCount: number;
|
|
53
55
|
bytesWritten: number;
|
|
54
56
|
elapsed: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-batch-facet.d.ts","sourceRoot":"","sources":["../../src/npm/install-batch-facet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAShF,MAAM,WAAW,gBAAgB;IAC/B;mDAC+C;IAC/C,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB;uFACmF;IACnF,aAAa,EAAE;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,YAAY,EAAE,MAAM,CAAC;QACrB;;uDAE+C;QAC/C,wBAAwB,EAAE,MAAM,CAAC;QACjC,0BAA0B,EAAE,MAAM,CAAC;QACnC;;;0DAGkD;QAClD,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B;;;;qEAI6D;QAC7D,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF;;;;;;;;;;OAUG;IACH,eAAe,EAAE,KAAK,CAClB;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC9E;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,CACnE,CAAC;CACH;AAUD,eAAO,MAAM,sBAAsB,GACjC,OAAO,gBAAgB,EACvB,KAAK;IACH,UAAU,EAAE;QAIV,gBAAgB,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAK1F,gBAAgB,CAAC,EAAE,CACjB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;YACX,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;YACzB,MAAM,EAAE,KAAK,CACT;gBAAE,IAAI,EAAE,KAAK,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,GAC/D;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,CACpD,CAAC;SACH,CAAC,CAAC;QACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7F,CAAC;CACH,KACA,OAAO,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"install-batch-facet.d.ts","sourceRoot":"","sources":["../../src/npm/install-batch-facet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAShF,MAAM,WAAW,gBAAgB;IAC/B;mDAC+C;IAC/C,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB;uFACmF;IACnF,aAAa,EAAE;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,YAAY,EAAE,MAAM,CAAC;QACrB;;uDAE+C;QAC/C,wBAAwB,EAAE,MAAM,CAAC;QACjC,0BAA0B,EAAE,MAAM,CAAC;QACnC;;;0DAGkD;QAClD,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B;;;;qEAI6D;QAC7D,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF;;;;;;;;;;OAUG;IACH,eAAe,EAAE,KAAK,CAClB;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC9E;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,CACnE,CAAC;CACH;AAUD,eAAO,MAAM,sBAAsB,GACjC,OAAO,gBAAgB,EACvB,KAAK;IACH,UAAU,EAAE;QAIV,gBAAgB,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAK1F,gBAAgB,CAAC,EAAE,CACjB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;YACX,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;YACzB,MAAM,EAAE,KAAK,CACT;gBAAE,IAAI,EAAE,KAAK,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,GAC/D;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,CACpD,CAAC;SACH,CAAC,CAAC;QACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7F,CAAC;CACH,KACA,OAAO,CAAC,kBAAkB,CAo2B5B,CAAC"}
|
|
@@ -363,6 +363,11 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
363
363
|
});
|
|
364
364
|
sharedBufferedBytes += additionalBytes;
|
|
365
365
|
});
|
|
366
|
+
// A tarball placed twice in this shard is acquired once: the first owner
|
|
367
|
+
// publishes its bytes here, later owners of the URL wait for them. `null`
|
|
368
|
+
// means it had nothing to share and the waiter acquires on its own.
|
|
369
|
+
// Owners register on entry, so no waiter blocks an unstarted owner.
|
|
370
|
+
const tarballBytesByUrl = new Map();
|
|
366
371
|
// ── Per-package install (inlined fetchAndStagePackage logic) ─────────
|
|
367
372
|
//
|
|
368
373
|
// Kept inline because cloudflare-parallel serializes this whole function
|
|
@@ -374,6 +379,19 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
374
379
|
inFlight++;
|
|
375
380
|
if (inFlight > inFlightPeak)
|
|
376
381
|
inFlightPeak = inFlight;
|
|
382
|
+
let publishTarballBytes = () => { };
|
|
383
|
+
let sharedBytes = null;
|
|
384
|
+
const owner = tarballBytesByUrl.get(spec.tarballUrl);
|
|
385
|
+
if (owner) {
|
|
386
|
+
sharedBytes = await owner;
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
tarballBytesByUrl.set(spec.tarballUrl, new Promise((rs) => { publishTarballBytes = rs; }));
|
|
390
|
+
}
|
|
391
|
+
// [W4] Compressed bytes for R2 write-back, captured by the integrity
|
|
392
|
+
// tee below (null without integrity); published to duplicates on exit.
|
|
393
|
+
let capturedTgzBytes = null;
|
|
394
|
+
let r2HitBytes = sharedBytes;
|
|
377
395
|
// [W4] 1a. R2 cache lookup, hedged by the network fetch.
|
|
378
396
|
//
|
|
379
397
|
// The R2 GET is bounded by R2_RACE_TIMEOUT_MS. That bound guards against a
|
|
@@ -393,7 +411,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
393
411
|
// supervisor deployment) the R2 leg becomes a noop and there is nothing to
|
|
394
412
|
// overlap with, so no hedge is armed — the retry loop's own first fetch is
|
|
395
413
|
// already the first thing that happens.
|
|
396
|
-
const r2Available = typeof env.SUPERVISOR.getCachedTarball === 'function';
|
|
414
|
+
const r2Available = sharedBytes === null && typeof env.SUPERVISOR.getCachedTarball === 'function';
|
|
397
415
|
const r2WaitStart = Date.now();
|
|
398
416
|
const r2P = r2Available
|
|
399
417
|
? Promise.race([
|
|
@@ -438,13 +456,6 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
438
456
|
hedgeAbort.abort();
|
|
439
457
|
};
|
|
440
458
|
try {
|
|
441
|
-
// [W4] Captured compressed bytes for write-back to R2 on miss.
|
|
442
|
-
// Populated by the integrity-tee path below; remains null when
|
|
443
|
-
// integrity isn't present (rare; we only writeback when we can
|
|
444
|
-
// verify on next read). Hoisted to installOne scope per W4-plan
|
|
445
|
-
// §11 finding #4 lifecycle correctness.
|
|
446
|
-
let capturedTgzBytes = null;
|
|
447
|
-
let r2HitBytes = null;
|
|
448
459
|
// Acquisition span, measured from the first cache probe to the moment
|
|
449
460
|
// the tarball body is in hand.
|
|
450
461
|
let tarballElapsedMs = 0;
|
|
@@ -501,10 +512,12 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
501
512
|
// Cache HIT. The cross-tenant store is content-addressed and
|
|
502
513
|
// re-hashes on every read, so bytes that come back are already
|
|
503
514
|
// proven to be spec.integrity's tarball — there is exactly one
|
|
504
|
-
// verification point and it is not here.
|
|
515
|
+
// verification point and it is not here. Bytes shared by another
|
|
516
|
+
// placement were verified by their owner; not an R2 outcome.
|
|
505
517
|
discardPendingNetwork();
|
|
506
518
|
tarballElapsedMs = Date.now() - r2WaitStart;
|
|
507
|
-
|
|
519
|
+
if (!sharedBytes)
|
|
520
|
+
pipelinedTarballRaceWins++;
|
|
508
521
|
tarballsCompleted++;
|
|
509
522
|
cumulativeBytesDecoded += r2HitBytes.length;
|
|
510
523
|
// Synthesize a Response body from the R2 bytes so the existing
|
|
@@ -556,14 +569,14 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
556
569
|
}
|
|
557
570
|
if (!resp) {
|
|
558
571
|
return {
|
|
559
|
-
name: spec.name, version: spec.version,
|
|
572
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
560
573
|
fileCount: 0, bytesWritten: 0, elapsed: Date.now() - t0, warnings,
|
|
561
574
|
errorText: `fetch failed: ${lastErr?.message || String(lastErr)}`,
|
|
562
575
|
};
|
|
563
576
|
}
|
|
564
577
|
if (!resp.ok) {
|
|
565
578
|
return {
|
|
566
|
-
name: spec.name, version: spec.version,
|
|
579
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
567
580
|
fileCount: 0, bytesWritten: 0, elapsed: Date.now() - t0, warnings,
|
|
568
581
|
errorText: `HTTP ${resp.status}`,
|
|
569
582
|
};
|
|
@@ -571,7 +584,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
571
584
|
const body = resp.body;
|
|
572
585
|
if (!body) {
|
|
573
586
|
return {
|
|
574
|
-
name: spec.name, version: spec.version,
|
|
587
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
575
588
|
fileCount: 0, bytesWritten: 0, elapsed: Date.now() - t0, warnings,
|
|
576
589
|
errorText: 'no response body',
|
|
577
590
|
};
|
|
@@ -767,7 +780,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
767
780
|
}
|
|
768
781
|
}
|
|
769
782
|
return {
|
|
770
|
-
name: spec.name, version: spec.version,
|
|
783
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
771
784
|
fileCount: totalFileInodes, bytesWritten: totalBytesWritten,
|
|
772
785
|
elapsed: Date.now() - t0, warnings,
|
|
773
786
|
tarballSource: r2HitBytes ? 'cache' : 'registry',
|
|
@@ -776,7 +789,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
776
789
|
}
|
|
777
790
|
catch (e) {
|
|
778
791
|
return {
|
|
779
|
-
name: spec.name, version: spec.version,
|
|
792
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
780
793
|
fileCount: 0, bytesWritten: 0, elapsed: Date.now() - t0, warnings,
|
|
781
794
|
errorText: e?.message || String(e),
|
|
782
795
|
};
|
|
@@ -784,6 +797,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
784
797
|
finally {
|
|
785
798
|
// No-op once the retry loop has taken it; closes every early return.
|
|
786
799
|
discardPendingNetwork();
|
|
800
|
+
publishTarballBytes(capturedTgzBytes ?? r2HitBytes);
|
|
787
801
|
inFlight = Math.max(0, inFlight - 1);
|
|
788
802
|
}
|
|
789
803
|
};
|
package/dist/npm/installer.d.ts
CHANGED
|
@@ -91,6 +91,7 @@ export declare class NpmInstaller {
|
|
|
91
91
|
pid?: number;
|
|
92
92
|
npmLog?: NpmLogEmitter;
|
|
93
93
|
onProgress?: (msg: string) => void;
|
|
94
|
+
registry?: string;
|
|
94
95
|
}): Promise<NpmInstallResult>;
|
|
95
96
|
private _installInner;
|
|
96
97
|
/**
|
|
@@ -103,8 +104,13 @@ export declare class NpmInstaller {
|
|
|
103
104
|
* width < IN_DO_THRESHOLD (5) → in-DO fanout in-DO loader-pool
|
|
104
105
|
* width >= IN_DO_THRESHOLD → peer-DO fanout peer-DO (sibling NimbusSession DOs)
|
|
105
106
|
*
|
|
107
|
+
* Resolution is per edge, not per name: the first version of a name goes
|
|
108
|
+
* to root; a later edge the nearest visible placement does not satisfy
|
|
109
|
+
* nests a copy under its dependent, never higher (placement.ts; live case
|
|
110
|
+
* in tests/unit/npm-install-nested-conflict.mjs).
|
|
111
|
+
*
|
|
106
112
|
* The supervisor still owns:
|
|
107
|
-
* -
|
|
113
|
+
* - placement (`placed` / `pending` / `settled`, by placement path),
|
|
108
114
|
* - X.5-F top-level / required-peer policy,
|
|
109
115
|
* - X.5-G G1 optional-native silent-skip,
|
|
110
116
|
* - X.5-drizzle best-effort tagging on optional-peer subtrees,
|
|
@@ -170,9 +176,7 @@ export declare class NpmInstaller {
|
|
|
170
176
|
* Check if a lockfile is still valid against current package.json specs.
|
|
171
177
|
*/
|
|
172
178
|
private isLockfileValid;
|
|
173
|
-
/**
|
|
174
|
-
* Convert a lockfile back to resolved packages (for cache restore).
|
|
175
|
-
*/
|
|
179
|
+
/** Convert a lockfile back to resolved packages: root by name, nested by placement path. */
|
|
176
180
|
private lockfileToResolved;
|
|
177
181
|
/**
|
|
178
182
|
* Write lockfile to SQLite.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/npm/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,SAAS,EAGV,MAAM,mCAAmC,CAAC;AAM3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,OAAO,EAAE,QAAQ,EAAsB,MAAM,YAAY,CAAC;AAC1D,OAAO,EAEiC,KAAK,OAAO,EACnD,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/npm/installer.ts"],"names":[],"mappings":"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"}
|