@pipelab/plugin-construct 1.0.0-beta.28 → 1.0.0-beta.32
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 +71 -14
- package/dist/index.mjs +71 -14
- 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)`);
|
|
@@ -151570,7 +151602,7 @@ async function crawlMonorepoPackages() {
|
|
|
151570
151602
|
}
|
|
151571
151603
|
return cache;
|
|
151572
151604
|
}
|
|
151573
|
-
async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
|
|
151605
|
+
async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix, includePrerelease = false) {
|
|
151574
151606
|
if (!(0, node_fs.existsSync)(baseDir)) return null;
|
|
151575
151607
|
try {
|
|
151576
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));
|
|
@@ -151583,7 +151615,7 @@ async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
|
|
|
151583
151615
|
return latestLocal;
|
|
151584
151616
|
}
|
|
151585
151617
|
} else {
|
|
151586
|
-
const matched = import_semver.default.maxSatisfying(localVersions, range);
|
|
151618
|
+
const matched = import_semver.default.maxSatisfying(localVersions, range, { includePrerelease });
|
|
151587
151619
|
if (matched) {
|
|
151588
151620
|
console.info(`[Fetcher] ${logPrefix}: Using locally cached matching version: ${matched} for range ${range}`);
|
|
151589
151621
|
return matched;
|
|
@@ -151651,11 +151683,29 @@ const fileExists = async (path) => {
|
|
|
151651
151683
|
};
|
|
151652
151684
|
//#endregion
|
|
151653
151685
|
//#region ../plugin-core/src/archive-utils.ts
|
|
151654
|
-
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
|
+
}
|
|
151655
151692
|
const output = (0, node_fs.createWriteStream)(to);
|
|
151656
151693
|
const archive = (0, import_archiver.default)("zip", { zlib: { level: 9 } });
|
|
151657
|
-
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);
|
|
151658
151707
|
output.on("close", function() {
|
|
151708
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151659
151709
|
log(archive.pointer() + " total bytes");
|
|
151660
151710
|
log("archiver has been finalized and the output file descriptor has closed.");
|
|
151661
151711
|
resolve(to);
|
|
@@ -151664,11 +151714,15 @@ const zipFolder = async (from, to, log) => {
|
|
|
151664
151714
|
log("Data has been drained");
|
|
151665
151715
|
});
|
|
151666
151716
|
archive.on("error", function(err) {
|
|
151717
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151667
151718
|
reject(err);
|
|
151668
151719
|
});
|
|
151669
151720
|
archive.pipe(output);
|
|
151670
151721
|
archive.directory(from, false);
|
|
151671
|
-
|
|
151722
|
+
archive.finalize().catch((err) => {
|
|
151723
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151724
|
+
reject(err);
|
|
151725
|
+
});
|
|
151672
151726
|
});
|
|
151673
151727
|
};
|
|
151674
151728
|
//#endregion
|
|
@@ -151920,10 +151974,11 @@ const sharedParams = {
|
|
|
151920
151974
|
const exportc3p = async (file, { cwd, log, inputs, setOutput, paths, abortSignal, context: ctx }) => {
|
|
151921
151975
|
let browserContext = void 0;
|
|
151922
151976
|
let browser = void 0;
|
|
151923
|
-
|
|
151977
|
+
const onAbort = () => {
|
|
151924
151978
|
console.error("aborted");
|
|
151925
151979
|
browserContext?.close();
|
|
151926
|
-
}
|
|
151980
|
+
};
|
|
151981
|
+
abortSignal.addEventListener("abort", onAbort);
|
|
151927
151982
|
const newInputs = inputs;
|
|
151928
151983
|
const { thirdparty, node, pnpm } = paths;
|
|
151929
151984
|
const browserName = "chromium";
|
|
@@ -152020,6 +152075,7 @@ const exportc3p = async (file, { cwd, log, inputs, setOutput, paths, abortSignal
|
|
|
152020
152075
|
log("error, no result, crashed", e);
|
|
152021
152076
|
throw new Error("ConstructExport failed: " + e.message);
|
|
152022
152077
|
} finally {
|
|
152078
|
+
abortSignal.removeEventListener("abort", onAbort);
|
|
152023
152079
|
if (browserContext) await browserContext.close();
|
|
152024
152080
|
if (browser) await browser.close();
|
|
152025
152081
|
}
|
|
@@ -152118,9 +152174,10 @@ const exportProjectAction = createAction({
|
|
|
152118
152174
|
icon: ""
|
|
152119
152175
|
});
|
|
152120
152176
|
const ExportProjectActionRunner = createActionRunner(async (options) => {
|
|
152121
|
-
|
|
152122
|
-
|
|
152123
|
-
|
|
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);
|
|
152124
152181
|
});
|
|
152125
152182
|
//#endregion
|
|
152126
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)`);
|
|
@@ -151564,7 +151596,7 @@ async function crawlMonorepoPackages() {
|
|
|
151564
151596
|
}
|
|
151565
151597
|
return cache;
|
|
151566
151598
|
}
|
|
151567
|
-
async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
|
|
151599
|
+
async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix, includePrerelease = false) {
|
|
151568
151600
|
if (!existsSync(baseDir)) return null;
|
|
151569
151601
|
try {
|
|
151570
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));
|
|
@@ -151577,7 +151609,7 @@ async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
|
|
|
151577
151609
|
return latestLocal;
|
|
151578
151610
|
}
|
|
151579
151611
|
} else {
|
|
151580
|
-
const matched = import_semver.default.maxSatisfying(localVersions, range);
|
|
151612
|
+
const matched = import_semver.default.maxSatisfying(localVersions, range, { includePrerelease });
|
|
151581
151613
|
if (matched) {
|
|
151582
151614
|
console.info(`[Fetcher] ${logPrefix}: Using locally cached matching version: ${matched} for range ${range}`);
|
|
151583
151615
|
return matched;
|
|
@@ -151645,11 +151677,29 @@ const fileExists = async (path) => {
|
|
|
151645
151677
|
};
|
|
151646
151678
|
//#endregion
|
|
151647
151679
|
//#region ../plugin-core/src/archive-utils.ts
|
|
151648
|
-
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
|
+
}
|
|
151649
151686
|
const output = createWriteStream(to);
|
|
151650
151687
|
const archive = (0, import_archiver.default)("zip", { zlib: { level: 9 } });
|
|
151651
|
-
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);
|
|
151652
151701
|
output.on("close", function() {
|
|
151702
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151653
151703
|
log(archive.pointer() + " total bytes");
|
|
151654
151704
|
log("archiver has been finalized and the output file descriptor has closed.");
|
|
151655
151705
|
resolve(to);
|
|
@@ -151658,11 +151708,15 @@ const zipFolder = async (from, to, log) => {
|
|
|
151658
151708
|
log("Data has been drained");
|
|
151659
151709
|
});
|
|
151660
151710
|
archive.on("error", function(err) {
|
|
151711
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151661
151712
|
reject(err);
|
|
151662
151713
|
});
|
|
151663
151714
|
archive.pipe(output);
|
|
151664
151715
|
archive.directory(from, false);
|
|
151665
|
-
|
|
151716
|
+
archive.finalize().catch((err) => {
|
|
151717
|
+
if (abortSignal) abortSignal.removeEventListener("abort", onAbort);
|
|
151718
|
+
reject(err);
|
|
151719
|
+
});
|
|
151666
151720
|
});
|
|
151667
151721
|
};
|
|
151668
151722
|
//#endregion
|
|
@@ -151914,10 +151968,11 @@ const sharedParams = {
|
|
|
151914
151968
|
const exportc3p = async (file, { cwd, log, inputs, setOutput, paths, abortSignal, context: ctx }) => {
|
|
151915
151969
|
let browserContext = void 0;
|
|
151916
151970
|
let browser = void 0;
|
|
151917
|
-
|
|
151971
|
+
const onAbort = () => {
|
|
151918
151972
|
console.error("aborted");
|
|
151919
151973
|
browserContext?.close();
|
|
151920
|
-
}
|
|
151974
|
+
};
|
|
151975
|
+
abortSignal.addEventListener("abort", onAbort);
|
|
151921
151976
|
const newInputs = inputs;
|
|
151922
151977
|
const { thirdparty, node, pnpm } = paths;
|
|
151923
151978
|
const browserName = "chromium";
|
|
@@ -152014,6 +152069,7 @@ const exportc3p = async (file, { cwd, log, inputs, setOutput, paths, abortSignal
|
|
|
152014
152069
|
log("error, no result, crashed", e);
|
|
152015
152070
|
throw new Error("ConstructExport failed: " + e.message);
|
|
152016
152071
|
} finally {
|
|
152072
|
+
abortSignal.removeEventListener("abort", onAbort);
|
|
152017
152073
|
if (browserContext) await browserContext.close();
|
|
152018
152074
|
if (browser) await browser.close();
|
|
152019
152075
|
}
|
|
@@ -152112,9 +152168,10 @@ const exportProjectAction = createAction({
|
|
|
152112
152168
|
icon: ""
|
|
152113
152169
|
});
|
|
152114
152170
|
const ExportProjectActionRunner = createActionRunner(async (options) => {
|
|
152115
|
-
|
|
152116
|
-
|
|
152117
|
-
|
|
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);
|
|
152118
152175
|
});
|
|
152119
152176
|
//#endregion
|
|
152120
152177
|
//#region src/index.ts
|