@pipelab/plugin-construct 1.0.0-beta.27 → 1.0.0-beta.31
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.cjs +75 -29
- package/dist/index.mjs +75 -29
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -4
package/dist/index.cjs
CHANGED
|
@@ -89549,7 +89549,7 @@ const runWithLiveLogs = async (command, args, execaOptions, log, hooks, abortSig
|
|
|
89549
89549
|
TERM: "xterm-256color",
|
|
89550
89550
|
FORCE_STDERR_LOGGING: "1"
|
|
89551
89551
|
},
|
|
89552
|
-
cancelSignal: abortSignal
|
|
89552
|
+
cancelSignal: abortSignal ?? execaOptions.cancelSignal
|
|
89553
89553
|
});
|
|
89554
89554
|
hooks?.onCreated?.(subprocess);
|
|
89555
89555
|
subprocess.stdout?.on("data", (data) => {
|
|
@@ -151255,6 +151255,17 @@ async function isOnline() {
|
|
|
151255
151255
|
lastCheckTime = now;
|
|
151256
151256
|
return isOnlineCached;
|
|
151257
151257
|
}
|
|
151258
|
+
function allowPrereleaseInRange(rangeStr) {
|
|
151259
|
+
try {
|
|
151260
|
+
return new import_semver.default.Range(rangeStr).set.map((conj) => conj.map((c) => {
|
|
151261
|
+
const v = c.semver;
|
|
151262
|
+
if (v.prerelease && v.prerelease.length) return c.operator + v.format();
|
|
151263
|
+
return c.operator + v.major + "." + v.minor + "." + v.patch + "-0";
|
|
151264
|
+
}).join(" ")).join(" || ");
|
|
151265
|
+
} catch {
|
|
151266
|
+
return rangeStr;
|
|
151267
|
+
}
|
|
151268
|
+
}
|
|
151258
151269
|
/**
|
|
151259
151270
|
* Robust utility to fetch, cache, and resolve an NPM package.
|
|
151260
151271
|
* Centralized in core-node to avoid circular dependencies.
|
|
@@ -151277,6 +151288,7 @@ async function fetchPackage(packageName, versionOrRange, options) {
|
|
|
151277
151288
|
const ctx = options.context;
|
|
151278
151289
|
const baseDir = ctx.getPackagesPath(packageName);
|
|
151279
151290
|
let resolvedVersion;
|
|
151291
|
+
const includePrerelease = !!(ctx.releaseTag && ctx.releaseTag !== "latest");
|
|
151280
151292
|
let resolvedVersionOrRange = versionOrRange;
|
|
151281
151293
|
if (resolvedVersionOrRange === "local") resolvedVersionOrRange = "latest";
|
|
151282
151294
|
console.log(`[Fetcher] Resolving ${packageName}@${resolvedVersionOrRange || "latest"}...`);
|
|
@@ -151284,7 +151296,7 @@ async function fetchPackage(packageName, versionOrRange, options) {
|
|
|
151284
151296
|
if (!await isOnline()) {
|
|
151285
151297
|
console.warn(`[Fetcher] ${packageName}: offline mode detected (${Date.now() - resolveStart}ms), trying local fallback...`);
|
|
151286
151298
|
const fallbackStart = Date.now();
|
|
151287
|
-
const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, /* @__PURE__ */ new Error("Offline"), baseDir, packageName);
|
|
151299
|
+
const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, /* @__PURE__ */ new Error("Offline"), baseDir, packageName, includePrerelease);
|
|
151288
151300
|
if (fallbackVersion) {
|
|
151289
151301
|
resolvedVersion = fallbackVersion;
|
|
151290
151302
|
console.log(`[Fetcher] ${packageName}: Resolved to local fallback ${resolvedVersion} (${Date.now() - fallbackStart}ms)`);
|
|
@@ -151299,7 +151311,27 @@ async function fetchPackage(packageName, versionOrRange, options) {
|
|
|
151299
151311
|
const packument = await packumentPromise;
|
|
151300
151312
|
const versions = Object.keys(packument.versions);
|
|
151301
151313
|
const range = resolvedVersionOrRange || "latest";
|
|
151302
|
-
let foundVersion = packument["dist-tags"]?.[range] || import_semver.default.maxSatisfying(versions, range);
|
|
151314
|
+
let foundVersion = packument["dist-tags"]?.[range] || import_semver.default.maxSatisfying(versions, range, { includePrerelease });
|
|
151315
|
+
if (!foundVersion && ctx.releaseTag && ctx.releaseTag !== "latest") {
|
|
151316
|
+
const releaseTagVersion = packument["dist-tags"]?.[ctx.releaseTag];
|
|
151317
|
+
if (releaseTagVersion && import_semver.default.valid(releaseTagVersion)) {
|
|
151318
|
+
const rewrittenRangeForCheck = allowPrereleaseInRange(range);
|
|
151319
|
+
if (import_semver.default.satisfies(releaseTagVersion, rewrittenRangeForCheck, { includePrerelease: true })) {
|
|
151320
|
+
console.log(`[Fetcher] Using release tag "${ctx.releaseTag}" (${releaseTagVersion}) for ${packageName}@${range} because it satisfies the range`);
|
|
151321
|
+
foundVersion = releaseTagVersion;
|
|
151322
|
+
}
|
|
151323
|
+
}
|
|
151324
|
+
}
|
|
151325
|
+
if (!foundVersion && includePrerelease) {
|
|
151326
|
+
const rewrittenRange = allowPrereleaseInRange(range);
|
|
151327
|
+
if (rewrittenRange !== range) {
|
|
151328
|
+
const matched = import_semver.default.maxSatisfying(versions, rewrittenRange, { includePrerelease });
|
|
151329
|
+
if (matched) {
|
|
151330
|
+
console.log(`[Fetcher] Resolved ${packageName}@${range} to ${matched} via rewritten range ${rewrittenRange}`);
|
|
151331
|
+
foundVersion = matched;
|
|
151332
|
+
}
|
|
151333
|
+
}
|
|
151334
|
+
}
|
|
151303
151335
|
if (range === "latest" && ctx.releaseTag && ctx.releaseTag !== "latest") {
|
|
151304
151336
|
const releaseTagVersion = packument["dist-tags"]?.[ctx.releaseTag];
|
|
151305
151337
|
if (releaseTagVersion && import_semver.default.valid(releaseTagVersion)) {
|
|
@@ -151315,7 +151347,7 @@ async function fetchPackage(packageName, versionOrRange, options) {
|
|
|
151315
151347
|
} catch (error) {
|
|
151316
151348
|
console.warn(`[Fetcher] ${packageName}: remote resolution failed (${Date.now() - resolveStart}ms), trying local fallback...`);
|
|
151317
151349
|
const fallbackStart = Date.now();
|
|
151318
|
-
const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, error, baseDir, packageName);
|
|
151350
|
+
const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, error, baseDir, packageName, includePrerelease);
|
|
151319
151351
|
if (fallbackVersion) {
|
|
151320
151352
|
resolvedVersion = fallbackVersion;
|
|
151321
151353
|
console.log(`[Fetcher] ${packageName}: Resolved to local fallback ${resolvedVersion} (${Date.now() - fallbackStart}ms)`);
|
|
@@ -151497,35 +151529,24 @@ async function installDependencies(packageDir, packageName, options) {
|
|
|
151497
151529
|
console.log(`[Fetcher] ${packageName}: Dependencies already installed, skipping.`);
|
|
151498
151530
|
return;
|
|
151499
151531
|
}
|
|
151500
|
-
const tempDir = `${packageDir}.tmp-deps-${Math.random().toString(36).slice(2)}`;
|
|
151501
|
-
await (0, node_fs_promises.mkdir)(tempDir, { recursive: true });
|
|
151502
151532
|
try {
|
|
151503
|
-
await (0, node_fs_promises.cp)((0, node_path.join)(packageDir, "package.json"), (0, node_path.join)(tempDir, "package.json"));
|
|
151504
151533
|
console.log(`[Fetcher] ${packageName}: Ensuring dependencies are installed...`);
|
|
151505
151534
|
const pnpmStart = Date.now();
|
|
151506
|
-
const { all } = await runPnpm(
|
|
151535
|
+
const { all } = await runPnpm(packageDir, {
|
|
151507
151536
|
signal: options.signal,
|
|
151508
151537
|
context: options.context
|
|
151509
151538
|
});
|
|
151510
151539
|
console.log(`[Fetcher] ${packageName}: pnpm install command took ${Date.now() - pnpmStart}ms`);
|
|
151511
151540
|
if (all) console.log(`[Fetcher] ${packageName}: Installation trace:\n${all}`);
|
|
151512
|
-
|
|
151513
|
-
if ((0, node_fs.existsSync)(nodeModulesPath)) await (0, node_fs_promises.rm)(nodeModulesPath, {
|
|
151514
|
-
recursive: true,
|
|
151515
|
-
force: true
|
|
151516
|
-
}).catch(() => {});
|
|
151517
|
-
const renameStart = Date.now();
|
|
151518
|
-
await (0, node_fs_promises.rename)(tempNodeModules, nodeModulesPath);
|
|
151519
|
-
console.log(`[Fetcher] ${packageName}: Dependencies installed successfully (rename took ${Date.now() - renameStart}ms, total installDependencies took ${Date.now() - start}ms).`);
|
|
151541
|
+
console.log(`[Fetcher] ${packageName}: Dependencies installed successfully (total installDependencies took ${Date.now() - start}ms).`);
|
|
151520
151542
|
} catch (err) {
|
|
151521
151543
|
console.error(`[Fetcher] ${packageName}: CRITICAL ERROR during dependency installation: ${err.message}`);
|
|
151522
151544
|
if (err.all) console.error(`[Fetcher] ${packageName}: Error details:\n${err.all}`);
|
|
151523
|
-
|
|
151524
|
-
} finally {
|
|
151525
|
-
await (0, node_fs_promises.rm)(tempDir, {
|
|
151545
|
+
await (0, node_fs_promises.rm)(nodeModulesPath, {
|
|
151526
151546
|
recursive: true,
|
|
151527
151547
|
force: true
|
|
151528
151548
|
}).catch(() => {});
|
|
151549
|
+
throw new Error(`Failed to install dependencies for ${packageName}. See logs for details.`);
|
|
151529
151550
|
}
|
|
151530
151551
|
}
|
|
151531
151552
|
/**
|
|
@@ -151581,7 +151602,7 @@ async function crawlMonorepoPackages() {
|
|
|
151581
151602
|
}
|
|
151582
151603
|
return cache;
|
|
151583
151604
|
}
|
|
151584
|
-
async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
|
|
151605
|
+
async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix, includePrerelease = false) {
|
|
151585
151606
|
if (!(0, node_fs.existsSync)(baseDir)) return null;
|
|
151586
151607
|
try {
|
|
151587
151608
|
const localVersions = (await (0, node_fs_promises.readdir)(baseDir, { withFileTypes: true })).filter((e) => e.isDirectory() || e.isSymbolicLink()).map((e) => e.name).filter((name) => !!import_semver.default.valid(name));
|
|
@@ -151594,7 +151615,7 @@ async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
|
|
|
151594
151615
|
return latestLocal;
|
|
151595
151616
|
}
|
|
151596
151617
|
} else {
|
|
151597
|
-
const matched = import_semver.default.maxSatisfying(localVersions, range);
|
|
151618
|
+
const matched = import_semver.default.maxSatisfying(localVersions, range, { includePrerelease });
|
|
151598
151619
|
if (matched) {
|
|
151599
151620
|
console.info(`[Fetcher] ${logPrefix}: Using locally cached matching version: ${matched} for range ${range}`);
|
|
151600
151621
|
return matched;
|
|
@@ -151662,11 +151683,29 @@ const fileExists = async (path) => {
|
|
|
151662
151683
|
};
|
|
151663
151684
|
//#endregion
|
|
151664
151685
|
//#region ../plugin-core/src/archive-utils.ts
|
|
151665
|
-
const zipFolder = async (from, to, log) => {
|
|
151686
|
+
const zipFolder = async (from, to, log, abortSignal) => {
|
|
151687
|
+
if (abortSignal?.aborted) {
|
|
151688
|
+
const abortError = /* @__PURE__ */ new Error("Aborted");
|
|
151689
|
+
abortError.name = "AbortError";
|
|
151690
|
+
throw abortError;
|
|
151691
|
+
}
|
|
151666
151692
|
const output = (0, node_fs.createWriteStream)(to);
|
|
151667
151693
|
const archive = (0, import_archiver.default)("zip", { zlib: { level: 9 } });
|
|
151668
|
-
return new Promise(
|
|
151694
|
+
return new Promise((resolve, reject) => {
|
|
151695
|
+
const onAbort = () => {
|
|
151696
|
+
try {
|
|
151697
|
+
archive.abort();
|
|
151698
|
+
} catch {}
|
|
151699
|
+
try {
|
|
151700
|
+
output.destroy();
|
|
151701
|
+
} catch {}
|
|
151702
|
+
const abortError = /* @__PURE__ */ new Error("Aborted");
|
|
151703
|
+
abortError.name = "AbortError";
|
|
151704
|
+
reject(abortError);
|
|
151705
|
+
};
|
|
151706
|
+
if (abortSignal) abortSignal.addEventListener("abort", onAbort);
|
|
151669
151707
|
output.on("close", function() {
|
|
151708
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151670
151709
|
log(archive.pointer() + " total bytes");
|
|
151671
151710
|
log("archiver has been finalized and the output file descriptor has closed.");
|
|
151672
151711
|
resolve(to);
|
|
@@ -151675,11 +151714,15 @@ const zipFolder = async (from, to, log) => {
|
|
|
151675
151714
|
log("Data has been drained");
|
|
151676
151715
|
});
|
|
151677
151716
|
archive.on("error", function(err) {
|
|
151717
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151678
151718
|
reject(err);
|
|
151679
151719
|
});
|
|
151680
151720
|
archive.pipe(output);
|
|
151681
151721
|
archive.directory(from, false);
|
|
151682
|
-
|
|
151722
|
+
archive.finalize().catch((err) => {
|
|
151723
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151724
|
+
reject(err);
|
|
151725
|
+
});
|
|
151683
151726
|
});
|
|
151684
151727
|
};
|
|
151685
151728
|
//#endregion
|
|
@@ -151931,10 +151974,11 @@ const sharedParams = {
|
|
|
151931
151974
|
const exportc3p = async (file, { cwd, log, inputs, setOutput, paths, abortSignal, context: ctx }) => {
|
|
151932
151975
|
let browserContext = void 0;
|
|
151933
151976
|
let browser = void 0;
|
|
151934
|
-
|
|
151977
|
+
const onAbort = () => {
|
|
151935
151978
|
console.error("aborted");
|
|
151936
151979
|
browserContext?.close();
|
|
151937
|
-
}
|
|
151980
|
+
};
|
|
151981
|
+
abortSignal.addEventListener("abort", onAbort);
|
|
151938
151982
|
const newInputs = inputs;
|
|
151939
151983
|
const { thirdparty, node, pnpm } = paths;
|
|
151940
151984
|
const browserName = "chromium";
|
|
@@ -152031,6 +152075,7 @@ const exportc3p = async (file, { cwd, log, inputs, setOutput, paths, abortSignal
|
|
|
152031
152075
|
log("error, no result, crashed", e);
|
|
152032
152076
|
throw new Error("ConstructExport failed: " + e.message);
|
|
152033
152077
|
} finally {
|
|
152078
|
+
abortSignal.removeEventListener("abort", onAbort);
|
|
152034
152079
|
if (browserContext) await browserContext.close();
|
|
152035
152080
|
if (browser) await browser.close();
|
|
152036
152081
|
}
|
|
@@ -152129,9 +152174,10 @@ const exportProjectAction = createAction({
|
|
|
152129
152174
|
icon: ""
|
|
152130
152175
|
});
|
|
152131
152176
|
const ExportProjectActionRunner = createActionRunner(async (options) => {
|
|
152132
|
-
|
|
152133
|
-
|
|
152134
|
-
|
|
152177
|
+
const folder = options.inputs.folder;
|
|
152178
|
+
if (!folder) throw new Error("You must specify a valid construct project folder");
|
|
152179
|
+
if (!await fileExists(folder)) throw new Error("You must specify a valid construct project folder");
|
|
152180
|
+
await exportc3p(await zipFolder(folder, (0, node_path.join)(options.cwd, "c3_tmp_proj.c3p"), options.log, options.abortSignal), options);
|
|
152135
152181
|
});
|
|
152136
152182
|
//#endregion
|
|
152137
152183
|
//#region src/index.ts
|
package/dist/index.mjs
CHANGED
|
@@ -89542,7 +89542,7 @@ const runWithLiveLogs = async (command, args, execaOptions, log, hooks, abortSig
|
|
|
89542
89542
|
TERM: "xterm-256color",
|
|
89543
89543
|
FORCE_STDERR_LOGGING: "1"
|
|
89544
89544
|
},
|
|
89545
|
-
cancelSignal: abortSignal
|
|
89545
|
+
cancelSignal: abortSignal ?? execaOptions.cancelSignal
|
|
89546
89546
|
});
|
|
89547
89547
|
hooks?.onCreated?.(subprocess);
|
|
89548
89548
|
subprocess.stdout?.on("data", (data) => {
|
|
@@ -151249,6 +151249,17 @@ async function isOnline() {
|
|
|
151249
151249
|
lastCheckTime = now;
|
|
151250
151250
|
return isOnlineCached;
|
|
151251
151251
|
}
|
|
151252
|
+
function allowPrereleaseInRange(rangeStr) {
|
|
151253
|
+
try {
|
|
151254
|
+
return new import_semver.default.Range(rangeStr).set.map((conj) => conj.map((c) => {
|
|
151255
|
+
const v = c.semver;
|
|
151256
|
+
if (v.prerelease && v.prerelease.length) return c.operator + v.format();
|
|
151257
|
+
return c.operator + v.major + "." + v.minor + "." + v.patch + "-0";
|
|
151258
|
+
}).join(" ")).join(" || ");
|
|
151259
|
+
} catch {
|
|
151260
|
+
return rangeStr;
|
|
151261
|
+
}
|
|
151262
|
+
}
|
|
151252
151263
|
/**
|
|
151253
151264
|
* Robust utility to fetch, cache, and resolve an NPM package.
|
|
151254
151265
|
* Centralized in core-node to avoid circular dependencies.
|
|
@@ -151271,6 +151282,7 @@ async function fetchPackage(packageName, versionOrRange, options) {
|
|
|
151271
151282
|
const ctx = options.context;
|
|
151272
151283
|
const baseDir = ctx.getPackagesPath(packageName);
|
|
151273
151284
|
let resolvedVersion;
|
|
151285
|
+
const includePrerelease = !!(ctx.releaseTag && ctx.releaseTag !== "latest");
|
|
151274
151286
|
let resolvedVersionOrRange = versionOrRange;
|
|
151275
151287
|
if (resolvedVersionOrRange === "local") resolvedVersionOrRange = "latest";
|
|
151276
151288
|
console.log(`[Fetcher] Resolving ${packageName}@${resolvedVersionOrRange || "latest"}...`);
|
|
@@ -151278,7 +151290,7 @@ async function fetchPackage(packageName, versionOrRange, options) {
|
|
|
151278
151290
|
if (!await isOnline()) {
|
|
151279
151291
|
console.warn(`[Fetcher] ${packageName}: offline mode detected (${Date.now() - resolveStart}ms), trying local fallback...`);
|
|
151280
151292
|
const fallbackStart = Date.now();
|
|
151281
|
-
const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, /* @__PURE__ */ new Error("Offline"), baseDir, packageName);
|
|
151293
|
+
const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, /* @__PURE__ */ new Error("Offline"), baseDir, packageName, includePrerelease);
|
|
151282
151294
|
if (fallbackVersion) {
|
|
151283
151295
|
resolvedVersion = fallbackVersion;
|
|
151284
151296
|
console.log(`[Fetcher] ${packageName}: Resolved to local fallback ${resolvedVersion} (${Date.now() - fallbackStart}ms)`);
|
|
@@ -151293,7 +151305,27 @@ async function fetchPackage(packageName, versionOrRange, options) {
|
|
|
151293
151305
|
const packument = await packumentPromise;
|
|
151294
151306
|
const versions = Object.keys(packument.versions);
|
|
151295
151307
|
const range = resolvedVersionOrRange || "latest";
|
|
151296
|
-
let foundVersion = packument["dist-tags"]?.[range] || import_semver.default.maxSatisfying(versions, range);
|
|
151308
|
+
let foundVersion = packument["dist-tags"]?.[range] || import_semver.default.maxSatisfying(versions, range, { includePrerelease });
|
|
151309
|
+
if (!foundVersion && ctx.releaseTag && ctx.releaseTag !== "latest") {
|
|
151310
|
+
const releaseTagVersion = packument["dist-tags"]?.[ctx.releaseTag];
|
|
151311
|
+
if (releaseTagVersion && import_semver.default.valid(releaseTagVersion)) {
|
|
151312
|
+
const rewrittenRangeForCheck = allowPrereleaseInRange(range);
|
|
151313
|
+
if (import_semver.default.satisfies(releaseTagVersion, rewrittenRangeForCheck, { includePrerelease: true })) {
|
|
151314
|
+
console.log(`[Fetcher] Using release tag "${ctx.releaseTag}" (${releaseTagVersion}) for ${packageName}@${range} because it satisfies the range`);
|
|
151315
|
+
foundVersion = releaseTagVersion;
|
|
151316
|
+
}
|
|
151317
|
+
}
|
|
151318
|
+
}
|
|
151319
|
+
if (!foundVersion && includePrerelease) {
|
|
151320
|
+
const rewrittenRange = allowPrereleaseInRange(range);
|
|
151321
|
+
if (rewrittenRange !== range) {
|
|
151322
|
+
const matched = import_semver.default.maxSatisfying(versions, rewrittenRange, { includePrerelease });
|
|
151323
|
+
if (matched) {
|
|
151324
|
+
console.log(`[Fetcher] Resolved ${packageName}@${range} to ${matched} via rewritten range ${rewrittenRange}`);
|
|
151325
|
+
foundVersion = matched;
|
|
151326
|
+
}
|
|
151327
|
+
}
|
|
151328
|
+
}
|
|
151297
151329
|
if (range === "latest" && ctx.releaseTag && ctx.releaseTag !== "latest") {
|
|
151298
151330
|
const releaseTagVersion = packument["dist-tags"]?.[ctx.releaseTag];
|
|
151299
151331
|
if (releaseTagVersion && import_semver.default.valid(releaseTagVersion)) {
|
|
@@ -151309,7 +151341,7 @@ async function fetchPackage(packageName, versionOrRange, options) {
|
|
|
151309
151341
|
} catch (error) {
|
|
151310
151342
|
console.warn(`[Fetcher] ${packageName}: remote resolution failed (${Date.now() - resolveStart}ms), trying local fallback...`);
|
|
151311
151343
|
const fallbackStart = Date.now();
|
|
151312
|
-
const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, error, baseDir, packageName);
|
|
151344
|
+
const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, error, baseDir, packageName, includePrerelease);
|
|
151313
151345
|
if (fallbackVersion) {
|
|
151314
151346
|
resolvedVersion = fallbackVersion;
|
|
151315
151347
|
console.log(`[Fetcher] ${packageName}: Resolved to local fallback ${resolvedVersion} (${Date.now() - fallbackStart}ms)`);
|
|
@@ -151491,35 +151523,24 @@ async function installDependencies(packageDir, packageName, options) {
|
|
|
151491
151523
|
console.log(`[Fetcher] ${packageName}: Dependencies already installed, skipping.`);
|
|
151492
151524
|
return;
|
|
151493
151525
|
}
|
|
151494
|
-
const tempDir = `${packageDir}.tmp-deps-${Math.random().toString(36).slice(2)}`;
|
|
151495
|
-
await mkdir(tempDir, { recursive: true });
|
|
151496
151526
|
try {
|
|
151497
|
-
await cp(join(packageDir, "package.json"), join(tempDir, "package.json"));
|
|
151498
151527
|
console.log(`[Fetcher] ${packageName}: Ensuring dependencies are installed...`);
|
|
151499
151528
|
const pnpmStart = Date.now();
|
|
151500
|
-
const { all } = await runPnpm(
|
|
151529
|
+
const { all } = await runPnpm(packageDir, {
|
|
151501
151530
|
signal: options.signal,
|
|
151502
151531
|
context: options.context
|
|
151503
151532
|
});
|
|
151504
151533
|
console.log(`[Fetcher] ${packageName}: pnpm install command took ${Date.now() - pnpmStart}ms`);
|
|
151505
151534
|
if (all) console.log(`[Fetcher] ${packageName}: Installation trace:\n${all}`);
|
|
151506
|
-
|
|
151507
|
-
if (existsSync(nodeModulesPath)) await rm(nodeModulesPath, {
|
|
151508
|
-
recursive: true,
|
|
151509
|
-
force: true
|
|
151510
|
-
}).catch(() => {});
|
|
151511
|
-
const renameStart = Date.now();
|
|
151512
|
-
await rename(tempNodeModules, nodeModulesPath);
|
|
151513
|
-
console.log(`[Fetcher] ${packageName}: Dependencies installed successfully (rename took ${Date.now() - renameStart}ms, total installDependencies took ${Date.now() - start}ms).`);
|
|
151535
|
+
console.log(`[Fetcher] ${packageName}: Dependencies installed successfully (total installDependencies took ${Date.now() - start}ms).`);
|
|
151514
151536
|
} catch (err) {
|
|
151515
151537
|
console.error(`[Fetcher] ${packageName}: CRITICAL ERROR during dependency installation: ${err.message}`);
|
|
151516
151538
|
if (err.all) console.error(`[Fetcher] ${packageName}: Error details:\n${err.all}`);
|
|
151517
|
-
|
|
151518
|
-
} finally {
|
|
151519
|
-
await rm(tempDir, {
|
|
151539
|
+
await rm(nodeModulesPath, {
|
|
151520
151540
|
recursive: true,
|
|
151521
151541
|
force: true
|
|
151522
151542
|
}).catch(() => {});
|
|
151543
|
+
throw new Error(`Failed to install dependencies for ${packageName}. See logs for details.`);
|
|
151523
151544
|
}
|
|
151524
151545
|
}
|
|
151525
151546
|
/**
|
|
@@ -151575,7 +151596,7 @@ async function crawlMonorepoPackages() {
|
|
|
151575
151596
|
}
|
|
151576
151597
|
return cache;
|
|
151577
151598
|
}
|
|
151578
|
-
async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
|
|
151599
|
+
async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix, includePrerelease = false) {
|
|
151579
151600
|
if (!existsSync(baseDir)) return null;
|
|
151580
151601
|
try {
|
|
151581
151602
|
const localVersions = (await readdir(baseDir, { withFileTypes: true })).filter((e) => e.isDirectory() || e.isSymbolicLink()).map((e) => e.name).filter((name) => !!import_semver.default.valid(name));
|
|
@@ -151588,7 +151609,7 @@ async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
|
|
|
151588
151609
|
return latestLocal;
|
|
151589
151610
|
}
|
|
151590
151611
|
} else {
|
|
151591
|
-
const matched = import_semver.default.maxSatisfying(localVersions, range);
|
|
151612
|
+
const matched = import_semver.default.maxSatisfying(localVersions, range, { includePrerelease });
|
|
151592
151613
|
if (matched) {
|
|
151593
151614
|
console.info(`[Fetcher] ${logPrefix}: Using locally cached matching version: ${matched} for range ${range}`);
|
|
151594
151615
|
return matched;
|
|
@@ -151656,11 +151677,29 @@ const fileExists = async (path) => {
|
|
|
151656
151677
|
};
|
|
151657
151678
|
//#endregion
|
|
151658
151679
|
//#region ../plugin-core/src/archive-utils.ts
|
|
151659
|
-
const zipFolder = async (from, to, log) => {
|
|
151680
|
+
const zipFolder = async (from, to, log, abortSignal) => {
|
|
151681
|
+
if (abortSignal?.aborted) {
|
|
151682
|
+
const abortError = /* @__PURE__ */ new Error("Aborted");
|
|
151683
|
+
abortError.name = "AbortError";
|
|
151684
|
+
throw abortError;
|
|
151685
|
+
}
|
|
151660
151686
|
const output = createWriteStream(to);
|
|
151661
151687
|
const archive = (0, import_archiver.default)("zip", { zlib: { level: 9 } });
|
|
151662
|
-
return new Promise(
|
|
151688
|
+
return new Promise((resolve, reject) => {
|
|
151689
|
+
const onAbort = () => {
|
|
151690
|
+
try {
|
|
151691
|
+
archive.abort();
|
|
151692
|
+
} catch {}
|
|
151693
|
+
try {
|
|
151694
|
+
output.destroy();
|
|
151695
|
+
} catch {}
|
|
151696
|
+
const abortError = /* @__PURE__ */ new Error("Aborted");
|
|
151697
|
+
abortError.name = "AbortError";
|
|
151698
|
+
reject(abortError);
|
|
151699
|
+
};
|
|
151700
|
+
if (abortSignal) abortSignal.addEventListener("abort", onAbort);
|
|
151663
151701
|
output.on("close", function() {
|
|
151702
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151664
151703
|
log(archive.pointer() + " total bytes");
|
|
151665
151704
|
log("archiver has been finalized and the output file descriptor has closed.");
|
|
151666
151705
|
resolve(to);
|
|
@@ -151669,11 +151708,15 @@ const zipFolder = async (from, to, log) => {
|
|
|
151669
151708
|
log("Data has been drained");
|
|
151670
151709
|
});
|
|
151671
151710
|
archive.on("error", function(err) {
|
|
151711
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151672
151712
|
reject(err);
|
|
151673
151713
|
});
|
|
151674
151714
|
archive.pipe(output);
|
|
151675
151715
|
archive.directory(from, false);
|
|
151676
|
-
|
|
151716
|
+
archive.finalize().catch((err) => {
|
|
151717
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151718
|
+
reject(err);
|
|
151719
|
+
});
|
|
151677
151720
|
});
|
|
151678
151721
|
};
|
|
151679
151722
|
//#endregion
|
|
@@ -151925,10 +151968,11 @@ const sharedParams = {
|
|
|
151925
151968
|
const exportc3p = async (file, { cwd, log, inputs, setOutput, paths, abortSignal, context: ctx }) => {
|
|
151926
151969
|
let browserContext = void 0;
|
|
151927
151970
|
let browser = void 0;
|
|
151928
|
-
|
|
151971
|
+
const onAbort = () => {
|
|
151929
151972
|
console.error("aborted");
|
|
151930
151973
|
browserContext?.close();
|
|
151931
|
-
}
|
|
151974
|
+
};
|
|
151975
|
+
abortSignal.addEventListener("abort", onAbort);
|
|
151932
151976
|
const newInputs = inputs;
|
|
151933
151977
|
const { thirdparty, node, pnpm } = paths;
|
|
151934
151978
|
const browserName = "chromium";
|
|
@@ -152025,6 +152069,7 @@ const exportc3p = async (file, { cwd, log, inputs, setOutput, paths, abortSignal
|
|
|
152025
152069
|
log("error, no result, crashed", e);
|
|
152026
152070
|
throw new Error("ConstructExport failed: " + e.message);
|
|
152027
152071
|
} finally {
|
|
152072
|
+
abortSignal.removeEventListener("abort", onAbort);
|
|
152028
152073
|
if (browserContext) await browserContext.close();
|
|
152029
152074
|
if (browser) await browser.close();
|
|
152030
152075
|
}
|
|
@@ -152123,9 +152168,10 @@ const exportProjectAction = createAction({
|
|
|
152123
152168
|
icon: ""
|
|
152124
152169
|
});
|
|
152125
152170
|
const ExportProjectActionRunner = createActionRunner(async (options) => {
|
|
152126
|
-
|
|
152127
|
-
|
|
152128
|
-
|
|
152171
|
+
const folder = options.inputs.folder;
|
|
152172
|
+
if (!folder) throw new Error("You must specify a valid construct project folder");
|
|
152173
|
+
if (!await fileExists(folder)) throw new Error("You must specify a valid construct project folder");
|
|
152174
|
+
await exportc3p(await zipFolder(folder, join(options.cwd, "c3_tmp_proj.c3p"), options.log, options.abortSignal), options);
|
|
152129
152175
|
});
|
|
152130
152176
|
//#endregion
|
|
152131
152177
|
//#region src/index.ts
|