Skip to content

Commit c1e3eb6

Browse files
committed
feat(cli): add exec subcommand
1 parent e174367 commit c1e3eb6

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

packages/cli/package.json

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
"@endo/promise-kit": "^0.2.53",
3333
"@endo/where": "^0.2.11",
3434
"commander": "^5.0.0",
35+
"endo-exec": "^0.1.0",
36+
"import-meta-resolve": "^2.0.3",
3537
"ses": "^0.18.1"
3638
},
3739
"devDependencies": {

packages/cli/src/endo.js

+19-1
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import fs from 'fs';
99
import path from 'path';
1010
import url from 'url';
1111
import crypto from 'crypto';
12-
import { spawn } from 'child_process';
12+
import { fork, spawn } from 'child_process';
1313
import os from 'os';
14+
import { moduleResolve } from 'import-meta-resolve';
1415

1516
import { Command } from 'commander';
1617
import { makePromiseKit } from '@endo/promise-kit';
@@ -89,6 +90,23 @@ export const main = async rawArgs => {
8990
process.stdout.write(`${cachePath}\n`);
9091
});
9192

93+
program
94+
.command('exec -- <script> [args...]')
95+
.action(async (script, args, _cmd) => {
96+
const u = moduleResolve('endo-exec/endo-exec.cjs', import.meta.url);
97+
const endoExec = url.fileURLToPath(u);
98+
return new Promise((resolve, reject) => {
99+
const cp = fork(endoExec, [script, ...args], {
100+
stdio: 'inherit',
101+
});
102+
cp.on('error', reject);
103+
cp.on('close', code => {
104+
process.exitCode = code;
105+
resolve(code);
106+
});
107+
});
108+
});
109+
92110
program.command('start').action(async _cmd => {
93111
await start();
94112
});

yarn.lock

+35-1
Original file line numberDiff line numberDiff line change
@@ -4916,6 +4916,11 @@ dom-serializer@^1.0.1:
49164916
domhandler "^4.2.0"
49174917
entities "^2.0.0"
49184918

4919+
dom-walk@^0.1.0:
4920+
version "0.1.2"
4921+
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
4922+
integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
4923+
49194924
domain-browser@^1.1.1, domain-browser@^1.2.0:
49204925
version "1.2.0"
49214926
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
@@ -6381,6 +6386,14 @@ global-prefix@^3.0.0:
63816386
kind-of "^6.0.2"
63826387
which "^1.3.1"
63836388

6389+
global@^4.4.0:
6390+
version "4.4.0"
6391+
resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
6392+
integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
6393+
dependencies:
6394+
min-document "^2.19.0"
6395+
process "^0.11.10"
6396+
63846397
globals@^11.1.0:
63856398
version "11.12.0"
63866399
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -6883,6 +6896,13 @@ import-local@^3.0.2:
68836896
pkg-dir "^4.2.0"
68846897
resolve-cwd "^3.0.0"
68856898

6899+
import-meta-resolve@^2.0.3:
6900+
version "2.0.3"
6901+
resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-2.0.3.tgz#117f3dc9a6415e82c32530545e1cf91be5c0a5d1"
6902+
integrity sha512-fpAppnBpZ3ymQ/dPP97TNsco1HB5+V9SYJ3chY50PP8xn4U/w+Y6ovWBmTImB/prmGsTjzPh8pQYY+EVBlr9mw==
6903+
dependencies:
6904+
builtins "^5.0.0"
6905+
68866906
imurmurhash@^0.1.4:
68876907
version "0.1.4"
68886908
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -8480,6 +8500,13 @@ mimic-fn@^4.0.0:
84808500
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
84818501
integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
84828502

8503+
min-document@^2.19.0:
8504+
version "2.19.0"
8505+
resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
8506+
integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==
8507+
dependencies:
8508+
dom-walk "^0.1.0"
8509+
84838510
min-indent@^1.0.0:
84848511
version "1.0.1"
84858512
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
@@ -11192,7 +11219,14 @@ semver@^6.0.0, semver@^6.3.0:
1119211219
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1119311220
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1119411221

11195-
semver@^7.0.0, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8:
11222+
semver@^7.0.0, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7:
11223+
version "7.3.7"
11224+
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
11225+
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
11226+
dependencies:
11227+
lru-cache "^6.0.0"
11228+
11229+
semver@^7.1.1, semver@^7.3.5, semver@^7.3.8:
1119611230
version "7.3.8"
1119711231
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
1119811232
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==

0 commit comments

Comments
 (0)