@ethlete/cli 2.1.0-next.8 → 3.0.0-next.16
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/CHANGELOG.md +93 -0
- package/README.md +22 -7
- package/design/define-call.ts +92 -0
- package/design/web/env.d.ts +11 -0
- package/design/web/frame.html +17 -0
- package/design/web/frame.ts +44 -0
- package/design/web/host.css +494 -0
- package/design/web/host.ts +445 -0
- package/design/web/index.html +11 -0
- package/package.json +13 -2
- package/src/index.d.ts +1 -0
- package/src/index.js +32 -4
- package/src/index.js.map +1 -1
- package/src/lib/api/clear.js +13 -3
- package/src/lib/api/clear.js.map +1 -1
- package/src/lib/api/compose.js +5 -1
- package/src/lib/api/compose.js.map +1 -1
- package/src/lib/api/git.d.ts +11 -4
- package/src/lib/api/git.js +35 -8
- package/src/lib/api/git.js.map +1 -1
- package/src/lib/api/load-definitions.js +10 -1
- package/src/lib/api/load-definitions.js.map +1 -1
- package/src/lib/api/ports.js +12 -3
- package/src/lib/api/ports.js.map +1 -1
- package/src/lib/api/run.js +8 -3
- package/src/lib/api/run.js.map +1 -1
- package/src/lib/api/setup.js +1 -1
- package/src/lib/api/setup.js.map +1 -1
- package/src/lib/api/state.js +7 -5
- package/src/lib/api/state.js.map +1 -1
- package/src/lib/auth/composer-auth.js +3 -2
- package/src/lib/auth/composer-auth.js.map +1 -1
- package/src/lib/auth/gitlab-token.js +1 -1
- package/src/lib/auth/gitlab-token.js.map +1 -1
- package/src/lib/config/diagnose.js +15 -9
- package/src/lib/config/diagnose.js.map +1 -1
- package/src/lib/config/local-config.d.ts +1 -1
- package/src/lib/design/calls-tsconfig.d.ts +6 -0
- package/src/lib/design/calls-tsconfig.js +37 -0
- package/src/lib/design/calls-tsconfig.js.map +1 -0
- package/src/lib/design/check.d.ts +11 -0
- package/src/lib/design/check.js +203 -0
- package/src/lib/design/check.js.map +1 -0
- package/src/lib/design/design-command.d.ts +10 -0
- package/src/lib/design/design-command.js +32 -0
- package/src/lib/design/design-command.js.map +1 -0
- package/src/lib/design/index.d.ts +5 -0
- package/src/lib/design/index.js +9 -0
- package/src/lib/design/index.js.map +1 -0
- package/src/lib/design/paths.d.ts +24 -0
- package/src/lib/design/paths.js +31 -0
- package/src/lib/design/paths.js.map +1 -0
- package/src/lib/design/serve.d.ts +7 -0
- package/src/lib/design/serve.js +144 -0
- package/src/lib/design/serve.js.map +1 -0
- package/src/lib/design/vite-paths.d.ts +7 -0
- package/src/lib/design/vite-paths.js +15 -0
- package/src/lib/design/vite-paths.js.map +1 -0
- package/src/lib/doctor/doctor-command.js +18 -4
- package/src/lib/doctor/doctor-command.js.map +1 -1
- package/src/lib/index.d.ts +1 -0
- package/src/lib/index.js +1 -0
- package/src/lib/index.js.map +1 -1
- package/src/lib/release.d.ts +38 -1
- package/src/lib/release.js +153 -28
- package/src/lib/release.js.map +1 -1
- package/src/lib/update/agent-rules-sync.d.ts +37 -0
- package/src/lib/update/agent-rules-sync.js +40 -0
- package/src/lib/update/agent-rules-sync.js.map +1 -0
- package/src/lib/update/agent-setup.d.ts +33 -0
- package/src/lib/update/agent-setup.js +124 -0
- package/src/lib/update/agent-setup.js.map +1 -0
- package/src/lib/update/ai.d.ts +37 -8
- package/src/lib/update/ai.js +193 -24
- package/src/lib/update/ai.js.map +1 -1
- package/src/lib/update/args.d.ts +2 -0
- package/src/lib/update/args.js +22 -2
- package/src/lib/update/args.js.map +1 -1
- package/src/lib/update/available-migrations.d.ts +10 -0
- package/src/lib/update/available-migrations.js +23 -0
- package/src/lib/update/available-migrations.js.map +1 -0
- package/src/lib/update/commits.d.ts +63 -0
- package/src/lib/update/commits.js +146 -0
- package/src/lib/update/commits.js.map +1 -0
- package/src/lib/update/gitignore.d.ts +8 -0
- package/src/lib/update/gitignore.js +22 -0
- package/src/lib/update/gitignore.js.map +1 -0
- package/src/lib/update/index.d.ts +6 -0
- package/src/lib/update/index.js +6 -0
- package/src/lib/update/index.js.map +1 -1
- package/src/lib/update/migration-manifest.d.ts +10 -0
- package/src/lib/update/migration-manifest.js +15 -3
- package/src/lib/update/migration-manifest.js.map +1 -1
- package/src/lib/update/migration-record.d.ts +24 -0
- package/src/lib/update/migration-record.js +48 -0
- package/src/lib/update/migration-record.js.map +1 -0
- package/src/lib/update/migrations-command.d.ts +14 -0
- package/src/lib/update/migrations-command.js +212 -0
- package/src/lib/update/migrations-command.js.map +1 -0
- package/src/lib/update/package-manager.d.ts +20 -1
- package/src/lib/update/package-manager.js +34 -15
- package/src/lib/update/package-manager.js.map +1 -1
- package/src/lib/update/packages.d.ts +28 -8
- package/src/lib/update/packages.js +117 -36
- package/src/lib/update/packages.js.map +1 -1
- package/src/lib/update/pending.d.ts +16 -0
- package/src/lib/update/pending.js +21 -5
- package/src/lib/update/pending.js.map +1 -1
- package/src/lib/update/plan.d.ts +33 -8
- package/src/lib/update/plan.js +76 -7
- package/src/lib/update/plan.js.map +1 -1
- package/src/lib/update/registry.d.ts +32 -4
- package/src/lib/update/registry.js +145 -8
- package/src/lib/update/registry.js.map +1 -1
- package/src/lib/update/run-migrations.d.ts +2 -0
- package/src/lib/update/run-migrations.js +20 -15
- package/src/lib/update/run-migrations.js.map +1 -1
- package/src/lib/update/scan.d.ts +14 -0
- package/src/lib/update/scan.js +57 -0
- package/src/lib/update/scan.js.map +1 -0
- package/src/lib/update/semver.js +2 -1
- package/src/lib/update/semver.js.map +1 -1
- package/src/lib/update/tasks.d.ts +18 -1
- package/src/lib/update/tasks.js +114 -43
- package/src/lib/update/tasks.js.map +1 -1
- package/src/lib/update/update-command.d.ts +7 -0
- package/src/lib/update/update-command.js +300 -73
- package/src/lib/update/update-command.js.map +1 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkDesign = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const calls_tsconfig_1 = require("./calls-tsconfig");
|
|
9
|
+
const paths_1 = require("./paths");
|
|
10
|
+
/**
|
|
11
|
+
* A tool the checker shells out to, taken from the checkout first and from this package second, so
|
|
12
|
+
* a checkout that keeps design calls need not install anything of its own. The path comes out of
|
|
13
|
+
* the package's own `bin` field, because an `exports` map hides the file from a direct resolve.
|
|
14
|
+
*/
|
|
15
|
+
const binaryOf = (options) => {
|
|
16
|
+
const { target, pkg, bin } = options;
|
|
17
|
+
try {
|
|
18
|
+
const manifest = require.resolve(`${pkg}/package.json`, { paths: [target, __dirname] });
|
|
19
|
+
const declared = JSON.parse((0, fs_1.readFileSync)(manifest, 'utf8')).bin;
|
|
20
|
+
const path = typeof declared === 'string' ? declared : declared === null || declared === void 0 ? void 0 : declared[bin];
|
|
21
|
+
return path ? (0, path_1.resolve)((0, path_1.dirname)(manifest), path) : null;
|
|
22
|
+
}
|
|
23
|
+
catch (_a) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
/** A bundler stack runs to hundreds of frames and says nothing. Keep the message. */
|
|
28
|
+
const trim = (text) => [...new Set(text.split('\n').filter((line) => !/^\s+at /.test(line) && line.trim() !== ''))].slice(0, 12).join('\n');
|
|
29
|
+
const outputOf = (error) => {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
const shape = error;
|
|
32
|
+
return trim(`${(_a = shape.stdout) !== null && _a !== void 0 ? _a : ''}${(_b = shape.stderr) !== null && _b !== void 0 ? _b : ''}`);
|
|
33
|
+
};
|
|
34
|
+
const parse = (argv, names) => {
|
|
35
|
+
var _a, _b;
|
|
36
|
+
const flags = {};
|
|
37
|
+
let current = null;
|
|
38
|
+
for (const argument of argv) {
|
|
39
|
+
if (names.includes(argument)) {
|
|
40
|
+
current = argument;
|
|
41
|
+
(_a = flags[current]) !== null && _a !== void 0 ? _a : (flags[current] = []);
|
|
42
|
+
}
|
|
43
|
+
else if (current) {
|
|
44
|
+
(_b = flags[current]) === null || _b === void 0 ? void 0 : _b.push(argument);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return flags;
|
|
48
|
+
};
|
|
49
|
+
const runBrowser = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
50
|
+
const { base, slug, wanted } = options;
|
|
51
|
+
const playwright = yield import('playwright').catch(() => null);
|
|
52
|
+
if (!playwright) {
|
|
53
|
+
console.error('NO BROWSER - neither the checkout nor this package resolves playwright, so the render stage cannot run.');
|
|
54
|
+
return 1;
|
|
55
|
+
}
|
|
56
|
+
const browser = yield playwright.chromium.launch();
|
|
57
|
+
try {
|
|
58
|
+
return yield checkPage({
|
|
59
|
+
page: yield browser.newPage({ viewport: { width: 1600, height: 1000 } }),
|
|
60
|
+
base,
|
|
61
|
+
slug,
|
|
62
|
+
wanted,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
yield browser.close();
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
const checkPage = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
70
|
+
const { page, base, slug, wanted } = options;
|
|
71
|
+
/** Angular throws at render time, and the overlay never shows those, so read the console too. */
|
|
72
|
+
const consoleErrors = [];
|
|
73
|
+
page.on('console', (message) => message.type() === 'error' && consoleErrors.push(message.text()));
|
|
74
|
+
page.on('pageerror', (error) => consoleErrors.push(error.message));
|
|
75
|
+
const fail = (message) => {
|
|
76
|
+
console.error(message);
|
|
77
|
+
return 1;
|
|
78
|
+
};
|
|
79
|
+
/** The rounds view folds a settled round away, so only the contact sheet holds every variant. */
|
|
80
|
+
yield page.goto(`${base}/?call=${encodeURIComponent(slug)}&view=sheet`, { waitUntil: 'domcontentloaded' });
|
|
81
|
+
const onPage = yield page
|
|
82
|
+
.locator('nav a[aria-current]')
|
|
83
|
+
.first()
|
|
84
|
+
.waitFor({ timeout: 15000 })
|
|
85
|
+
.then(() => true, () => false);
|
|
86
|
+
if (!onPage)
|
|
87
|
+
return fail(`NO CALL "${slug}" - the host drew no page for it. Check the folder under .ethlete/design/calls.`);
|
|
88
|
+
/** An unknown slug falls back to the first call, so read back which one the host actually drew. */
|
|
89
|
+
const drawn = yield page
|
|
90
|
+
.locator('nav a[aria-current="page"]')
|
|
91
|
+
.first()
|
|
92
|
+
.getAttribute('href')
|
|
93
|
+
.then((href) => new URL(href !== null && href !== void 0 ? href : '', base).searchParams.get('call'));
|
|
94
|
+
if (drawn !== slug) {
|
|
95
|
+
return fail(`NO CALL "${slug}" - the host fell back to "${drawn}". Pass the whole slug, which is the call ` +
|
|
96
|
+
`folder's path under .ethlete/design/calls.`);
|
|
97
|
+
}
|
|
98
|
+
const problems = yield page.locator('.problem').allInnerTexts();
|
|
99
|
+
if (problems.length > 0)
|
|
100
|
+
return fail(`BAD CALL ${slug}\n${problems.join('\n')}`);
|
|
101
|
+
const keys = yield page
|
|
102
|
+
.locator('iframe[data-variant]')
|
|
103
|
+
.evaluateAll((frames) => frames.map((frame) => { var _a; return (_a = frame.dataset['variant']) !== null && _a !== void 0 ? _a : ''; }));
|
|
104
|
+
const checked = wanted ? keys.filter((key) => key === wanted) : keys;
|
|
105
|
+
if (checked.length === 0) {
|
|
106
|
+
return fail(`NO VARIANT "${wanted}" on ${slug} - it declares ${keys.length > 0 ? keys.join(', ') : 'none'}.`);
|
|
107
|
+
}
|
|
108
|
+
for (const key of checked) {
|
|
109
|
+
/** A frame reloads on every edit, which detaches a `page.frames()` handle, so locate it each time. */
|
|
110
|
+
const frame = page.frameLocator(`iframe[data-variant="${key}"]`);
|
|
111
|
+
const drew = yield frame
|
|
112
|
+
.locator('#root > *')
|
|
113
|
+
.first()
|
|
114
|
+
.waitFor({ timeout: 15000 })
|
|
115
|
+
.then(() => true, () => false);
|
|
116
|
+
const overlay = frame.locator('vite-error-overlay');
|
|
117
|
+
if ((yield overlay.count()) > 0) {
|
|
118
|
+
const text = yield overlay
|
|
119
|
+
.locator('.message-body')
|
|
120
|
+
.innerText()
|
|
121
|
+
.catch(() => '(overlay present, text unreadable)');
|
|
122
|
+
return fail(`COMPILE ERROR on ${slug} variant ${key}\n${trim(text)}`);
|
|
123
|
+
}
|
|
124
|
+
if (!drew) {
|
|
125
|
+
return fail(`EMPTY on ${slug} variant ${key} - #root never got a child.\n` +
|
|
126
|
+
`An empty module with a 200 response means the tsconfig turned emit off.\n` +
|
|
127
|
+
(consoleErrors.length > 0 ? trim(consoleErrors.join('\n')) : ''));
|
|
128
|
+
}
|
|
129
|
+
const text = yield frame.locator('#root').innerText();
|
|
130
|
+
if (text.startsWith('design-explore:'))
|
|
131
|
+
return fail(`FRAME REFUSED on ${slug} variant ${key}\n${text}`);
|
|
132
|
+
}
|
|
133
|
+
if (consoleErrors.length > 0) {
|
|
134
|
+
console.error(`RENDERED WITH ERRORS on ${slug}\n${trim(consoleErrors.join('\n'))}`);
|
|
135
|
+
return 1;
|
|
136
|
+
}
|
|
137
|
+
console.log(`ok ${slug} (${checked.join(', ')})`);
|
|
138
|
+
return 0;
|
|
139
|
+
});
|
|
140
|
+
/**
|
|
141
|
+
* Finds out why a call does not render, in the cheapest order: eslint on the named files, then
|
|
142
|
+
* `tsc --noEmit` over the checkout's calls, then the live page in a headless browser. A compile
|
|
143
|
+
* error draws an overlay on top of the drawing, so a screenshot of one looks like a design -
|
|
144
|
+
* never screenshot before this says `ok`.
|
|
145
|
+
*/
|
|
146
|
+
const checkDesign = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
147
|
+
var _a, _b, _c, _d, _e, _f;
|
|
148
|
+
const { target, argv, invocation } = options;
|
|
149
|
+
const flags = parse(argv, ['--lint', '--tsconfig', '--call', '--variant']);
|
|
150
|
+
const lintFiles = (_a = flags['--lint']) !== null && _a !== void 0 ? _a : [];
|
|
151
|
+
const slug = (_b = flags['--call']) === null || _b === void 0 ? void 0 : _b[0];
|
|
152
|
+
const wanted = (_c = flags['--variant']) === null || _c === void 0 ? void 0 : _c[0];
|
|
153
|
+
const tsconfig = '--tsconfig' in flags ? ((_e = (_d = flags['--tsconfig']) === null || _d === void 0 ? void 0 : _d[0]) !== null && _e !== void 0 ? _e : (0, calls_tsconfig_1.writeCallsTsconfig)(target)) : null;
|
|
154
|
+
if (lintFiles.length === 0 && !tsconfig && !slug) {
|
|
155
|
+
console.error(`usage: ${invocation} check [--lint <file>…] [--tsconfig [path]] [--call <slug> [--variant <key>]]`);
|
|
156
|
+
return 2;
|
|
157
|
+
}
|
|
158
|
+
if (lintFiles.length > 0) {
|
|
159
|
+
const eslint = binaryOf({ target, pkg: 'eslint', bin: 'eslint' });
|
|
160
|
+
if (!eslint) {
|
|
161
|
+
console.error(`NO LINTER - ${target} installs no eslint, so --lint has nothing to run.`);
|
|
162
|
+
return 1;
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
(0, child_process_1.execFileSync)(process.execPath, [eslint, ...lintFiles], { cwd: target, encoding: 'utf8', stdio: 'pipe' });
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
console.error(`LINT\n${outputOf(error)}`);
|
|
169
|
+
return 1;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (tsconfig) {
|
|
173
|
+
/**
|
|
174
|
+
* `TSC=@typescript/native-preview` runs the Go port, which is about a third faster - but it
|
|
175
|
+
* rejects a `baseUrl` in the config, so a repository that still uses one cannot run it.
|
|
176
|
+
*/
|
|
177
|
+
const native = process.env['TSC'];
|
|
178
|
+
const tsc = native ? null : binaryOf({ target, pkg: 'typescript', bin: 'tsc' });
|
|
179
|
+
if (!native && !tsc) {
|
|
180
|
+
console.error('NO TYPE CHECKER - neither the checkout nor this package resolves typescript.');
|
|
181
|
+
return 1;
|
|
182
|
+
}
|
|
183
|
+
const command = native
|
|
184
|
+
? { file: 'npx', args: ['-y', native, '--noEmit', '-p', tsconfig] }
|
|
185
|
+
: { file: process.execPath, args: [tsc, '--noEmit', '-p', tsconfig] };
|
|
186
|
+
try {
|
|
187
|
+
(0, child_process_1.execFileSync)(command.file, command.args, { cwd: target, encoding: 'utf8', stdio: 'pipe' });
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
console.error(`TYPE ERROR\n${outputOf(error)}`);
|
|
191
|
+
return 1;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (!slug) {
|
|
195
|
+
console.log('ok');
|
|
196
|
+
return 0;
|
|
197
|
+
}
|
|
198
|
+
const config = (0, paths_1.readConfig)(target);
|
|
199
|
+
const base = (_f = process.env['DE_URL']) !== null && _f !== void 0 ? _f : `http://localhost:${config ? (0, paths_1.portOf)(config) : paths_1.DEFAULT_PORT}`;
|
|
200
|
+
return runBrowser({ base, slug, wanted });
|
|
201
|
+
});
|
|
202
|
+
exports.checkDesign = checkDesign;
|
|
203
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `et design [checkout]` serves the design page of a checkout, and `et design check …` says why
|
|
3
|
+
* a call does not render. Both work on any checkout that keeps a `.ethlete/design` folder, so a
|
|
4
|
+
* repository needs no design tooling of its own.
|
|
5
|
+
*/
|
|
6
|
+
export declare const designCommand: (options: {
|
|
7
|
+
root: string;
|
|
8
|
+
argv: string[];
|
|
9
|
+
invocation: string;
|
|
10
|
+
}) => Promise<number>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.designCommand = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const check_1 = require("./check");
|
|
7
|
+
const serve_1 = require("./serve");
|
|
8
|
+
/** Reads `--checkout <path>` out of an argument list, and answers with the path and the rest. */
|
|
9
|
+
const splitCheckout = (argv, root) => {
|
|
10
|
+
var _a;
|
|
11
|
+
const index = argv.indexOf('--checkout');
|
|
12
|
+
if (index === -1)
|
|
13
|
+
return { target: root, rest: argv };
|
|
14
|
+
return { target: (0, path_1.resolve)(root, (_a = argv[index + 1]) !== null && _a !== void 0 ? _a : '.'), rest: [...argv.slice(0, index), ...argv.slice(index + 2)] };
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* `et design [checkout]` serves the design page of a checkout, and `et design check …` says why
|
|
18
|
+
* a call does not render. Both work on any checkout that keeps a `.ethlete/design` folder, so a
|
|
19
|
+
* repository needs no design tooling of its own.
|
|
20
|
+
*/
|
|
21
|
+
const designCommand = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
const { root, argv, invocation } = options;
|
|
23
|
+
if (argv[0] === 'check') {
|
|
24
|
+
const { target, rest } = splitCheckout(argv.slice(1), root);
|
|
25
|
+
return (0, check_1.checkDesign)({ target, argv: rest, invocation });
|
|
26
|
+
}
|
|
27
|
+
const { target, rest } = splitCheckout(argv, root);
|
|
28
|
+
const positional = rest[0];
|
|
29
|
+
return (0, serve_1.serveDesign)({ target: positional ? (0, path_1.resolve)(root, positional) : target });
|
|
30
|
+
});
|
|
31
|
+
exports.designCommand = designCommand;
|
|
32
|
+
//# sourceMappingURL=design-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-command.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/design-command.ts"],"names":[],"mappings":";;;;AAAA,+BAA+B;AAC/B,mCAAsC;AACtC,mCAAsC;AAEtC,iGAAiG;AACjG,MAAM,aAAa,GAAG,CAAC,IAAc,EAAE,IAAY,EAAE,EAAE;;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEtD,OAAO,EAAE,MAAM,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,MAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,mCAAI,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACtH,CAAC,CAAC;AAEF;;;;GAIG;AACI,MAAM,aAAa,GAAG,CAAO,OAA6D,EAAmB,EAAE;IACpH,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAE3C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAE5D,OAAO,IAAA,mBAAW,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3B,OAAO,IAAA,mBAAW,EAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAClF,CAAC,CAAA,CAAC;AAbW,QAAA,aAAa,iBAaxB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./calls-tsconfig"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./check"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./design-command"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./paths"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./serve"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/index.ts"],"names":[],"mappings":";;;AAAA,2DAAiC;AACjC,kDAAwB;AACxB,2DAAiC;AACjC,kDAAwB;AACxB,kDAAwB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Where every repository keeps its design work. The layout is convention, not configuration. */
|
|
2
|
+
export declare const DESIGN_DIR = ".ethlete/design";
|
|
3
|
+
/** One project's drawing environment: the stylesheets a frame loads, and the markup it puts in `<head>`. */
|
|
4
|
+
export type DesignProject = {
|
|
5
|
+
styles?: string[];
|
|
6
|
+
head?: string;
|
|
7
|
+
};
|
|
8
|
+
export type DesignConfig = {
|
|
9
|
+
port?: number;
|
|
10
|
+
defaultCall?: string;
|
|
11
|
+
projects?: Record<string, DesignProject>;
|
|
12
|
+
};
|
|
13
|
+
export declare const DEFAULT_PORT = 4402;
|
|
14
|
+
/**
|
|
15
|
+
* The package's own `design` folder, which carries the web pages and the authoring API. It sits
|
|
16
|
+
* three levels above this file both in the source tree and in the build output.
|
|
17
|
+
*/
|
|
18
|
+
export declare const assetRoot: () => string;
|
|
19
|
+
export declare const configPathOf: (target: string) => string;
|
|
20
|
+
export declare const callsRootOf: (target: string) => string;
|
|
21
|
+
/** Everything the tool writes for a checkout, so nothing generated lands in tracked files. */
|
|
22
|
+
export declare const workRootOf: (target: string) => string;
|
|
23
|
+
export declare const readConfig: (target: string) => DesignConfig | null;
|
|
24
|
+
export declare const portOf: (config: DesignConfig) => number;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.portOf = exports.readConfig = exports.workRootOf = exports.callsRootOf = exports.configPathOf = exports.assetRoot = exports.DEFAULT_PORT = exports.DESIGN_DIR = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
/** Where every repository keeps its design work. The layout is convention, not configuration. */
|
|
7
|
+
exports.DESIGN_DIR = '.ethlete/design';
|
|
8
|
+
exports.DEFAULT_PORT = 4402;
|
|
9
|
+
/**
|
|
10
|
+
* The package's own `design` folder, which carries the web pages and the authoring API. It sits
|
|
11
|
+
* three levels above this file both in the source tree and in the build output.
|
|
12
|
+
*/
|
|
13
|
+
const assetRoot = () => (0, path_1.resolve)(__dirname, '../../../design');
|
|
14
|
+
exports.assetRoot = assetRoot;
|
|
15
|
+
const configPathOf = (target) => (0, path_1.resolve)(target, exports.DESIGN_DIR, 'config.json');
|
|
16
|
+
exports.configPathOf = configPathOf;
|
|
17
|
+
const callsRootOf = (target) => (0, path_1.resolve)(target, exports.DESIGN_DIR, 'calls');
|
|
18
|
+
exports.callsRootOf = callsRootOf;
|
|
19
|
+
/** Everything the tool writes for a checkout, so nothing generated lands in tracked files. */
|
|
20
|
+
const workRootOf = (target) => (0, path_1.resolve)(target, 'node_modules/.design-explore');
|
|
21
|
+
exports.workRootOf = workRootOf;
|
|
22
|
+
const readConfig = (target) => {
|
|
23
|
+
const path = (0, exports.configPathOf)(target);
|
|
24
|
+
if (!(0, fs_1.existsSync)(path))
|
|
25
|
+
return null;
|
|
26
|
+
return JSON.parse((0, fs_1.readFileSync)(path, 'utf8'));
|
|
27
|
+
};
|
|
28
|
+
exports.readConfig = readConfig;
|
|
29
|
+
const portOf = (config) => Number(process.env['DE_PORT']) || config.port || exports.DEFAULT_PORT;
|
|
30
|
+
exports.portOf = portOf;
|
|
31
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/paths.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAA+B;AAE/B,iGAAiG;AACpF,QAAA,UAAU,GAAG,iBAAiB,CAAC;AAc/B,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC;;;GAGG;AACI,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAA,cAAO,EAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAAxD,QAAA,SAAS,aAA+C;AAE9D,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,MAAM,EAAE,kBAAU,EAAE,aAAa,CAAC,CAAC;AAA9E,QAAA,YAAY,gBAAkE;AAEpF,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,MAAM,EAAE,kBAAU,EAAE,OAAO,CAAC,CAAC;AAAvE,QAAA,WAAW,eAA4D;AAEpF,8FAA8F;AACvF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;AAAjF,QAAA,UAAU,cAAuE;AAEvF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAuB,EAAE;IAChE,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAiB,CAAC;AAChE,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB;AAEK,MAAM,MAAM,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,oBAAY,CAAC;AAAjG,QAAA,MAAM,UAA2F"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Starts the design page for a checkout and keeps it running. The returned exit code is the
|
|
3
|
+
* command's, not the server's: a listening server holds the process open on its own.
|
|
4
|
+
*/
|
|
5
|
+
export declare const serveDesign: (options: {
|
|
6
|
+
target: string;
|
|
7
|
+
}) => Promise<number>;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serveDesign = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const calls_tsconfig_1 = require("./calls-tsconfig");
|
|
8
|
+
const vite_paths_1 = require("./vite-paths");
|
|
9
|
+
const paths_1 = require("./paths");
|
|
10
|
+
const VIRTUAL = 'virtual:design-explore';
|
|
11
|
+
/** What a slug says about which project drew it: its first segment. */
|
|
12
|
+
const projectOf = (slug) => { var _a; return (_a = slug.split('/')[0]) !== null && _a !== void 0 ? _a : ''; };
|
|
13
|
+
const registry = (target, config) => {
|
|
14
|
+
var _a;
|
|
15
|
+
const root = (0, paths_1.callsRootOf)(target);
|
|
16
|
+
const entries = (0, fs_1.globSync)('**/call.ts', { cwd: root })
|
|
17
|
+
.sort()
|
|
18
|
+
.map((file) => [(0, vite_paths_1.callSlugOf)(file), (0, vite_paths_1.fsUrl)((0, path_1.resolve)(root, file))]);
|
|
19
|
+
return `export const calls = {\n${entries
|
|
20
|
+
.map(([slug, url]) => ` ${JSON.stringify(slug)}: () => import(${JSON.stringify(url)}),`)
|
|
21
|
+
.join('\n')}\n};\nexport const defaultCall = ${JSON.stringify((_a = config.defaultCall) !== null && _a !== void 0 ? _a : null)};\n`;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Vite's own tsconfigPaths resolves against the tsconfig nearest the importing file, which is not
|
|
25
|
+
* the one that carries the workspace paths. The aliases are read from the base config instead.
|
|
26
|
+
*/
|
|
27
|
+
const workspaceAliases = (target) => {
|
|
28
|
+
var _a, _b;
|
|
29
|
+
const basePath = (0, path_1.resolve)(target, 'tsconfig.base.json');
|
|
30
|
+
if (!(0, fs_1.existsSync)(basePath))
|
|
31
|
+
return [];
|
|
32
|
+
const base = JSON.parse((0, fs_1.readFileSync)(basePath, 'utf8'));
|
|
33
|
+
const paths = (_b = (_a = base.compilerOptions) === null || _a === void 0 ? void 0 : _a.paths) !== null && _b !== void 0 ? _b : {};
|
|
34
|
+
return Object.entries(paths).flatMap(([key, [mapped]]) => {
|
|
35
|
+
if (!mapped)
|
|
36
|
+
return [];
|
|
37
|
+
return [
|
|
38
|
+
{
|
|
39
|
+
find: (0, vite_paths_1.aliasPattern)(key),
|
|
40
|
+
replacement: key.endsWith('/*') ? `${(0, path_1.resolve)(target, mapped.slice(0, -2))}/` : (0, path_1.resolve)(target, mapped),
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* The stylesheet of every project, each behind its own loader. A frame loads the one its call
|
|
47
|
+
* belongs to: two projects define the same theme variables, so a frame that loaded both would
|
|
48
|
+
* draw under whichever stylesheet came last.
|
|
49
|
+
*/
|
|
50
|
+
const env = (target, config) => {
|
|
51
|
+
var _a;
|
|
52
|
+
const loaders = Object.entries((_a = config.projects) !== null && _a !== void 0 ? _a : {}).map(([name, project]) => {
|
|
53
|
+
var _a;
|
|
54
|
+
return ` ${JSON.stringify(name)}: () => Promise.all([${((_a = project.styles) !== null && _a !== void 0 ? _a : [])
|
|
55
|
+
.map((style) => `import(${JSON.stringify((0, vite_paths_1.fsUrl)((0, path_1.resolve)(target, style)))})`)
|
|
56
|
+
.join(', ')}]),`;
|
|
57
|
+
});
|
|
58
|
+
return (`const envs = {\n${loaders.join('\n')}\n};\n` +
|
|
59
|
+
`export const loadEnv = (project) => (envs[project] ?? (() => Promise.resolve()))();\n`);
|
|
60
|
+
};
|
|
61
|
+
/** Serves the call registry and each project's global stylesheet to the web pages. */
|
|
62
|
+
const designExplore = (target, config) => ({
|
|
63
|
+
name: 'design-explore',
|
|
64
|
+
resolveId: (id) => (id === VIRTUAL || id === `${VIRTUAL}/env` ? `\0${id}` : null),
|
|
65
|
+
load: (id) => {
|
|
66
|
+
if (id === `\0${VIRTUAL}`)
|
|
67
|
+
return registry(target, config);
|
|
68
|
+
if (id === `\0${VIRTUAL}/env`)
|
|
69
|
+
return env(target, config);
|
|
70
|
+
return null;
|
|
71
|
+
},
|
|
72
|
+
transformIndexHtml: {
|
|
73
|
+
order: 'pre',
|
|
74
|
+
handler: (html, ctx) => {
|
|
75
|
+
var _a, _b, _c, _d;
|
|
76
|
+
if (!ctx.path.includes('frame'))
|
|
77
|
+
return html;
|
|
78
|
+
const asked = new URL((_a = ctx.originalUrl) !== null && _a !== void 0 ? _a : ctx.path, 'http://localhost');
|
|
79
|
+
const head = (_d = (_b = config.projects) === null || _b === void 0 ? void 0 : _b[projectOf((_c = asked.searchParams.get('call')) !== null && _c !== void 0 ? _c : '')]) === null || _d === void 0 ? void 0 : _d.head;
|
|
80
|
+
if (!head)
|
|
81
|
+
return html;
|
|
82
|
+
return html.replace('<!--head-->', (0, fs_1.readFileSync)((0, path_1.resolve)(target, head), 'utf8'));
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
/** The registry is built once per load, so a new call folder is invisible until it is invalidated. */
|
|
86
|
+
configureServer: (vite) => {
|
|
87
|
+
const callsRoot = (0, paths_1.callsRootOf)(target);
|
|
88
|
+
const refresh = (file) => {
|
|
89
|
+
if (!(0, vite_paths_1.isCallFile)({ callsRoot, file }))
|
|
90
|
+
return;
|
|
91
|
+
const module = vite.moduleGraph.getModuleById(`\0${VIRTUAL}`);
|
|
92
|
+
if (module)
|
|
93
|
+
vite.moduleGraph.invalidateModule(module);
|
|
94
|
+
vite.ws.send({ type: 'full-reload' });
|
|
95
|
+
};
|
|
96
|
+
vite.watcher.add(callsRoot);
|
|
97
|
+
vite.watcher.on('add', refresh);
|
|
98
|
+
vite.watcher.on('unlink', refresh);
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
/**
|
|
102
|
+
* Starts the design page for a checkout and keeps it running. The returned exit code is the
|
|
103
|
+
* command's, not the server's: a listening server holds the process open on its own.
|
|
104
|
+
*/
|
|
105
|
+
const serveDesign = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
106
|
+
const { target } = options;
|
|
107
|
+
const config = (0, paths_1.readConfig)(target);
|
|
108
|
+
if (!config) {
|
|
109
|
+
console.error(`design-explore: no config at ${(0, paths_1.configPathOf)(target)}`);
|
|
110
|
+
return 1;
|
|
111
|
+
}
|
|
112
|
+
(0, calls_tsconfig_1.writeCallsTsconfig)(target);
|
|
113
|
+
// Vite reads a tsconfig out of the working directory to transpile a call, and the calls sit
|
|
114
|
+
// outside its root. From a directory that holds none, every call compiles to an empty module.
|
|
115
|
+
process.chdir(target);
|
|
116
|
+
const { createServer } = yield import('vite');
|
|
117
|
+
const { default: tailwind } = yield import('@tailwindcss/postcss');
|
|
118
|
+
const here = (0, paths_1.assetRoot)();
|
|
119
|
+
const server = yield createServer({
|
|
120
|
+
configFile: false,
|
|
121
|
+
root: (0, path_1.resolve)(here, 'web'),
|
|
122
|
+
// Every drawing is ruled under Tailwind 4, whatever the checkout installs. The tool brings its
|
|
123
|
+
// own pipeline so no checkout's postcss config reaches a drawing.
|
|
124
|
+
css: { postcss: { plugins: [tailwind()] } },
|
|
125
|
+
cacheDir: (0, path_1.resolve)((0, paths_1.workRootOf)(target), 'vite'),
|
|
126
|
+
resolve: {
|
|
127
|
+
alias: [{ find: /^@design-explore$/, replacement: (0, path_1.resolve)(here, 'define-call.ts') }, ...workspaceAliases(target)],
|
|
128
|
+
},
|
|
129
|
+
plugins: [designExplore(target, config)],
|
|
130
|
+
server: {
|
|
131
|
+
port: (0, paths_1.portOf)(config),
|
|
132
|
+
strictPort: true,
|
|
133
|
+
// The web pages live inside this package, which is outside the checkout it draws. Vite
|
|
134
|
+
// serves neither root unless both are allowed.
|
|
135
|
+
fs: { allow: [target, here] },
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
yield server.listen();
|
|
139
|
+
console.log(`design-explore: drawing ${target}`);
|
|
140
|
+
server.printUrls();
|
|
141
|
+
return 0;
|
|
142
|
+
});
|
|
143
|
+
exports.serveDesign = serveDesign;
|
|
144
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const fsUrl: (absolutePath: string) => string;
|
|
2
|
+
export declare const callSlugOf: (callFile: string) => string;
|
|
3
|
+
export declare const isCallFile: (options: {
|
|
4
|
+
callsRoot: string;
|
|
5
|
+
file: string;
|
|
6
|
+
}) => boolean;
|
|
7
|
+
export declare const aliasPattern: (key: string) => RegExp;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.aliasPattern = exports.isCallFile = exports.callSlugOf = exports.fsUrl = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const slash = (path) => path.replace(/\\/g, '/');
|
|
6
|
+
const fsUrl = (absolutePath) => `/@fs/${slash(absolutePath).replace(/^\//, '')}`;
|
|
7
|
+
exports.fsUrl = fsUrl;
|
|
8
|
+
const callSlugOf = (callFile) => path_1.posix.dirname(slash(callFile));
|
|
9
|
+
exports.callSlugOf = callSlugOf;
|
|
10
|
+
const isCallFile = (options) => slash(options.file).startsWith(slash(options.callsRoot)) && slash(options.file).endsWith('/call.ts');
|
|
11
|
+
exports.isCallFile = isCallFile;
|
|
12
|
+
const escapeRegExp = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
13
|
+
const aliasPattern = (key) => key.endsWith('/*') ? new RegExp(`^${escapeRegExp(key.slice(0, -2))}/`) : new RegExp(`^${escapeRegExp(key)}$`);
|
|
14
|
+
exports.aliasPattern = aliasPattern;
|
|
15
|
+
//# sourceMappingURL=vite-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-paths.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/vite-paths.ts"],"names":[],"mappings":";;;AAAA,+BAA6B;AAE7B,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAElD,MAAM,KAAK,GAAG,CAAC,YAAoB,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;AAAnF,QAAA,KAAK,SAA8E;AAEzF,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,YAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAlE,QAAA,UAAU,cAAwD;AAExE,MAAM,UAAU,GAAG,CAAC,OAA4C,EAAE,EAAE,CACzE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAD1F,QAAA,UAAU,cACgF;AAEvG,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE5E,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CAC1C,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AADnG,QAAA,YAAY,gBACuF"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.doctorCommand = void 0;
|
|
4
4
|
const compose_1 = require("../api/compose");
|
|
5
|
+
const fs_1 = require("fs");
|
|
5
6
|
const path_1 = require("path");
|
|
6
7
|
const load_definitions_1 = require("../api/load-definitions");
|
|
7
8
|
const resolve_checkout_1 = require("../api/resolve-checkout");
|
|
@@ -14,8 +15,20 @@ const describeComposeTool = (composeTools) => {
|
|
|
14
15
|
? { line: `container engine: ${(0, compose_1.composeBinary)(tool.compose).join(' ')}`, problems: [] }
|
|
15
16
|
: { line: undefined, problems: [`No compose tool found. Tried: ${(0, compose_1.composeToolNames)(composeTools).join(', ')}.`] };
|
|
16
17
|
};
|
|
17
|
-
const
|
|
18
|
-
|
|
18
|
+
const loadApis = (root) => {
|
|
19
|
+
try {
|
|
20
|
+
return (0, load_definitions_1.loadApiDefinitions)(root);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
const fileName = load_definitions_1.API_DEFINITIONS_FILE_NAMES.find((candidate) => (0, fs_1.existsSync)((0, path_1.join)(root, candidate)));
|
|
24
|
+
return { found: false, problem: `${fileName} cannot be loaded: ${error.message}` };
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const describeApis = (options) => {
|
|
28
|
+
const { root, apiInvocation, loaded } = options;
|
|
29
|
+
if ('problem' in loaded)
|
|
30
|
+
return { lines: [], problems: [loaded.problem] };
|
|
31
|
+
const { found, apis, fileName } = loaded;
|
|
19
32
|
if (!found)
|
|
20
33
|
return { lines: [], problems: [] };
|
|
21
34
|
const lines = [];
|
|
@@ -36,14 +49,15 @@ const doctorCommand = ({ root, apiInvocation = 'et api', composeTools, }) => {
|
|
|
36
49
|
// A file that exists but cannot be parsed still has to be reported, so this asks whether the file
|
|
37
50
|
// is there rather than whether it could be read.
|
|
38
51
|
const hasConfig = [local_config_1.LOCAL_CONFIG_FILE_NAME, local_config_1.LEGACY_LOCAL_CONFIG_FILE_NAME].some((fileName) => (0, local_config_1.readLocalConfigFile)((0, path_1.join)(root, fileName)).status !== 'absent');
|
|
39
|
-
const
|
|
52
|
+
const loadedApis = loadApis(root);
|
|
53
|
+
const hasApis = loadedApis.found || 'problem' in loadedApis;
|
|
40
54
|
if (!hasConfig && !hasApis) {
|
|
41
55
|
console.log(`Nothing to check: ${root} has no ${local_config_1.LOCAL_CONFIG_FILE_NAME} and no ${load_definitions_1.API_DEFINITIONS_FILE_NAMES[0]}.`);
|
|
42
56
|
return 0;
|
|
43
57
|
}
|
|
44
58
|
const configProblems = (0, diagnose_1.diagnoseLocalConfig)({ root });
|
|
45
59
|
const compose = describeComposeTool(composeTools);
|
|
46
|
-
const apis = describeApis(root, apiInvocation);
|
|
60
|
+
const apis = describeApis({ root, apiInvocation, loaded: loadedApis });
|
|
47
61
|
const problems = [...configProblems, ...compose.problems, ...apis.problems];
|
|
48
62
|
for (const line of [compose.line, ...apis.lines].filter(Boolean)) {
|
|
49
63
|
console.log(` ${line}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/doctor/doctor-command.ts"],"names":[],"mappings":";;;AAAA,4CAAkG;AAClG,+BAA4B;AAC5B,8DAAyF;AACzF,8DAA8E;AAC9E,iDAAyD;AACzD,yDAAoH;AAEpH,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,mBAAmB,GAAG,CAAC,YAA4B,EAAE,EAAE;IAC3D,MAAM,IAAI,GAAG,IAAA,4BAAkB,EAAC,YAAY,CAAC,CAAC;IAE9C,OAAO,IAAI;QACT,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,IAAA,uBAAa,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACtF,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,iCAAiC,IAAA,0BAAgB,EAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACrH,CAAC,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/doctor/doctor-command.ts"],"names":[],"mappings":"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"}
|
package/src/lib/index.d.ts
CHANGED
package/src/lib/index.js
CHANGED
|
@@ -4,6 +4,7 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
tslib_1.__exportStar(require("./api"), exports);
|
|
5
5
|
tslib_1.__exportStar(require("./auth"), exports);
|
|
6
6
|
tslib_1.__exportStar(require("./config"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./design"), exports);
|
|
7
8
|
tslib_1.__exportStar(require("./doctor"), exports);
|
|
8
9
|
tslib_1.__exportStar(require("./invocation"), exports);
|
|
9
10
|
tslib_1.__exportStar(require("./release"), exports);
|