@camstack/system 1.1.26 → 1.1.27

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/index.js CHANGED
@@ -3339,32 +3339,30 @@ var AddonInstaller = class AddonInstaller {
3339
3339
  }
3340
3340
  /** Install addon from a tgz file (uploaded or downloaded) */
3341
3341
  async installFromTgz(tgzPath) {
3342
- const tmpDir = node_fs.mkdtempSync(node_path.join(node_os.tmpdir(), "camstack-addon-install-"));
3342
+ const stagingRoot = node_path.join(this.addonsDir, ".staging");
3343
+ ensureDir(stagingRoot);
3344
+ await this.sweepGraveyard(stagingRoot);
3345
+ const stagingDir = node_path.join(stagingRoot, `install-${process.pid}-${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`);
3346
+ ensureDir(stagingDir);
3343
3347
  try {
3344
3348
  await execFileAsync("tar", [
3345
3349
  "-xzf",
3346
3350
  tgzPath,
3347
3351
  "-C",
3348
- tmpDir
3349
- ], { timeout: 3e4 });
3350
- const extractedDir = node_path.join(tmpDir, "package");
3351
- const pkgJsonPath = node_fs.existsSync(node_path.join(extractedDir, "package.json")) ? node_path.join(extractedDir, "package.json") : node_path.join(tmpDir, "package.json");
3352
+ stagingDir
3353
+ ], { timeout: 12e4 });
3354
+ const pkgDir = node_fs.existsSync(node_path.join(stagingDir, "package", "package.json")) ? node_path.join(stagingDir, "package") : stagingDir;
3355
+ const pkgJsonPath = node_path.join(pkgDir, "package.json");
3352
3356
  if (!node_fs.existsSync(pkgJsonPath)) throw new Error("No package.json found in tgz archive");
3353
3357
  const pkgView = readPackageJson(pkgJsonPath);
3354
3358
  if (!pkgView) throw new Error(`Invalid package.json at ${pkgJsonPath}`);
3355
3359
  if (!pkgView.camstackAddons) throw new Error(`Package ${pkgView.name} has no camstack.addons manifest`);
3356
3360
  const targetDir = node_path.join(this.addonsDir, pkgView.name);
3357
- await this.evictInstallDir(targetDir);
3358
- ensureDir(targetDir);
3359
- const sourceDir = node_path.dirname(pkgJsonPath);
3360
3361
  const strippedManifest = stripCamstackDeps(pkgView.raw);
3361
- await node_fs.promises.writeFile(node_path.join(targetDir, "package.json"), JSON.stringify(strippedManifest, null, 2));
3362
- const sourceDist = node_path.join(sourceDir, "dist");
3363
- if (node_fs.existsSync(sourceDist)) await copyDirRecursive(sourceDist, node_path.join(targetDir, "dist"));
3364
- await copyExtraFileDirs(pkgView.raw, sourceDir, targetDir);
3362
+ await node_fs.promises.writeFile(pkgJsonPath, JSON.stringify(strippedManifest, null, 2));
3365
3363
  const strippedRuntimeDeps = strippedManifest["dependencies"];
3366
3364
  if (strippedRuntimeDeps != null && typeof strippedRuntimeDeps === "object" && Object.keys(strippedRuntimeDeps).length > 0) {
3367
- this.logger.info(`${pkgView.name} — installing runtime dependencies`, { meta: { targetDir } });
3365
+ this.logger.info(`${pkgView.name} — installing runtime dependencies`, { meta: { stagingDir: pkgDir } });
3368
3366
  try {
3369
3367
  await execFileAsync("npm", [
3370
3368
  "install",
@@ -3375,7 +3373,7 @@ var AddonInstaller = class AddonInstaller {
3375
3373
  "--no-package-lock",
3376
3374
  ...this.registry ? ["--registry", this.registry] : []
3377
3375
  ], {
3378
- cwd: targetDir,
3376
+ cwd: pkgDir,
3379
3377
  timeout: 24e4
3380
3378
  });
3381
3379
  } catch (err) {
@@ -3383,14 +3381,13 @@ var AddonInstaller = class AddonInstaller {
3383
3381
  }
3384
3382
  }
3385
3383
  try {
3386
- await require_manifest_python_deps.installManifestNativeDeps(targetDir, pkgView.raw, this.logger, this.registry);
3384
+ await require_manifest_python_deps.installManifestNativeDeps(pkgDir, pkgView.raw, this.logger, this.registry);
3387
3385
  } catch (nativeErr) {
3388
- await node_fs.promises.rm(targetDir, {
3389
- recursive: true,
3390
- force: true
3391
- });
3392
3386
  throw new Error(`${pkgView.name} — native deps install failed: ${(0, _camstack_types.errMsg)(nativeErr)}`, { cause: nativeErr });
3393
3387
  }
3388
+ await this.evictInstallDir(targetDir);
3389
+ ensureDir(node_path.dirname(targetDir));
3390
+ await node_fs.promises.rename(pkgDir, targetDir);
3394
3391
  this.manifest.upsert(pkgView.name, {
3395
3392
  version: pkgView.version,
3396
3393
  source: "bundled"
@@ -3400,10 +3397,10 @@ var AddonInstaller = class AddonInstaller {
3400
3397
  version: pkgView.version
3401
3398
  };
3402
3399
  } finally {
3403
- await node_fs.promises.rm(tmpDir, {
3400
+ await node_fs.promises.rm(stagingDir, {
3404
3401
  recursive: true,
3405
3402
  force: true
3406
- });
3403
+ }).catch(() => void 0);
3407
3404
  }
3408
3405
  }
3409
3406
  /**
package/dist/index.mjs CHANGED
@@ -3331,32 +3331,30 @@ var AddonInstaller = class AddonInstaller {
3331
3331
  }
3332
3332
  /** Install addon from a tgz file (uploaded or downloaded) */
3333
3333
  async installFromTgz(tgzPath) {
3334
- const tmpDir = fs$17.mkdtempSync(path$39.join(os$18.tmpdir(), "camstack-addon-install-"));
3334
+ const stagingRoot = path$39.join(this.addonsDir, ".staging");
3335
+ ensureDir(stagingRoot);
3336
+ await this.sweepGraveyard(stagingRoot);
3337
+ const stagingDir = path$39.join(stagingRoot, `install-${process.pid}-${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`);
3338
+ ensureDir(stagingDir);
3335
3339
  try {
3336
3340
  await execFileAsync("tar", [
3337
3341
  "-xzf",
3338
3342
  tgzPath,
3339
3343
  "-C",
3340
- tmpDir
3341
- ], { timeout: 3e4 });
3342
- const extractedDir = path$39.join(tmpDir, "package");
3343
- const pkgJsonPath = fs$17.existsSync(path$39.join(extractedDir, "package.json")) ? path$39.join(extractedDir, "package.json") : path$39.join(tmpDir, "package.json");
3344
+ stagingDir
3345
+ ], { timeout: 12e4 });
3346
+ const pkgDir = fs$17.existsSync(path$39.join(stagingDir, "package", "package.json")) ? path$39.join(stagingDir, "package") : stagingDir;
3347
+ const pkgJsonPath = path$39.join(pkgDir, "package.json");
3344
3348
  if (!fs$17.existsSync(pkgJsonPath)) throw new Error("No package.json found in tgz archive");
3345
3349
  const pkgView = readPackageJson(pkgJsonPath);
3346
3350
  if (!pkgView) throw new Error(`Invalid package.json at ${pkgJsonPath}`);
3347
3351
  if (!pkgView.camstackAddons) throw new Error(`Package ${pkgView.name} has no camstack.addons manifest`);
3348
3352
  const targetDir = path$39.join(this.addonsDir, pkgView.name);
3349
- await this.evictInstallDir(targetDir);
3350
- ensureDir(targetDir);
3351
- const sourceDir = path$39.dirname(pkgJsonPath);
3352
3353
  const strippedManifest = stripCamstackDeps(pkgView.raw);
3353
- await fs$17.promises.writeFile(path$39.join(targetDir, "package.json"), JSON.stringify(strippedManifest, null, 2));
3354
- const sourceDist = path$39.join(sourceDir, "dist");
3355
- if (fs$17.existsSync(sourceDist)) await copyDirRecursive(sourceDist, path$39.join(targetDir, "dist"));
3356
- await copyExtraFileDirs(pkgView.raw, sourceDir, targetDir);
3354
+ await fs$17.promises.writeFile(pkgJsonPath, JSON.stringify(strippedManifest, null, 2));
3357
3355
  const strippedRuntimeDeps = strippedManifest["dependencies"];
3358
3356
  if (strippedRuntimeDeps != null && typeof strippedRuntimeDeps === "object" && Object.keys(strippedRuntimeDeps).length > 0) {
3359
- this.logger.info(`${pkgView.name} — installing runtime dependencies`, { meta: { targetDir } });
3357
+ this.logger.info(`${pkgView.name} — installing runtime dependencies`, { meta: { stagingDir: pkgDir } });
3360
3358
  try {
3361
3359
  await execFileAsync("npm", [
3362
3360
  "install",
@@ -3367,7 +3365,7 @@ var AddonInstaller = class AddonInstaller {
3367
3365
  "--no-package-lock",
3368
3366
  ...this.registry ? ["--registry", this.registry] : []
3369
3367
  ], {
3370
- cwd: targetDir,
3368
+ cwd: pkgDir,
3371
3369
  timeout: 24e4
3372
3370
  });
3373
3371
  } catch (err) {
@@ -3375,14 +3373,13 @@ var AddonInstaller = class AddonInstaller {
3375
3373
  }
3376
3374
  }
3377
3375
  try {
3378
- await installManifestNativeDeps(targetDir, pkgView.raw, this.logger, this.registry);
3376
+ await installManifestNativeDeps(pkgDir, pkgView.raw, this.logger, this.registry);
3379
3377
  } catch (nativeErr) {
3380
- await fs$17.promises.rm(targetDir, {
3381
- recursive: true,
3382
- force: true
3383
- });
3384
3378
  throw new Error(`${pkgView.name} — native deps install failed: ${errMsg(nativeErr)}`, { cause: nativeErr });
3385
3379
  }
3380
+ await this.evictInstallDir(targetDir);
3381
+ ensureDir(path$39.dirname(targetDir));
3382
+ await fs$17.promises.rename(pkgDir, targetDir);
3386
3383
  this.manifest.upsert(pkgView.name, {
3387
3384
  version: pkgView.version,
3388
3385
  source: "bundled"
@@ -3392,10 +3389,10 @@ var AddonInstaller = class AddonInstaller {
3392
3389
  version: pkgView.version
3393
3390
  };
3394
3391
  } finally {
3395
- await fs$17.promises.rm(tmpDir, {
3392
+ await fs$17.promises.rm(stagingDir, {
3396
3393
  recursive: true,
3397
3394
  force: true
3398
- });
3395
+ }).catch(() => void 0);
3399
3396
  }
3400
3397
  }
3401
3398
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.1.26",
3
+ "version": "1.1.27",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",