@openfn/cli 1.13.5 → 1.14.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/index.js +23 -1
- package/dist/process/runner.js +73 -46
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -487,6 +487,15 @@ var timeout = {
|
|
|
487
487
|
default: 5 * 60 * 1e3
|
|
488
488
|
}
|
|
489
489
|
};
|
|
490
|
+
var trace = {
|
|
491
|
+
name: "trace",
|
|
492
|
+
yargs: {
|
|
493
|
+
boolean: true,
|
|
494
|
+
hidden: true,
|
|
495
|
+
description: "Show trace debugger output in the compiler",
|
|
496
|
+
default: false
|
|
497
|
+
}
|
|
498
|
+
};
|
|
490
499
|
var useAdaptorsMonorepo = {
|
|
491
500
|
name: "use-adaptors-monorepo",
|
|
492
501
|
yargs: {
|
|
@@ -801,6 +810,7 @@ var options2 = [
|
|
|
801
810
|
}),
|
|
802
811
|
outputPath,
|
|
803
812
|
repoDir,
|
|
813
|
+
trace,
|
|
804
814
|
useAdaptorsMonorepo,
|
|
805
815
|
workflow
|
|
806
816
|
];
|
|
@@ -889,6 +899,7 @@ var options5 = [
|
|
|
889
899
|
statePath,
|
|
890
900
|
stateStdin,
|
|
891
901
|
timeout,
|
|
902
|
+
trace,
|
|
892
903
|
useAdaptorsMonorepo
|
|
893
904
|
];
|
|
894
905
|
var executeCommand = {
|
|
@@ -1041,9 +1052,20 @@ var command_default10 = {
|
|
|
1041
1052
|
builder: (yargs2) => build(options8, yargs2).example("test", "Run the test script")
|
|
1042
1053
|
};
|
|
1043
1054
|
|
|
1055
|
+
// src/projects/command.ts
|
|
1056
|
+
var options9 = [projectPath];
|
|
1057
|
+
var projectsCommand = {
|
|
1058
|
+
command: "projects [project-path]",
|
|
1059
|
+
describe: "List all the openfn projects available in the current directory",
|
|
1060
|
+
aliases: ["project"],
|
|
1061
|
+
handler: ensure("projects", options9),
|
|
1062
|
+
builder: (yargs2) => build(options9, yargs2)
|
|
1063
|
+
};
|
|
1064
|
+
var command_default11 = projectsCommand;
|
|
1065
|
+
|
|
1044
1066
|
// src/cli.ts
|
|
1045
1067
|
var y = yargs(hideBin(process.argv));
|
|
1046
|
-
var cmd = y.command(command_default7).command(command_default3).command(command_default2).command(command_default4).command(install).command(repo).command(command_default10).command(command_default6).command(command_default).command(command_default8).command(command_default5).command(command_default9).command({
|
|
1068
|
+
var cmd = y.command(command_default7).command(command_default3).command(command_default2).command(command_default4).command(install).command(repo).command(command_default10).command(command_default6).command(command_default).command(command_default8).command(command_default5).command(command_default9).command(command_default11).command({
|
|
1047
1069
|
command: "version",
|
|
1048
1070
|
describe: "Show the currently installed version of the CLI, compiler and runtime.",
|
|
1049
1071
|
handler: (argv) => {
|
package/dist/process/runner.js
CHANGED
|
@@ -127,14 +127,14 @@ var callApollo = async (apolloBaseUrl, serviceName, payload, logger) => {
|
|
|
127
127
|
});
|
|
128
128
|
});
|
|
129
129
|
};
|
|
130
|
-
var loadPayload = async (logger,
|
|
131
|
-
if (!
|
|
130
|
+
var loadPayload = async (logger, path13) => {
|
|
131
|
+
if (!path13) {
|
|
132
132
|
logger.warn("No JSON payload provided");
|
|
133
133
|
logger.warn("Most apollo services require JSON to be uploaded");
|
|
134
134
|
return {};
|
|
135
135
|
}
|
|
136
|
-
if (
|
|
137
|
-
const str = await readFile(
|
|
136
|
+
if (path13.endsWith(".json")) {
|
|
137
|
+
const str = await readFile(path13, "utf8");
|
|
138
138
|
const json = JSON.parse(str);
|
|
139
139
|
logger.debug("Loaded JSON payload");
|
|
140
140
|
return json;
|
|
@@ -256,13 +256,13 @@ var execute_default = async (plan, input, opts, logger) => {
|
|
|
256
256
|
};
|
|
257
257
|
function parseAdaptors(plan) {
|
|
258
258
|
const extractInfo = (specifier) => {
|
|
259
|
-
const [module,
|
|
259
|
+
const [module, path13] = specifier.split("=");
|
|
260
260
|
const { name, version } = getNameAndVersion(module);
|
|
261
261
|
const info = {
|
|
262
262
|
name
|
|
263
263
|
};
|
|
264
|
-
if (
|
|
265
|
-
info.path =
|
|
264
|
+
if (path13) {
|
|
265
|
+
info.path = path13;
|
|
266
266
|
}
|
|
267
267
|
if (version) {
|
|
268
268
|
info.version = version;
|
|
@@ -498,7 +498,8 @@ var compileWorkflow = async (plan, opts, log) => {
|
|
|
498
498
|
const jobOpts = {
|
|
499
499
|
...opts,
|
|
500
500
|
adaptors: job.adaptors ?? opts.adaptors,
|
|
501
|
-
ignoreImports: globalsIgnoreList
|
|
501
|
+
ignoreImports: globalsIgnoreList,
|
|
502
|
+
trace: opts.trace
|
|
502
503
|
};
|
|
503
504
|
if (job.expression) {
|
|
504
505
|
const { code, map } = await compileJob(
|
|
@@ -521,10 +522,10 @@ var stripVersionSpecifier = (specifier) => {
|
|
|
521
522
|
return specifier;
|
|
522
523
|
};
|
|
523
524
|
var resolveSpecifierPath = async (pattern, repoDir, log) => {
|
|
524
|
-
const [specifier,
|
|
525
|
-
if (
|
|
526
|
-
log.debug(`Resolved ${specifier} to path: ${
|
|
527
|
-
return
|
|
525
|
+
const [specifier, path13] = pattern.split("=");
|
|
526
|
+
if (path13) {
|
|
527
|
+
log.debug(`Resolved ${specifier} to path: ${path13}`);
|
|
528
|
+
return path13;
|
|
528
529
|
}
|
|
529
530
|
const repoPath = await getModulePath(specifier, repoDir, log);
|
|
530
531
|
if (repoPath) {
|
|
@@ -534,7 +535,8 @@ var resolveSpecifierPath = async (pattern, repoDir, log) => {
|
|
|
534
535
|
};
|
|
535
536
|
var loadTransformOptions = async (opts, log) => {
|
|
536
537
|
const options = {
|
|
537
|
-
logger: log || logger_default(COMPILER, opts)
|
|
538
|
+
logger: log || logger_default(COMPILER, opts),
|
|
539
|
+
trace: opts.trace
|
|
538
540
|
};
|
|
539
541
|
if (opts.adaptors?.length && opts.ignoreImports != true) {
|
|
540
542
|
const adaptorsConfig = [];
|
|
@@ -542,12 +544,12 @@ var loadTransformOptions = async (opts, log) => {
|
|
|
542
544
|
let exports;
|
|
543
545
|
const [specifier] = adaptorInput.split("=");
|
|
544
546
|
log.debug(`Trying to preload types for ${specifier}`);
|
|
545
|
-
const
|
|
546
|
-
if (
|
|
547
|
+
const path13 = await resolveSpecifierPath(adaptorInput, opts.repoDir, log);
|
|
548
|
+
if (path13) {
|
|
547
549
|
try {
|
|
548
|
-
exports = await preloadAdaptorExports(
|
|
550
|
+
exports = await preloadAdaptorExports(path13, log);
|
|
549
551
|
} catch (e) {
|
|
550
|
-
log.error(`Failed to load adaptor typedefs from path ${
|
|
552
|
+
log.error(`Failed to load adaptor typedefs from path ${path13}`);
|
|
551
553
|
log.error(e);
|
|
552
554
|
}
|
|
553
555
|
}
|
|
@@ -999,8 +1001,8 @@ var loadXPlan = async (plan, options, logger, defaultName = "") => {
|
|
|
999
1001
|
};
|
|
1000
1002
|
|
|
1001
1003
|
// src/util/assert-path.ts
|
|
1002
|
-
var assert_path_default = (
|
|
1003
|
-
if (!
|
|
1004
|
+
var assert_path_default = (path13) => {
|
|
1005
|
+
if (!path13) {
|
|
1004
1006
|
console.error("ERROR: no path provided!");
|
|
1005
1007
|
console.error("\nUsage:");
|
|
1006
1008
|
console.error(" open path/to/job");
|
|
@@ -1685,20 +1687,20 @@ var RETRY_COUNT = 20;
|
|
|
1685
1687
|
var TIMEOUT_MS = 1e3 * 60;
|
|
1686
1688
|
var actualDocGen = (specifier) => describePackage(specifier, {});
|
|
1687
1689
|
var ensurePath = (filePath) => mkdirSync(path7.dirname(filePath), { recursive: true });
|
|
1688
|
-
var generatePlaceholder = (
|
|
1689
|
-
writeFileSync(
|
|
1690
|
+
var generatePlaceholder = (path13) => {
|
|
1691
|
+
writeFileSync(path13, `{ "loading": true, "timestamp": ${Date.now()}}`);
|
|
1690
1692
|
};
|
|
1691
1693
|
var finish = (logger, resultPath) => {
|
|
1692
1694
|
logger.success("Done! Docs can be found at:\n");
|
|
1693
1695
|
logger.print(` ${path7.resolve(resultPath)}`);
|
|
1694
1696
|
};
|
|
1695
|
-
var generateDocs = async (specifier,
|
|
1697
|
+
var generateDocs = async (specifier, path13, docgen, logger) => {
|
|
1696
1698
|
const result = await docgen(specifier);
|
|
1697
|
-
await writeFile5(
|
|
1698
|
-
finish(logger,
|
|
1699
|
-
return
|
|
1699
|
+
await writeFile5(path13, JSON.stringify(result, null, 2));
|
|
1700
|
+
finish(logger, path13);
|
|
1701
|
+
return path13;
|
|
1700
1702
|
};
|
|
1701
|
-
var waitForDocs = async (docs,
|
|
1703
|
+
var waitForDocs = async (docs, path13, logger, retryDuration = RETRY_DURATION) => {
|
|
1702
1704
|
try {
|
|
1703
1705
|
if (docs.hasOwnProperty("loading")) {
|
|
1704
1706
|
logger.info("Docs are being loaded by another process. Waiting.");
|
|
@@ -1710,19 +1712,19 @@ var waitForDocs = async (docs, path12, logger, retryDuration = RETRY_DURATION) =
|
|
|
1710
1712
|
clearInterval(i);
|
|
1711
1713
|
reject(new Error("Timed out waiting for docs to load"));
|
|
1712
1714
|
}
|
|
1713
|
-
const updated = JSON.parse(readFileSync(
|
|
1715
|
+
const updated = JSON.parse(readFileSync(path13, "utf8"));
|
|
1714
1716
|
if (!updated.hasOwnProperty("loading")) {
|
|
1715
1717
|
logger.info("Docs found!");
|
|
1716
1718
|
clearInterval(i);
|
|
1717
|
-
resolve(
|
|
1719
|
+
resolve(path13);
|
|
1718
1720
|
}
|
|
1719
1721
|
count++;
|
|
1720
1722
|
}, retryDuration);
|
|
1721
1723
|
});
|
|
1722
1724
|
} else {
|
|
1723
|
-
logger.info(`Docs already written to cache at ${
|
|
1724
|
-
finish(logger,
|
|
1725
|
-
return
|
|
1725
|
+
logger.info(`Docs already written to cache at ${path13}`);
|
|
1726
|
+
finish(logger, path13);
|
|
1727
|
+
return path13;
|
|
1726
1728
|
}
|
|
1727
1729
|
} catch (e) {
|
|
1728
1730
|
logger.error("Existing doc JSON corrupt. Aborting");
|
|
@@ -1739,28 +1741,28 @@ var docgenHandler = (options, logger, docgen = actualDocGen, retryDuration = RET
|
|
|
1739
1741
|
process.exit(9);
|
|
1740
1742
|
}
|
|
1741
1743
|
logger.success(`Generating docs for ${specifier}`);
|
|
1742
|
-
const
|
|
1743
|
-
ensurePath(
|
|
1744
|
+
const path13 = `${repoDir}/docs/${specifier}.json`;
|
|
1745
|
+
ensurePath(path13);
|
|
1744
1746
|
const handleError2 = () => {
|
|
1745
1747
|
logger.info("Removing placeholder");
|
|
1746
|
-
rmSync(
|
|
1748
|
+
rmSync(path13);
|
|
1747
1749
|
};
|
|
1748
1750
|
try {
|
|
1749
|
-
const existing = readFileSync(
|
|
1751
|
+
const existing = readFileSync(path13, "utf8");
|
|
1750
1752
|
const json = JSON.parse(existing);
|
|
1751
1753
|
if (json && json.timeout && Date.now() - json.timeout >= TIMEOUT_MS) {
|
|
1752
1754
|
logger.info(`Expired placeholder found. Removing.`);
|
|
1753
|
-
rmSync(
|
|
1755
|
+
rmSync(path13);
|
|
1754
1756
|
throw new Error("TIMEOUT");
|
|
1755
1757
|
}
|
|
1756
|
-
return waitForDocs(json,
|
|
1758
|
+
return waitForDocs(json, path13, logger, retryDuration);
|
|
1757
1759
|
} catch (e) {
|
|
1758
1760
|
if (e.message !== "TIMEOUT") {
|
|
1759
|
-
logger.info(`Docs JSON not found at ${
|
|
1761
|
+
logger.info(`Docs JSON not found at ${path13}`);
|
|
1760
1762
|
}
|
|
1761
1763
|
logger.debug("Generating placeholder");
|
|
1762
|
-
generatePlaceholder(
|
|
1763
|
-
return generateDocs(specifier,
|
|
1764
|
+
generatePlaceholder(path13);
|
|
1765
|
+
return generateDocs(specifier, path13, docgen, logger).catch((e2) => {
|
|
1764
1766
|
logger.error("Error generating documentation");
|
|
1765
1767
|
logger.error(e2);
|
|
1766
1768
|
handleError2();
|
|
@@ -1811,7 +1813,7 @@ var docsHandler = async (options, logger) => {
|
|
|
1811
1813
|
logger.success(`Showing docs for ${adaptorName} v${version}`);
|
|
1812
1814
|
}
|
|
1813
1815
|
logger.info("Generating/loading documentation...");
|
|
1814
|
-
const
|
|
1816
|
+
const path13 = await handler_default7(
|
|
1815
1817
|
{
|
|
1816
1818
|
specifier: `${name}@${version}`,
|
|
1817
1819
|
repoDir
|
|
@@ -1820,8 +1822,8 @@ var docsHandler = async (options, logger) => {
|
|
|
1820
1822
|
createNullLogger()
|
|
1821
1823
|
);
|
|
1822
1824
|
let didError = false;
|
|
1823
|
-
if (
|
|
1824
|
-
const source = await readFile4(
|
|
1825
|
+
if (path13) {
|
|
1826
|
+
const source = await readFile4(path13, "utf8");
|
|
1825
1827
|
const data = JSON.parse(source);
|
|
1826
1828
|
let desc;
|
|
1827
1829
|
if (operation) {
|
|
@@ -2267,9 +2269,33 @@ function pickFirst2(...args) {
|
|
|
2267
2269
|
}
|
|
2268
2270
|
var handler_default10 = pullHandler;
|
|
2269
2271
|
|
|
2272
|
+
// src/projects/handler.ts
|
|
2273
|
+
import { Workspace } from "@openfn/project";
|
|
2274
|
+
import path11 from "path";
|
|
2275
|
+
var projectsHandler = async (options, logger) => {
|
|
2276
|
+
const commandPath = path11.resolve(process.cwd(), options.projectPath ?? ".");
|
|
2277
|
+
const workspace = new Workspace(commandPath);
|
|
2278
|
+
if (!workspace.valid) {
|
|
2279
|
+
logger.error("Command was run in an invalid openfn workspace");
|
|
2280
|
+
return;
|
|
2281
|
+
}
|
|
2282
|
+
logger.success(`Available openfn projects
|
|
2283
|
+
|
|
2284
|
+
${workspace.list().map((p) => describeProject(p, p.name === workspace.activeProjectId)).join("\n\n")}
|
|
2285
|
+
`);
|
|
2286
|
+
};
|
|
2287
|
+
function describeProject(project, active = false) {
|
|
2288
|
+
const pId = project.openfn?.uuid;
|
|
2289
|
+
return `${project.name} ${active ? "(active)" : ""}
|
|
2290
|
+
${pId || "<project-id>"}
|
|
2291
|
+
workflows:
|
|
2292
|
+
${project.workflows.map((w) => " - " + w.name).join("\n")}`;
|
|
2293
|
+
}
|
|
2294
|
+
var handler_default11 = projectsHandler;
|
|
2295
|
+
|
|
2270
2296
|
// src/util/print-versions.ts
|
|
2271
2297
|
import { readFileSync as readFileSync2 } from "node:fs";
|
|
2272
|
-
import
|
|
2298
|
+
import path12 from "node:path";
|
|
2273
2299
|
import url from "node:url";
|
|
2274
2300
|
import { getNameAndVersion as getNameAndVersion7 } from "@openfn/runtime";
|
|
2275
2301
|
import { mainSymbols } from "figures";
|
|
@@ -2281,7 +2307,7 @@ var { triangleRightSmall: t } = mainSymbols;
|
|
|
2281
2307
|
var loadVersionFromPath = (adaptorPath) => {
|
|
2282
2308
|
try {
|
|
2283
2309
|
const pkg = JSON.parse(
|
|
2284
|
-
readFileSync2(
|
|
2310
|
+
readFileSync2(path12.resolve(adaptorPath, "package.json"), "utf8")
|
|
2285
2311
|
);
|
|
2286
2312
|
return pkg.version;
|
|
2287
2313
|
} catch (e) {
|
|
@@ -2316,7 +2342,7 @@ var printVersions = async (logger, options = {}, includeComponents = false) => {
|
|
|
2316
2342
|
...[NODE, CLI2, RUNTIME2, COMPILER2, longestAdaptorName].map((s) => s.length)
|
|
2317
2343
|
);
|
|
2318
2344
|
const prefix = (str) => ` ${t} ${str.padEnd(longest + 4, " ")}`;
|
|
2319
|
-
const dirname3 =
|
|
2345
|
+
const dirname3 = path12.dirname(url.fileURLToPath(import.meta.url));
|
|
2320
2346
|
const pkg = JSON.parse(readFileSync2(`${dirname3}/../../package.json`, "utf8"));
|
|
2321
2347
|
const { version, dependencies } = pkg;
|
|
2322
2348
|
const compilerVersion = dependencies["@openfn/compiler"];
|
|
@@ -2369,6 +2395,7 @@ var handlers = {
|
|
|
2369
2395
|
docs: handler_default8,
|
|
2370
2396
|
metadata: handler_default9,
|
|
2371
2397
|
pull: handler_default10,
|
|
2398
|
+
projects: handler_default11,
|
|
2372
2399
|
["collections-get"]: handler_default4.get,
|
|
2373
2400
|
["collections-set"]: handler_default4.set,
|
|
2374
2401
|
["collections-remove"]: handler_default4.remove,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openfn/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.14.0",
|
|
4
4
|
"description": "CLI devtools for the OpenFn toolchain",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=18",
|
|
@@ -47,13 +47,13 @@
|
|
|
47
47
|
"undici": "7.12.0",
|
|
48
48
|
"ws": "^8.18.3",
|
|
49
49
|
"yargs": "^17.7.2",
|
|
50
|
-
"@openfn/compiler": "1.1.
|
|
51
|
-
"@openfn/deploy": "0.11.3",
|
|
50
|
+
"@openfn/compiler": "1.1.2",
|
|
52
51
|
"@openfn/describe-package": "0.1.5",
|
|
53
52
|
"@openfn/lexicon": "^1.2.3",
|
|
54
|
-
"@openfn/runtime": "1.7.2",
|
|
55
53
|
"@openfn/logger": "1.0.6",
|
|
56
|
-
"@openfn/
|
|
54
|
+
"@openfn/deploy": "0.11.3",
|
|
55
|
+
"@openfn/project": "^0.3.0",
|
|
56
|
+
"@openfn/runtime": "1.7.2"
|
|
57
57
|
},
|
|
58
58
|
"files": [
|
|
59
59
|
"dist",
|