@openfn/cli 0.0.30 → 0.0.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/chunk-Q2H7WYJB.js +149 -0
- package/dist/index.js +269 -75
- package/dist/process/runner.js +85 -198
- package/package.json +3 -3
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// src/util/expand-adaptors.ts
|
|
2
|
+
var expand_adaptors_default = (names) => names?.map((name) => {
|
|
3
|
+
if (typeof name === "string") {
|
|
4
|
+
if (name.startsWith("@openfn/language-")) {
|
|
5
|
+
return name;
|
|
6
|
+
}
|
|
7
|
+
return `@openfn/language-${name}`;
|
|
8
|
+
}
|
|
9
|
+
return name;
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
// src/util/logger.ts
|
|
13
|
+
import actualCreateLogger, { printDuration } from "@openfn/logger";
|
|
14
|
+
import { isValidLogLevel, defaultLogger } from "@openfn/logger";
|
|
15
|
+
var CLI = "cli";
|
|
16
|
+
var COMPILER = "compiler";
|
|
17
|
+
var RUNTIME = "runtime";
|
|
18
|
+
var JOB = "job";
|
|
19
|
+
var namespaces = {
|
|
20
|
+
[CLI]: "CLI",
|
|
21
|
+
[RUNTIME]: "R/T",
|
|
22
|
+
[COMPILER]: "CMP",
|
|
23
|
+
[JOB]: "JOB"
|
|
24
|
+
};
|
|
25
|
+
var createLogger = (name = "", options) => {
|
|
26
|
+
const logOptions = options.log;
|
|
27
|
+
let level = logOptions[name] || logOptions.default || "default";
|
|
28
|
+
if (options.logJson) {
|
|
29
|
+
logOptions.json = true;
|
|
30
|
+
}
|
|
31
|
+
return actualCreateLogger(namespaces[name] || name, {
|
|
32
|
+
level,
|
|
33
|
+
...logOptions
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
var logger_default = createLogger;
|
|
37
|
+
var createNullLogger = () => createLogger(void 0, { log: { default: "none" } });
|
|
38
|
+
|
|
39
|
+
// src/util/ensure-opts.ts
|
|
40
|
+
import path from "node:path";
|
|
41
|
+
var defaultLoggerOptions = {
|
|
42
|
+
default: "default",
|
|
43
|
+
job: "debug"
|
|
44
|
+
};
|
|
45
|
+
var ERROR_MESSAGE_LOG_LEVEL = "Unknown log level. Valid levels are none, debug, info and default.";
|
|
46
|
+
var ERROR_MESSAGE_LOG_COMPONENT = "Unknown log component. Valid components are cli, compiler, runtime and job.";
|
|
47
|
+
var DEFAULT_REPO_DIR = "/tmp/openfn/repo";
|
|
48
|
+
var componentShorthands = {
|
|
49
|
+
cmp: "compiler",
|
|
50
|
+
rt: "runtime",
|
|
51
|
+
"r/t": "runtime"
|
|
52
|
+
};
|
|
53
|
+
var isValidComponent = (v) => /^(cli|runtime|compiler|job|default)$/i.test(v);
|
|
54
|
+
var ensureLogOpts = (opts) => {
|
|
55
|
+
const components = {};
|
|
56
|
+
if (!opts.log && /^(version|test)$/.test(opts.command)) {
|
|
57
|
+
opts.log = { default: "info" };
|
|
58
|
+
return opts;
|
|
59
|
+
} else if (opts.log) {
|
|
60
|
+
opts.log.forEach((l) => {
|
|
61
|
+
let component = "";
|
|
62
|
+
let level = "";
|
|
63
|
+
if (l.match(/=/)) {
|
|
64
|
+
const parts = l.split("=");
|
|
65
|
+
component = parts[0].toLowerCase();
|
|
66
|
+
if (componentShorthands[component]) {
|
|
67
|
+
component = componentShorthands[component];
|
|
68
|
+
}
|
|
69
|
+
level = parts[1].toLowerCase();
|
|
70
|
+
} else {
|
|
71
|
+
component = "default";
|
|
72
|
+
level = l.toLowerCase();
|
|
73
|
+
}
|
|
74
|
+
if (!isValidComponent(component)) {
|
|
75
|
+
throw new Error(ERROR_MESSAGE_LOG_COMPONENT);
|
|
76
|
+
}
|
|
77
|
+
level = level.toLowerCase();
|
|
78
|
+
if (!isValidLogLevel(level)) {
|
|
79
|
+
throw new Error(ERROR_MESSAGE_LOG_LEVEL);
|
|
80
|
+
}
|
|
81
|
+
components[component] = level;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
opts.log = {
|
|
85
|
+
...defaultLoggerOptions,
|
|
86
|
+
...components
|
|
87
|
+
};
|
|
88
|
+
return opts;
|
|
89
|
+
};
|
|
90
|
+
function ensureOpts(basePath = ".", opts) {
|
|
91
|
+
const newOpts = {
|
|
92
|
+
adaptor: opts.adaptor,
|
|
93
|
+
adaptors: opts.adaptors || [],
|
|
94
|
+
autoinstall: opts.autoinstall,
|
|
95
|
+
command: opts.command,
|
|
96
|
+
expandAdaptors: opts.expandAdaptors !== false,
|
|
97
|
+
force: opts.force || false,
|
|
98
|
+
immutable: opts.immutable || false,
|
|
99
|
+
log: opts.log,
|
|
100
|
+
logJson: typeof opts.logJson == "boolean" ? opts.logJson : Boolean(process.env.OPENFN_LOG_JSON),
|
|
101
|
+
compile: Boolean(opts.compile),
|
|
102
|
+
operation: opts.operation,
|
|
103
|
+
outputStdout: Boolean(opts.outputStdout),
|
|
104
|
+
packages: opts.packages,
|
|
105
|
+
repoDir: opts.repoDir || process.env.OPENFN_REPO_DIR || DEFAULT_REPO_DIR,
|
|
106
|
+
skipAdaptorValidation: opts.skipAdaptorValidation ?? false,
|
|
107
|
+
specifier: opts.specifier,
|
|
108
|
+
stateStdin: opts.stateStdin,
|
|
109
|
+
strictOutput: opts.strictOutput ?? true,
|
|
110
|
+
timeout: opts.timeout
|
|
111
|
+
};
|
|
112
|
+
const set = (key, value) => {
|
|
113
|
+
newOpts[key] = opts.hasOwnProperty(key) ? opts[key] : value;
|
|
114
|
+
};
|
|
115
|
+
if (opts.useAdaptorsMonorepo) {
|
|
116
|
+
newOpts.monorepoPath = process.env.OPENFN_ADAPTORS_REPO || "ERR";
|
|
117
|
+
}
|
|
118
|
+
let baseDir = basePath;
|
|
119
|
+
if (basePath.endsWith(".js")) {
|
|
120
|
+
baseDir = path.dirname(basePath);
|
|
121
|
+
set("jobPath", basePath);
|
|
122
|
+
} else {
|
|
123
|
+
set("jobPath", `${baseDir}/job.js`);
|
|
124
|
+
}
|
|
125
|
+
set("statePath", `${baseDir}/state.json`);
|
|
126
|
+
if (!opts.outputStdout) {
|
|
127
|
+
set(
|
|
128
|
+
"outputPath",
|
|
129
|
+
newOpts.command === "compile" ? `${baseDir}/output.js` : `${baseDir}/output.json`
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
ensureLogOpts(newOpts);
|
|
133
|
+
return newOpts;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export {
|
|
137
|
+
expand_adaptors_default,
|
|
138
|
+
printDuration,
|
|
139
|
+
CLI,
|
|
140
|
+
COMPILER,
|
|
141
|
+
RUNTIME,
|
|
142
|
+
JOB,
|
|
143
|
+
logger_default,
|
|
144
|
+
createNullLogger,
|
|
145
|
+
defaultLogger,
|
|
146
|
+
DEFAULT_REPO_DIR,
|
|
147
|
+
ensureLogOpts,
|
|
148
|
+
ensureOpts
|
|
149
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_REPO_DIR,
|
|
4
|
+
expand_adaptors_default
|
|
5
|
+
} from "./chunk-Q2H7WYJB.js";
|
|
2
6
|
|
|
3
7
|
// src/process/spawn.ts
|
|
4
8
|
import path from "node:path";
|
|
@@ -83,92 +87,282 @@ var list = {
|
|
|
83
87
|
}
|
|
84
88
|
};
|
|
85
89
|
|
|
90
|
+
// src/util/command-builders.ts
|
|
91
|
+
var build = (opts2, yargs2) => opts2.reduce((_y, o) => yargs2.option(o.name, o.yargs), yargs2);
|
|
92
|
+
var ensure = (command, opts2) => (yargs2) => {
|
|
93
|
+
yargs2.command = command;
|
|
94
|
+
opts2.filter((opt) => opt.ensure).forEach((opt) => {
|
|
95
|
+
opt.ensure(yargs2);
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
var override = (command, yargs2) => {
|
|
99
|
+
return {
|
|
100
|
+
...command,
|
|
101
|
+
yargs: {
|
|
102
|
+
...command.yargs || {},
|
|
103
|
+
...yargs2
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// src/options.ts
|
|
109
|
+
import path2 from "node:path";
|
|
110
|
+
var setDefaultValue = (opts2, key, value) => {
|
|
111
|
+
const v = opts2[key];
|
|
112
|
+
if (isNaN(v) && !v) {
|
|
113
|
+
opts2[key] = value;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
var adaptors = {
|
|
117
|
+
name: "adaptors",
|
|
118
|
+
yargs: {
|
|
119
|
+
alias: ["a", "adaptor"],
|
|
120
|
+
description: "A language adaptor to use for the job. Short-form names are allowed. Can include an explicit path to a local adaptor build"
|
|
121
|
+
},
|
|
122
|
+
ensure: (opts2) => {
|
|
123
|
+
if (opts2.adaptors) {
|
|
124
|
+
if (!Array.isArray(opts2.adaptors)) {
|
|
125
|
+
opts2.adaptors = [opts2.adaptors];
|
|
126
|
+
}
|
|
127
|
+
} else {
|
|
128
|
+
opts2.adaptors = [];
|
|
129
|
+
}
|
|
130
|
+
if (opts2.expandAdaptors) {
|
|
131
|
+
opts2.adaptors = expand_adaptors_default(opts2.adaptors);
|
|
132
|
+
}
|
|
133
|
+
delete opts2.adaptor;
|
|
134
|
+
delete opts2.a;
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
var autoinstall = {
|
|
138
|
+
name: "autoinstall",
|
|
139
|
+
yargs: {
|
|
140
|
+
alias: ["i"],
|
|
141
|
+
boolean: true,
|
|
142
|
+
description: "Auto-install the language adaptor",
|
|
143
|
+
default: false
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
var compile = {
|
|
147
|
+
name: "no-compile",
|
|
148
|
+
yargs: {
|
|
149
|
+
boolean: true,
|
|
150
|
+
description: "Disable compilation of the incoming source"
|
|
151
|
+
},
|
|
152
|
+
ensure: (opts2) => {
|
|
153
|
+
setDefaultValue(opts2, "compile", true);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
var expandAdaptors = {
|
|
157
|
+
name: "no-expand-adaptors",
|
|
158
|
+
yargs: {
|
|
159
|
+
boolean: true,
|
|
160
|
+
description: "Don't attempt to auto-expand adaptor shorthand names"
|
|
161
|
+
},
|
|
162
|
+
ensure: (opts2) => {
|
|
163
|
+
setDefaultValue(opts2, "expandAdaptors", true);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
var immutable = {
|
|
167
|
+
name: "immutable",
|
|
168
|
+
yargs: {
|
|
169
|
+
description: "Enforce immutabilty on state object",
|
|
170
|
+
boolean: true,
|
|
171
|
+
default: false
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
var getBaseDir = (opts2) => {
|
|
175
|
+
const basePath = opts2.path ?? ".";
|
|
176
|
+
if (basePath.endsWith(".js")) {
|
|
177
|
+
return path2.dirname(basePath);
|
|
178
|
+
}
|
|
179
|
+
return basePath;
|
|
180
|
+
};
|
|
181
|
+
var jobPath = {
|
|
182
|
+
name: "job-path",
|
|
183
|
+
yargs: {
|
|
184
|
+
hidden: true
|
|
185
|
+
},
|
|
186
|
+
ensure: (opts2) => {
|
|
187
|
+
const { path: basePath } = opts2;
|
|
188
|
+
if (basePath?.endsWith(".js")) {
|
|
189
|
+
opts2.jobPath = basePath;
|
|
190
|
+
} else {
|
|
191
|
+
const base = getBaseDir(opts2);
|
|
192
|
+
setDefaultValue(opts2, "jobPath", path2.join(base, "job.js"));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
var logJson = {
|
|
197
|
+
name: "log-json",
|
|
198
|
+
yargs: {
|
|
199
|
+
description: "Output all logs as JSON objects",
|
|
200
|
+
boolean: true
|
|
201
|
+
},
|
|
202
|
+
ensure: () => {
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
var outputStdout = {
|
|
206
|
+
name: "output-stdout",
|
|
207
|
+
yargs: {
|
|
208
|
+
alias: "O",
|
|
209
|
+
boolean: true,
|
|
210
|
+
description: "Print output to stdout (instead of a file)"
|
|
211
|
+
},
|
|
212
|
+
ensure: (opts2) => {
|
|
213
|
+
setDefaultValue(opts2, "outputStdout", false);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
var outputPath = {
|
|
217
|
+
name: "output-path",
|
|
218
|
+
yargs: {
|
|
219
|
+
alias: "o",
|
|
220
|
+
description: "Path to the output file"
|
|
221
|
+
},
|
|
222
|
+
ensure: (opts2) => {
|
|
223
|
+
if (opts2.command == "compile") {
|
|
224
|
+
if (opts2.outputPath) {
|
|
225
|
+
delete opts2.outputStdout;
|
|
226
|
+
}
|
|
227
|
+
} else {
|
|
228
|
+
if (opts2.outputStdout) {
|
|
229
|
+
delete opts2.outputPath;
|
|
230
|
+
} else {
|
|
231
|
+
const base = getBaseDir(opts2);
|
|
232
|
+
setDefaultValue(opts2, "outputPath", path2.join(base, "output.json"));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
delete opts2.o;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
var repoDir = {
|
|
239
|
+
name: "repo-dir",
|
|
240
|
+
yargs: {
|
|
241
|
+
description: "Provide a path to the repo root dir",
|
|
242
|
+
default: process.env.OPENFN_REPO_DIR || DEFAULT_REPO_DIR
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
var strictOutput = {
|
|
246
|
+
name: "no-strict-output",
|
|
247
|
+
yargs: {
|
|
248
|
+
boolean: true,
|
|
249
|
+
description: "Allow properties other than data to be returned in the output"
|
|
250
|
+
},
|
|
251
|
+
ensure: (opts2) => {
|
|
252
|
+
setDefaultValue(opts2, "strictOutput", true);
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
var skipAdaptorValidation = {
|
|
256
|
+
name: "skip-adaptor-validation",
|
|
257
|
+
yargs: {
|
|
258
|
+
boolean: true,
|
|
259
|
+
description: "Suppress warning message for jobs which don't use an adaptor",
|
|
260
|
+
default: false
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
var statePath = {
|
|
264
|
+
name: "state-path",
|
|
265
|
+
yargs: {
|
|
266
|
+
alias: ["s"],
|
|
267
|
+
description: "Path to the state file"
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
var stateStdin = {
|
|
271
|
+
name: "state-stdin",
|
|
272
|
+
yargs: {
|
|
273
|
+
alias: ["S"],
|
|
274
|
+
description: "Read state from stdin (instead of a file)"
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
var timeout = {
|
|
278
|
+
name: "timeout",
|
|
279
|
+
yargs: {
|
|
280
|
+
alias: ["t"],
|
|
281
|
+
number: true,
|
|
282
|
+
description: "Set the timeout duration (ms). Defaults to 5 minutes.",
|
|
283
|
+
default: 5 * 60 * 1e3
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
var useAdaptorsMonorepo = {
|
|
287
|
+
name: "use-adaptors-monorepo",
|
|
288
|
+
yargs: {
|
|
289
|
+
alias: ["m"],
|
|
290
|
+
boolean: true,
|
|
291
|
+
description: "Load adaptors from the monorepo. The OPENFN_ADAPTORS_REPO env var must be set to a valid path"
|
|
292
|
+
},
|
|
293
|
+
ensure: (opts2) => {
|
|
294
|
+
if (opts2.useAdaptorsMonorepo) {
|
|
295
|
+
opts2.monorepoPath = process.env.OPENFN_ADAPTORS_REPO || "ERR";
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
|
|
86
300
|
// src/execute/command.ts
|
|
301
|
+
var options = [
|
|
302
|
+
expandAdaptors,
|
|
303
|
+
adaptors,
|
|
304
|
+
autoinstall,
|
|
305
|
+
compile,
|
|
306
|
+
immutable,
|
|
307
|
+
jobPath,
|
|
308
|
+
logJson,
|
|
309
|
+
outputPath,
|
|
310
|
+
outputStdout,
|
|
311
|
+
repoDir,
|
|
312
|
+
skipAdaptorValidation,
|
|
313
|
+
statePath,
|
|
314
|
+
stateStdin,
|
|
315
|
+
strictOutput,
|
|
316
|
+
timeout,
|
|
317
|
+
useAdaptorsMonorepo
|
|
318
|
+
];
|
|
87
319
|
var executeCommand = {
|
|
88
320
|
command: "execute [path]",
|
|
89
321
|
desc: `Run an openfn job. Get more help by running openfn <command> help`,
|
|
90
322
|
aliases: ["$0"],
|
|
91
|
-
handler: (
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
description: "Auto-install the language adaptor"
|
|
106
|
-
}).option("state-path", {
|
|
107
|
-
alias: "s",
|
|
108
|
-
description: "Path to the state file"
|
|
109
|
-
}).option("state-stdin", {
|
|
110
|
-
alias: "S",
|
|
111
|
-
description: "Read state from stdin (instead of a file)"
|
|
112
|
-
}).option("skip-adaptor-validation", {
|
|
113
|
-
boolean: true,
|
|
114
|
-
description: "Skip adaptor validation warnings"
|
|
115
|
-
}).option("timeout", {
|
|
116
|
-
alias: "-t",
|
|
117
|
-
description: "Set the timeout duration in MS"
|
|
118
|
-
}).option("no-compile", {
|
|
119
|
-
boolean: true,
|
|
120
|
-
description: "Skip compilation"
|
|
121
|
-
}).option("no-strict-output", {
|
|
122
|
-
boolean: true,
|
|
123
|
-
description: "Allow properties other than data to be returned in the output"
|
|
124
|
-
}).example(
|
|
125
|
-
"openfn foo/job.js",
|
|
126
|
-
"Reads foo/job.js, looks for state and output in foo"
|
|
127
|
-
).example(
|
|
128
|
-
"openfn job.js -a common",
|
|
129
|
-
"Run job.js using @openfn/language-common"
|
|
130
|
-
).example(
|
|
131
|
-
"openfn install -a common",
|
|
132
|
-
"Install the latest version of language-common to the repo"
|
|
133
|
-
);
|
|
134
|
-
}
|
|
323
|
+
handler: ensure("execute", options),
|
|
324
|
+
builder: (yargs2) => build(options, yargs2).positional("path", {
|
|
325
|
+
describe: "The path to load the job from (a .js file or a dir containing a job.js file)",
|
|
326
|
+
demandOption: true
|
|
327
|
+
}).example(
|
|
328
|
+
"openfn foo/job.js",
|
|
329
|
+
"Reads foo/job.js, looks for state and output in foo"
|
|
330
|
+
).example(
|
|
331
|
+
"openfn job.js -a common",
|
|
332
|
+
"Run job.js using @openfn/language-common"
|
|
333
|
+
).example(
|
|
334
|
+
"openfn install -a common",
|
|
335
|
+
"Install the latest version of language-common to the repo"
|
|
336
|
+
)
|
|
135
337
|
};
|
|
136
|
-
var applyExecuteOptions = (yargs2) => yargs2.positional("path", {
|
|
137
|
-
describe: "The path to load the job from (a .js file or a dir containing a job.js file)",
|
|
138
|
-
demandOption: true
|
|
139
|
-
}).option("output-path", {
|
|
140
|
-
alias: "o",
|
|
141
|
-
description: "Path to the output file"
|
|
142
|
-
}).option("output-stdout", {
|
|
143
|
-
alias: "O",
|
|
144
|
-
boolean: true,
|
|
145
|
-
description: "Print output to stdout (instead of a file)"
|
|
146
|
-
}).option("adaptors", {
|
|
147
|
-
alias: ["a", "adaptor"],
|
|
148
|
-
description: "A language adaptor to use for the job. Short-form names are allowed. Can include an explicit path to a local adaptor build",
|
|
149
|
-
array: true
|
|
150
|
-
}).option("no-expand", {
|
|
151
|
-
description: "Don attempt to auto-expand adaptor shorthand names",
|
|
152
|
-
boolean: true
|
|
153
|
-
});
|
|
154
338
|
var command_default = executeCommand;
|
|
155
339
|
|
|
156
340
|
// src/compile/command.ts
|
|
341
|
+
var options2 = [
|
|
342
|
+
expandAdaptors,
|
|
343
|
+
adaptors,
|
|
344
|
+
jobPath,
|
|
345
|
+
logJson,
|
|
346
|
+
override(outputStdout, {
|
|
347
|
+
default: true
|
|
348
|
+
}),
|
|
349
|
+
outputPath,
|
|
350
|
+
useAdaptorsMonorepo
|
|
351
|
+
];
|
|
157
352
|
var compileCommand = {
|
|
158
353
|
command: "compile [path]",
|
|
159
|
-
desc: "
|
|
160
|
-
handler: (
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
354
|
+
desc: "Compile an openfn job and print or save the resulting JavaScript.",
|
|
355
|
+
handler: ensure("compile", options2),
|
|
356
|
+
builder: (yargs2) => build(options2, yargs2).positional("path", {
|
|
357
|
+
describe: "The path to load the job from (a .js file or a dir containing a job.js file)",
|
|
358
|
+
demandOption: true
|
|
359
|
+
}).example(
|
|
360
|
+
"compile foo/job.js -O",
|
|
361
|
+
"Compiles foo/job.js and prints the result to stdout"
|
|
362
|
+
).example(
|
|
363
|
+
"compile foo/job.js -o foo/job-compiled.js",
|
|
364
|
+
"Compiles foo/job.js and saves the result to foo/job-compiled.js"
|
|
365
|
+
)
|
|
172
366
|
};
|
|
173
367
|
var command_default2 = compileCommand;
|
|
174
368
|
|
package/dist/process/runner.js
CHANGED
|
@@ -1,124 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
var createLogger = (name = "", options) => {
|
|
15
|
-
const logOptions = options.log || { json: true };
|
|
16
|
-
let level = logOptions[name] || logOptions.default || "default";
|
|
17
|
-
if (options.logJson) {
|
|
18
|
-
logOptions.json = true;
|
|
19
|
-
}
|
|
20
|
-
return actualCreateLogger(namespaces[name] || name, {
|
|
21
|
-
level,
|
|
22
|
-
...logOptions
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
var logger_default = createLogger;
|
|
26
|
-
var createNullLogger = () => createLogger(void 0, { log: { default: "none" } });
|
|
1
|
+
import {
|
|
2
|
+
CLI,
|
|
3
|
+
COMPILER,
|
|
4
|
+
JOB,
|
|
5
|
+
RUNTIME,
|
|
6
|
+
createNullLogger,
|
|
7
|
+
defaultLogger,
|
|
8
|
+
ensureLogOpts,
|
|
9
|
+
ensureOpts,
|
|
10
|
+
expand_adaptors_default,
|
|
11
|
+
logger_default,
|
|
12
|
+
printDuration
|
|
13
|
+
} from "../chunk-Q2H7WYJB.js";
|
|
27
14
|
|
|
28
|
-
// src/
|
|
29
|
-
import
|
|
30
|
-
var defaultLoggerOptions = {
|
|
31
|
-
default: "default",
|
|
32
|
-
job: "debug"
|
|
33
|
-
};
|
|
34
|
-
var ERROR_MESSAGE_LOG_LEVEL = "Unknown log level. Valid levels are none, debug, info and default.";
|
|
35
|
-
var ERROR_MESSAGE_LOG_COMPONENT = "Unknown log component. Valid components are cli, compiler, runtime and job.";
|
|
36
|
-
var DEFAULT_REPO_DIR = "/tmp/openfn/repo";
|
|
37
|
-
var componentShorthands = {
|
|
38
|
-
cmp: "compiler",
|
|
39
|
-
rt: "runtime",
|
|
40
|
-
"r/t": "runtime"
|
|
41
|
-
};
|
|
42
|
-
var isValidComponent = (v) => /^(cli|runtime|compiler|job|default)$/i.test(v);
|
|
43
|
-
var ensureLogOpts = (opts) => {
|
|
44
|
-
const components = {};
|
|
45
|
-
if (opts.command === "version" || opts.command === "test" && !opts.log) {
|
|
46
|
-
return { default: "info" };
|
|
47
|
-
}
|
|
48
|
-
if (opts.log) {
|
|
49
|
-
opts.log.forEach((l) => {
|
|
50
|
-
let component = "";
|
|
51
|
-
let level = "";
|
|
52
|
-
if (l.match(/=/)) {
|
|
53
|
-
const parts = l.split("=");
|
|
54
|
-
component = parts[0].toLowerCase();
|
|
55
|
-
if (componentShorthands[component]) {
|
|
56
|
-
component = componentShorthands[component];
|
|
57
|
-
}
|
|
58
|
-
level = parts[1].toLowerCase();
|
|
59
|
-
} else {
|
|
60
|
-
component = "default";
|
|
61
|
-
level = l.toLowerCase();
|
|
62
|
-
}
|
|
63
|
-
if (!isValidComponent(component)) {
|
|
64
|
-
throw new Error(ERROR_MESSAGE_LOG_COMPONENT);
|
|
65
|
-
}
|
|
66
|
-
level = level.toLowerCase();
|
|
67
|
-
if (!isValidLogLevel(level)) {
|
|
68
|
-
throw new Error(ERROR_MESSAGE_LOG_LEVEL);
|
|
69
|
-
}
|
|
70
|
-
components[component] = level;
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
...defaultLoggerOptions,
|
|
75
|
-
...components
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
function ensureOpts(basePath = ".", opts) {
|
|
79
|
-
const newOpts = {
|
|
80
|
-
adaptor: opts.adaptor,
|
|
81
|
-
adaptors: opts.adaptors || [],
|
|
82
|
-
autoinstall: opts.autoinstall,
|
|
83
|
-
command: opts.command,
|
|
84
|
-
expand: opts.expand !== false,
|
|
85
|
-
force: opts.force || false,
|
|
86
|
-
immutable: opts.immutable || false,
|
|
87
|
-
logJson: typeof opts.logJson == "boolean" ? opts.logJson : Boolean(process.env.OPENFN_LOG_JSON),
|
|
88
|
-
noCompile: Boolean(opts.noCompile),
|
|
89
|
-
operation: opts.operation,
|
|
90
|
-
outputStdout: Boolean(opts.outputStdout),
|
|
91
|
-
packages: opts.packages,
|
|
92
|
-
repoDir: opts.repoDir || process.env.OPENFN_REPO_DIR || DEFAULT_REPO_DIR,
|
|
93
|
-
skipAdaptorValidation: opts.skipAdaptorValidation ?? false,
|
|
94
|
-
specifier: opts.specifier,
|
|
95
|
-
stateStdin: opts.stateStdin,
|
|
96
|
-
strictOutput: opts.strictOutput ?? true,
|
|
97
|
-
statePath: opts.statePath,
|
|
98
|
-
timeout: opts.timeout
|
|
99
|
-
};
|
|
100
|
-
const set = (key, value) => {
|
|
101
|
-
newOpts[key] = opts.hasOwnProperty(key) ? opts[key] : value;
|
|
102
|
-
};
|
|
103
|
-
if (opts.useAdaptorsMonorepo) {
|
|
104
|
-
newOpts.monorepoPath = process.env.OPENFN_ADAPTORS_REPO || "ERR";
|
|
105
|
-
}
|
|
106
|
-
let baseDir = basePath;
|
|
107
|
-
if (basePath.endsWith(".js")) {
|
|
108
|
-
baseDir = path.dirname(basePath);
|
|
109
|
-
set("jobPath", basePath);
|
|
110
|
-
} else {
|
|
111
|
-
set("jobPath", `${baseDir}/job.js`);
|
|
112
|
-
}
|
|
113
|
-
if (!opts.outputStdout) {
|
|
114
|
-
set(
|
|
115
|
-
"outputPath",
|
|
116
|
-
newOpts.command === "compile" ? `${baseDir}/output.js` : `${baseDir}/output.json`
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
newOpts.log = ensureLogOpts(opts);
|
|
120
|
-
return newOpts;
|
|
121
|
-
}
|
|
15
|
+
// src/execute/handler.ts
|
|
16
|
+
import { readFile } from "node:fs/promises";
|
|
122
17
|
|
|
123
18
|
// src/execute/load-state.ts
|
|
124
19
|
import fs from "node:fs/promises";
|
|
@@ -150,7 +45,9 @@ var load_state_default = async (opts, log) => {
|
|
|
150
45
|
log.warn(e);
|
|
151
46
|
}
|
|
152
47
|
}
|
|
153
|
-
log.info(
|
|
48
|
+
log.info(
|
|
49
|
+
"No state provided - using default state { data: {}, configuration: {}"
|
|
50
|
+
);
|
|
154
51
|
return {
|
|
155
52
|
data: {},
|
|
156
53
|
configuration: {}
|
|
@@ -174,11 +71,11 @@ var execute_default = (code, state, opts) => {
|
|
|
174
71
|
function parseAdaptors(opts) {
|
|
175
72
|
const adaptors = {};
|
|
176
73
|
opts.adaptors.reduce((obj, exp) => {
|
|
177
|
-
const [module,
|
|
74
|
+
const [module, path4] = exp.split("=");
|
|
178
75
|
const { name, version } = getNameAndVersion(module);
|
|
179
76
|
const info = {};
|
|
180
|
-
if (
|
|
181
|
-
info.path =
|
|
77
|
+
if (path4) {
|
|
78
|
+
info.path = path4;
|
|
182
79
|
}
|
|
183
80
|
if (version) {
|
|
184
81
|
info.version = version;
|
|
@@ -190,25 +87,17 @@ function parseAdaptors(opts) {
|
|
|
190
87
|
}
|
|
191
88
|
|
|
192
89
|
// src/compile/compile.ts
|
|
193
|
-
import fs2 from "node:fs/promises";
|
|
194
90
|
import compile, { preloadAdaptorExports } from "@openfn/compiler";
|
|
195
91
|
import { getModulePath } from "@openfn/runtime";
|
|
196
92
|
var compile_default = async (opts, log) => {
|
|
197
93
|
log.debug("Loading job...");
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
log.success(`
|
|
94
|
+
const compilerOptions = await loadTransformOptions(opts, log);
|
|
95
|
+
compilerOptions.logger = logger_default(COMPILER, opts);
|
|
96
|
+
const job = compile(opts.jobSource || opts.jobPath, compilerOptions);
|
|
97
|
+
if (opts.jobPath) {
|
|
98
|
+
log.success(`Compiled job from ${opts.jobPath}`);
|
|
203
99
|
} else {
|
|
204
|
-
|
|
205
|
-
complilerOptions.logger = logger_default(COMPILER, opts);
|
|
206
|
-
job = compile(opts.jobSource || opts.jobPath, complilerOptions);
|
|
207
|
-
if (opts.jobPath) {
|
|
208
|
-
log.success(`Compiled job from ${opts.jobPath}`);
|
|
209
|
-
} else {
|
|
210
|
-
log.success("Compiled job");
|
|
211
|
-
}
|
|
100
|
+
log.success("Compiled job");
|
|
212
101
|
}
|
|
213
102
|
return job;
|
|
214
103
|
};
|
|
@@ -220,10 +109,10 @@ var stripVersionSpecifier = (specifier) => {
|
|
|
220
109
|
return specifier;
|
|
221
110
|
};
|
|
222
111
|
var resolveSpecifierPath = async (pattern, repoDir, log) => {
|
|
223
|
-
const [specifier,
|
|
224
|
-
if (
|
|
225
|
-
log.debug(`Resolved ${specifier} to path: ${
|
|
226
|
-
return
|
|
112
|
+
const [specifier, path4] = pattern.split("=");
|
|
113
|
+
if (path4) {
|
|
114
|
+
log.debug(`Resolved ${specifier} to path: ${path4}`);
|
|
115
|
+
return path4;
|
|
227
116
|
}
|
|
228
117
|
const repoPath = await getModulePath(specifier, repoDir, log);
|
|
229
118
|
if (repoPath) {
|
|
@@ -240,15 +129,15 @@ var loadTransformOptions = async (opts, log) => {
|
|
|
240
129
|
const [pattern] = opts.adaptors;
|
|
241
130
|
const [specifier] = pattern.split("=");
|
|
242
131
|
log.debug(`Attempting to preload typedefs for ${specifier}`);
|
|
243
|
-
const
|
|
244
|
-
if (
|
|
132
|
+
const path4 = await resolveSpecifierPath(pattern, opts.repoDir, log);
|
|
133
|
+
if (path4) {
|
|
245
134
|
try {
|
|
246
|
-
exports = await preloadAdaptorExports(
|
|
135
|
+
exports = await preloadAdaptorExports(path4);
|
|
247
136
|
if (exports) {
|
|
248
137
|
log.info(`Loaded typedefs for ${specifier}`);
|
|
249
138
|
}
|
|
250
139
|
} catch (e) {
|
|
251
|
-
log.error(`Failed to load adaptor typedefs from path ${
|
|
140
|
+
log.error(`Failed to load adaptor typedefs from path ${path4}`);
|
|
252
141
|
log.error(e);
|
|
253
142
|
}
|
|
254
143
|
}
|
|
@@ -302,19 +191,6 @@ var serialize_output_default = serializeOutput;
|
|
|
302
191
|
import { exec } from "node:child_process";
|
|
303
192
|
import treeify from "treeify";
|
|
304
193
|
import { install as rtInstall, loadRepoPkg } from "@openfn/runtime";
|
|
305
|
-
|
|
306
|
-
// src/util/expand-adaptors.ts
|
|
307
|
-
var nullLogger = createNullLogger();
|
|
308
|
-
var expand_adaptors_default = (names, log = nullLogger) => names?.map((name) => {
|
|
309
|
-
if (name.startsWith("@openfn/language-")) {
|
|
310
|
-
return name;
|
|
311
|
-
}
|
|
312
|
-
const expanded = `@openfn/language-${name}`;
|
|
313
|
-
log.debug(`Expanded adaptor ${name} to ${expanded}`);
|
|
314
|
-
return expanded;
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
// src/repo/handler.ts
|
|
318
194
|
var install = async (opts, log = defaultLogger) => {
|
|
319
195
|
let { packages, adaptor, repoDir } = opts;
|
|
320
196
|
if (packages) {
|
|
@@ -322,7 +198,7 @@ var install = async (opts, log = defaultLogger) => {
|
|
|
322
198
|
log.success("Installing packages...");
|
|
323
199
|
log.debug("repoDir is set to:", repoDir);
|
|
324
200
|
if (adaptor) {
|
|
325
|
-
packages = expand_adaptors_default(packages
|
|
201
|
+
packages = expand_adaptors_default(packages);
|
|
326
202
|
}
|
|
327
203
|
await rtInstall(packages, repoDir, log);
|
|
328
204
|
const duration = log.timer("install");
|
|
@@ -421,7 +297,16 @@ var executeHandler = async (options, logger) => {
|
|
|
421
297
|
}
|
|
422
298
|
}
|
|
423
299
|
const state = await load_state_default(options, logger);
|
|
424
|
-
|
|
300
|
+
let code = "";
|
|
301
|
+
if (options.compile) {
|
|
302
|
+
code = await compile_default(options, logger);
|
|
303
|
+
} else {
|
|
304
|
+
logger.info("Skipping compilation as noCompile is set");
|
|
305
|
+
if (options.jobPath) {
|
|
306
|
+
code = await readFile(options.jobPath, "utf8");
|
|
307
|
+
logger.success(`Loaded job from ${options.jobPath} (no compilation)`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
425
310
|
try {
|
|
426
311
|
const result = await execute_default(code, state, options);
|
|
427
312
|
await serialize_output_default(options, result, logger);
|
|
@@ -454,6 +339,7 @@ var handler_default2 = compileHandler;
|
|
|
454
339
|
var sillyMessage = "Calculating the answer to life, the universe, and everything...";
|
|
455
340
|
var testHandler = async (options, logger) => {
|
|
456
341
|
logger.log("Running test job...");
|
|
342
|
+
options.compile = true;
|
|
457
343
|
options.jobSource = `const fn = () => state => { console.log('${sillyMessage}'); return state * 2; } ; fn()`;
|
|
458
344
|
delete options.jobPath;
|
|
459
345
|
if (!options.stateStdin) {
|
|
@@ -472,28 +358,28 @@ var handler_default3 = testHandler;
|
|
|
472
358
|
// src/docgen/handler.ts
|
|
473
359
|
import { writeFile as writeFile3 } from "node:fs/promises";
|
|
474
360
|
import { readFileSync, writeFileSync, mkdirSync, rmSync } from "node:fs";
|
|
475
|
-
import
|
|
361
|
+
import path from "node:path";
|
|
476
362
|
import { describePackage } from "@openfn/describe-package";
|
|
477
363
|
import { getNameAndVersion as getNameAndVersion2 } from "@openfn/runtime";
|
|
478
364
|
var RETRY_DURATION = 500;
|
|
479
365
|
var RETRY_COUNT = 20;
|
|
480
366
|
var TIMEOUT_MS = 1e3 * 60;
|
|
481
367
|
var actualDocGen = (specifier) => describePackage(specifier, {});
|
|
482
|
-
var ensurePath = (filePath) => mkdirSync(
|
|
483
|
-
var generatePlaceholder = (
|
|
484
|
-
writeFileSync(
|
|
368
|
+
var ensurePath = (filePath) => mkdirSync(path.dirname(filePath), { recursive: true });
|
|
369
|
+
var generatePlaceholder = (path4) => {
|
|
370
|
+
writeFileSync(path4, `{ "loading": true, "timestamp": ${Date.now()}}`);
|
|
485
371
|
};
|
|
486
372
|
var finish = (logger, resultPath) => {
|
|
487
373
|
logger.success("Done! Docs can be found at:\n");
|
|
488
|
-
logger.print(` ${
|
|
374
|
+
logger.print(` ${path.resolve(resultPath)}`);
|
|
489
375
|
};
|
|
490
|
-
var generateDocs = async (specifier,
|
|
376
|
+
var generateDocs = async (specifier, path4, docgen, logger) => {
|
|
491
377
|
const result = await docgen(specifier);
|
|
492
|
-
await writeFile3(
|
|
493
|
-
finish(logger,
|
|
494
|
-
return
|
|
378
|
+
await writeFile3(path4, JSON.stringify(result, null, 2));
|
|
379
|
+
finish(logger, path4);
|
|
380
|
+
return path4;
|
|
495
381
|
};
|
|
496
|
-
var waitForDocs = async (docs,
|
|
382
|
+
var waitForDocs = async (docs, path4, logger, retryDuration = RETRY_DURATION) => {
|
|
497
383
|
try {
|
|
498
384
|
if (docs.hasOwnProperty("loading")) {
|
|
499
385
|
logger.info("Docs are being loaded by another process. Waiting.");
|
|
@@ -505,19 +391,19 @@ var waitForDocs = async (docs, path5, logger, retryDuration = RETRY_DURATION) =>
|
|
|
505
391
|
clearInterval(i);
|
|
506
392
|
reject(new Error("Timed out waiting for docs to load"));
|
|
507
393
|
}
|
|
508
|
-
const updated = JSON.parse(readFileSync(
|
|
394
|
+
const updated = JSON.parse(readFileSync(path4, "utf8"));
|
|
509
395
|
if (!updated.hasOwnProperty("loading")) {
|
|
510
396
|
logger.info("Docs found!");
|
|
511
397
|
clearInterval(i);
|
|
512
|
-
resolve(
|
|
398
|
+
resolve(path4);
|
|
513
399
|
}
|
|
514
400
|
count++;
|
|
515
401
|
}, retryDuration);
|
|
516
402
|
});
|
|
517
403
|
} else {
|
|
518
|
-
logger.info(`Docs already written to cache at ${
|
|
519
|
-
finish(logger,
|
|
520
|
-
return
|
|
404
|
+
logger.info(`Docs already written to cache at ${path4}`);
|
|
405
|
+
finish(logger, path4);
|
|
406
|
+
return path4;
|
|
521
407
|
}
|
|
522
408
|
} catch (e) {
|
|
523
409
|
logger.error("Existing doc JSON corrupt. Aborting");
|
|
@@ -534,28 +420,28 @@ var docgenHandler = (options, logger, docgen = actualDocGen, retryDuration = RET
|
|
|
534
420
|
process.exit(9);
|
|
535
421
|
}
|
|
536
422
|
logger.success(`Generating docs for ${specifier}`);
|
|
537
|
-
const
|
|
538
|
-
ensurePath(
|
|
423
|
+
const path4 = `${repoDir}/docs/${specifier}.json`;
|
|
424
|
+
ensurePath(path4);
|
|
539
425
|
const handleError = () => {
|
|
540
426
|
logger.info("Removing placeholder");
|
|
541
|
-
rmSync(
|
|
427
|
+
rmSync(path4);
|
|
542
428
|
};
|
|
543
429
|
try {
|
|
544
|
-
const existing = readFileSync(
|
|
430
|
+
const existing = readFileSync(path4, "utf8");
|
|
545
431
|
const json = JSON.parse(existing);
|
|
546
432
|
if (json && json.timeout && Date.now() - json.timeout >= TIMEOUT_MS) {
|
|
547
433
|
logger.info(`Expired placeholder found. Removing.`);
|
|
548
|
-
rmSync(
|
|
434
|
+
rmSync(path4);
|
|
549
435
|
throw new Error("TIMEOUT");
|
|
550
436
|
}
|
|
551
|
-
return waitForDocs(json,
|
|
437
|
+
return waitForDocs(json, path4, logger, retryDuration);
|
|
552
438
|
} catch (e) {
|
|
553
439
|
if (e.message !== "TIMEOUT") {
|
|
554
|
-
logger.info(`Docs JSON not found at ${
|
|
440
|
+
logger.info(`Docs JSON not found at ${path4}`);
|
|
555
441
|
}
|
|
556
442
|
logger.debug("Generating placeholder");
|
|
557
|
-
generatePlaceholder(
|
|
558
|
-
return generateDocs(specifier,
|
|
443
|
+
generatePlaceholder(path4);
|
|
444
|
+
return generateDocs(specifier, path4, docgen, logger).catch((e2) => {
|
|
559
445
|
logger.error("Error generating documentation");
|
|
560
446
|
logger.error(e2);
|
|
561
447
|
handleError();
|
|
@@ -565,7 +451,7 @@ var docgenHandler = (options, logger, docgen = actualDocGen, retryDuration = RET
|
|
|
565
451
|
var handler_default4 = docgenHandler;
|
|
566
452
|
|
|
567
453
|
// src/docs/handler.ts
|
|
568
|
-
import { readFile } from "node:fs/promises";
|
|
454
|
+
import { readFile as readFile2 } from "node:fs/promises";
|
|
569
455
|
import { getNameAndVersion as getNameAndVersion3, getLatestVersion } from "@openfn/runtime";
|
|
570
456
|
var describeFn = (adaptorName, fn) => `## ${fn.name}(${fn.parameters.map(({ name }) => name).join(",")})
|
|
571
457
|
|
|
@@ -603,15 +489,15 @@ var docsHandler = async (options, logger) => {
|
|
|
603
489
|
logger.success(`Showing docs for ${adaptorName} v${version}`);
|
|
604
490
|
}
|
|
605
491
|
logger.info("Generating/loading documentation...");
|
|
606
|
-
const
|
|
492
|
+
const path4 = await handler_default4(
|
|
607
493
|
{
|
|
608
494
|
specifier: `${name}@${version}`,
|
|
609
495
|
repoDir
|
|
610
496
|
},
|
|
611
497
|
createNullLogger()
|
|
612
498
|
);
|
|
613
|
-
if (
|
|
614
|
-
const source = await
|
|
499
|
+
if (path4) {
|
|
500
|
+
const source = await readFile2(path4, "utf8");
|
|
615
501
|
const data = JSON.parse(source);
|
|
616
502
|
let desc;
|
|
617
503
|
if (operation) {
|
|
@@ -633,13 +519,13 @@ var docsHandler = async (options, logger) => {
|
|
|
633
519
|
var handler_default5 = docsHandler;
|
|
634
520
|
|
|
635
521
|
// src/util/use-adaptors-repo.ts
|
|
636
|
-
import { readFile as
|
|
637
|
-
import
|
|
522
|
+
import { readFile as readFile3 } from "node:fs/promises";
|
|
523
|
+
import path2 from "node:path";
|
|
638
524
|
import assert from "node:assert";
|
|
639
525
|
import { getNameAndVersion as getNameAndVersion4 } from "@openfn/runtime";
|
|
640
526
|
var validateMonoRepo = async (repoPath, log) => {
|
|
641
527
|
try {
|
|
642
|
-
const raw = await
|
|
528
|
+
const raw = await readFile3(`${repoPath}/package.json`, "utf8");
|
|
643
529
|
const pkg = JSON.parse(raw);
|
|
644
530
|
assert(pkg.name === "adaptors");
|
|
645
531
|
} catch (e) {
|
|
@@ -658,7 +544,7 @@ var updatePath = (adaptor, repoPath, log) => {
|
|
|
658
544
|
);
|
|
659
545
|
}
|
|
660
546
|
const shortName = name.replace("@openfn/language-", "");
|
|
661
|
-
const abspath =
|
|
547
|
+
const abspath = path2.resolve(repoPath, "packages", shortName);
|
|
662
548
|
return `${name}=${abspath}`;
|
|
663
549
|
};
|
|
664
550
|
var useAdaptorsRepo = async (adaptors, repoPath, log) => {
|
|
@@ -675,7 +561,7 @@ var use_adaptors_repo_default = useAdaptorsRepo;
|
|
|
675
561
|
|
|
676
562
|
// src/util/print-versions.ts
|
|
677
563
|
import { readFileSync as readFileSync2 } from "node:fs";
|
|
678
|
-
import
|
|
564
|
+
import path3 from "node:path";
|
|
679
565
|
import { getNameAndVersion as getNameAndVersion5 } from "@openfn/runtime";
|
|
680
566
|
import { mainSymbols } from "figures";
|
|
681
567
|
var NODE = "node.js";
|
|
@@ -685,7 +571,7 @@ var COMPILER2 = "compiler";
|
|
|
685
571
|
var { triangleRightSmall: t } = mainSymbols;
|
|
686
572
|
var loadVersionFromPath = (adaptorPath) => {
|
|
687
573
|
try {
|
|
688
|
-
const pkg = JSON.parse(readFileSync2(
|
|
574
|
+
const pkg = JSON.parse(readFileSync2(path3.resolve(adaptorPath, "package.json"), "utf8"));
|
|
689
575
|
return pkg.version;
|
|
690
576
|
} catch (e) {
|
|
691
577
|
return "unknown";
|
|
@@ -761,8 +647,9 @@ var handlers = {
|
|
|
761
647
|
["repo-list"]: list,
|
|
762
648
|
version: async (opts, logger) => print_versions_default(logger, opts)
|
|
763
649
|
};
|
|
650
|
+
var maybeEnsureOpts = (basePath, options) => /^(execute|compile)$/.test(options.command) ? ensureLogOpts(options) : ensureOpts(basePath, options);
|
|
764
651
|
var parse = async (basePath, options, log) => {
|
|
765
|
-
const opts =
|
|
652
|
+
const opts = maybeEnsureOpts(basePath, options);
|
|
766
653
|
const logger = log || logger_default(CLI, opts);
|
|
767
654
|
if (opts.command === "execute" || opts.command === "test") {
|
|
768
655
|
await print_versions_default(logger, opts);
|
|
@@ -780,8 +667,8 @@ var parse = async (basePath, options, log) => {
|
|
|
780
667
|
opts.monorepoPath,
|
|
781
668
|
logger
|
|
782
669
|
);
|
|
783
|
-
} else if (opts.adaptors && opts.
|
|
784
|
-
opts.adaptors = expand_adaptors_default(opts.adaptors
|
|
670
|
+
} else if (opts.adaptors && opts.expandAdaptors) {
|
|
671
|
+
opts.adaptors = expand_adaptors_default(opts.adaptors);
|
|
785
672
|
}
|
|
786
673
|
if (/^(test|version)$/.test(opts.command) && !opts.repoDir) {
|
|
787
674
|
logger.warn(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openfn/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.31",
|
|
4
4
|
"description": "CLI devtools for the openfn toolchain.",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=18",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"yargs": "^17.5.1",
|
|
44
44
|
"@openfn/compiler": "0.0.25",
|
|
45
45
|
"@openfn/describe-package": "0.0.14",
|
|
46
|
-
"@openfn/
|
|
47
|
-
"@openfn/
|
|
46
|
+
"@openfn/logger": "0.0.10",
|
|
47
|
+
"@openfn/runtime": "0.0.19"
|
|
48
48
|
},
|
|
49
49
|
"files": [
|
|
50
50
|
"dist",
|