@metaobjectsdev/cli 1.0.13 → 1.1.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/README.md +32 -22
- package/dist/bin/meta.js +14 -2
- package/dist/bin/meta.js.map +1 -1
- package/dist/src/commands/docs.d.ts +1 -14
- package/dist/src/commands/docs.d.ts.map +1 -1
- package/dist/src/commands/docs.js +11 -835
- package/dist/src/commands/docs.js.map +1 -1
- package/dist/src/commands/eject.d.ts +24 -1
- package/dist/src/commands/eject.d.ts.map +1 -1
- package/dist/src/commands/eject.js +240 -69
- package/dist/src/commands/eject.js.map +1 -1
- package/dist/src/commands/gen.d.ts +7 -0
- package/dist/src/commands/gen.d.ts.map +1 -1
- package/dist/src/commands/gen.js +91 -21
- package/dist/src/commands/gen.js.map +1 -1
- package/dist/src/commands/generator.js +2 -2
- package/dist/src/commands/generator.js.map +1 -1
- package/dist/src/commands/init.d.ts +7 -0
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +71 -36
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/migrate.d.ts +1 -1
- package/dist/src/commands/migrate.d.ts.map +1 -1
- package/dist/src/commands/migrate.js +224 -125
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/types.d.ts.map +1 -1
- package/dist/src/commands/types.js +16 -2
- package/dist/src/commands/types.js.map +1 -1
- package/dist/src/commands/upgrade.d.ts.map +1 -1
- package/dist/src/commands/upgrade.js +4 -1
- package/dist/src/commands/upgrade.js.map +1 -1
- package/dist/src/commands/verify.d.ts.map +1 -1
- package/dist/src/commands/verify.js +189 -125
- package/dist/src/commands/verify.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +59 -72
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/agent-context-staleness.d.ts +8 -1
- package/dist/src/lib/agent-context-staleness.d.ts.map +1 -1
- package/dist/src/lib/agent-context-staleness.js +20 -5
- package/dist/src/lib/agent-context-staleness.js.map +1 -1
- package/dist/src/lib/agent-schema.d.ts +9 -0
- package/dist/src/lib/agent-schema.d.ts.map +1 -0
- package/dist/src/lib/agent-schema.js +61 -0
- package/dist/src/lib/agent-schema.js.map +1 -0
- package/dist/src/lib/allow.d.ts +6 -0
- package/dist/src/lib/allow.d.ts.map +1 -1
- package/dist/src/lib/allow.js +49 -5
- package/dist/src/lib/allow.js.map +1 -1
- package/dist/src/lib/anti-patterns.d.ts.map +1 -1
- package/dist/src/lib/anti-patterns.js +4 -2
- package/dist/src/lib/anti-patterns.js.map +1 -1
- package/dist/src/lib/args.d.ts +51 -10
- package/dist/src/lib/args.d.ts.map +1 -1
- package/dist/src/lib/args.js +44 -18
- package/dist/src/lib/args.js.map +1 -1
- package/dist/src/lib/catalog-listing.d.ts +21 -1
- package/dist/src/lib/catalog-listing.d.ts.map +1 -1
- package/dist/src/lib/catalog-listing.js +85 -16
- package/dist/src/lib/catalog-listing.js.map +1 -1
- package/dist/src/lib/catalog.d.ts +30 -0
- package/dist/src/lib/catalog.d.ts.map +1 -1
- package/dist/src/lib/catalog.js +40 -5
- package/dist/src/lib/catalog.js.map +1 -1
- package/dist/src/lib/codegen-drift.d.ts +31 -2
- package/dist/src/lib/codegen-drift.d.ts.map +1 -1
- package/dist/src/lib/codegen-drift.js +109 -4
- package/dist/src/lib/codegen-drift.js.map +1 -1
- package/dist/src/lib/collection-load-options.d.ts +1 -1
- package/dist/src/lib/collection-load-options.d.ts.map +1 -1
- package/dist/src/lib/collection-load-options.js +1 -0
- package/dist/src/lib/collection-load-options.js.map +1 -1
- package/dist/src/lib/config.d.ts +4 -2
- package/dist/src/lib/config.d.ts.map +1 -1
- package/dist/src/lib/config.js +4 -2
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/decimal-precision-advisory.d.ts +10 -0
- package/dist/src/lib/decimal-precision-advisory.d.ts.map +1 -0
- package/dist/src/lib/decimal-precision-advisory.js +34 -0
- package/dist/src/lib/decimal-precision-advisory.js.map +1 -0
- package/dist/src/lib/deprecation-lint.d.ts.map +1 -1
- package/dist/src/lib/deprecation-lint.js +17 -26
- package/dist/src/lib/deprecation-lint.js.map +1 -1
- package/dist/src/lib/docs-removed.d.ts +13 -0
- package/dist/src/lib/docs-removed.d.ts.map +1 -0
- package/dist/src/lib/docs-removed.js +31 -0
- package/dist/src/lib/docs-removed.js.map +1 -0
- package/dist/src/lib/docs-site-eject.d.ts +13 -0
- package/dist/src/lib/docs-site-eject.d.ts.map +1 -0
- package/dist/src/lib/docs-site-eject.js +40 -0
- package/dist/src/lib/docs-site-eject.js.map +1 -0
- package/dist/src/lib/field-lint.d.ts +25 -0
- package/dist/src/lib/field-lint.d.ts.map +1 -0
- package/dist/src/lib/field-lint.js +102 -0
- package/dist/src/lib/field-lint.js.map +1 -0
- package/dist/src/lib/fk-index-advisory.d.ts +1 -2
- package/dist/src/lib/fk-index-advisory.d.ts.map +1 -1
- package/dist/src/lib/fk-index-advisory.js +4 -3
- package/dist/src/lib/fk-index-advisory.js.map +1 -1
- package/dist/src/lib/format.d.ts +7 -0
- package/dist/src/lib/format.d.ts.map +1 -1
- package/dist/src/lib/format.js +13 -0
- package/dist/src/lib/format.js.map +1 -1
- package/dist/src/lib/gen-migrate-advice.d.ts +3 -1
- package/dist/src/lib/gen-migrate-advice.d.ts.map +1 -1
- package/dist/src/lib/gen-migrate-advice.js +3 -4
- package/dist/src/lib/gen-migrate-advice.js.map +1 -1
- package/dist/src/lib/install-set.d.ts +10 -1
- package/dist/src/lib/install-set.d.ts.map +1 -1
- package/dist/src/lib/install-set.js +20 -2
- package/dist/src/lib/install-set.js.map +1 -1
- package/dist/src/lib/load-metaobjects-config.d.ts +13 -11
- package/dist/src/lib/load-metaobjects-config.d.ts.map +1 -1
- package/dist/src/lib/load-metaobjects-config.js +53 -75
- package/dist/src/lib/load-metaobjects-config.js.map +1 -1
- package/dist/src/lib/manifest-ignored-check.d.ts +4 -1
- package/dist/src/lib/manifest-ignored-check.d.ts.map +1 -1
- package/dist/src/lib/manifest-ignored-check.js +9 -4
- package/dist/src/lib/manifest-ignored-check.js.map +1 -1
- package/dist/src/lib/output.d.ts +15 -0
- package/dist/src/lib/output.d.ts.map +1 -1
- package/dist/src/lib/output.js +9 -1
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/payload-field-tree.d.ts +4 -5
- package/dist/src/lib/payload-field-tree.d.ts.map +1 -1
- package/dist/src/lib/payload-field-tree.js +16 -31
- package/dist/src/lib/payload-field-tree.js.map +1 -1
- package/dist/src/lib/requirement-check.d.ts +7 -0
- package/dist/src/lib/requirement-check.d.ts.map +1 -1
- package/dist/src/lib/requirement-check.js +14 -7
- package/dist/src/lib/requirement-check.js.map +1 -1
- package/dist/src/lib/strict-args.d.ts +28 -0
- package/dist/src/lib/strict-args.d.ts.map +1 -0
- package/dist/src/lib/strict-args.js +49 -0
- package/dist/src/lib/strict-args.js.map +1 -0
- package/dist/src/lib/template-eject.d.ts +108 -0
- package/dist/src/lib/template-eject.d.ts.map +1 -0
- package/dist/src/lib/template-eject.js +438 -0
- package/dist/src/lib/template-eject.js.map +1 -0
- package/dist/src/lib/version.d.ts +9 -0
- package/dist/src/lib/version.d.ts.map +1 -1
- package/dist/src/lib/version.js +15 -0
- package/dist/src/lib/version.js.map +1 -1
- package/package.json +10 -10
- package/src/commands/docs.ts +11 -952
- package/src/commands/eject.ts +318 -73
- package/src/commands/gen.ts +94 -22
- package/src/commands/generator.ts +2 -2
- package/src/commands/init.ts +80 -38
- package/src/commands/migrate.ts +248 -117
- package/src/commands/types.ts +18 -2
- package/src/commands/upgrade.ts +5 -1
- package/src/commands/verify.ts +229 -136
- package/src/index.ts +59 -72
- package/src/lib/agent-context-staleness.ts +20 -5
- package/src/lib/agent-schema.ts +74 -0
- package/src/lib/allow.ts +57 -6
- package/src/lib/anti-patterns.ts +4 -2
- package/src/lib/args.ts +83 -28
- package/src/lib/catalog-listing.ts +105 -25
- package/src/lib/catalog.ts +51 -6
- package/src/lib/codegen-drift.ts +138 -3
- package/src/lib/collection-load-options.ts +2 -1
- package/src/lib/config.ts +5 -3
- package/src/lib/decimal-precision-advisory.ts +50 -0
- package/src/lib/deprecation-lint.ts +16 -24
- package/src/lib/docs-removed.ts +41 -0
- package/src/lib/docs-site-eject.ts +48 -0
- package/src/lib/field-lint.ts +122 -0
- package/src/lib/fk-index-advisory.ts +4 -4
- package/src/lib/format.ts +12 -0
- package/src/lib/gen-migrate-advice.ts +6 -4
- package/src/lib/install-set.ts +20 -1
- package/src/lib/load-metaobjects-config.ts +57 -78
- package/src/lib/manifest-ignored-check.ts +14 -10
- package/src/lib/output.ts +18 -1
- package/src/lib/payload-field-tree.ts +18 -35
- package/src/lib/requirement-check.ts +21 -6
- package/src/lib/strict-args.ts +52 -0
- package/src/lib/template-eject.ts +526 -0
- package/src/lib/version.ts +18 -0
- package/dist/src/lib/docs-drift.d.ts +0 -42
- package/dist/src/lib/docs-drift.d.ts.map +0 -1
- package/dist/src/lib/docs-drift.js +0 -264
- package/dist/src/lib/docs-drift.js.map +0 -1
- package/src/lib/docs-drift.ts +0 -312
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
// ADR-0034 Amendment 8 — ejecting a generator hands over ALL of the code that writes its output.
|
|
2
|
+
//
|
|
3
|
+
// A reference generator (`src/reference/<name>.ts`) is the part an adopter decides things in:
|
|
4
|
+
// which nodes get a file, where it lands, in what order. The text of each file is written by
|
|
5
|
+
// the template modules it calls (`src/templates/*.ts`, `src/cube/*`, `src/generators/*`, in the
|
|
6
|
+
// three codegen packages), and those used to stay in the package: an owned `entity` was 223
|
|
7
|
+
// lines over 3,484 packaged ones, and a defect in what it emitted still waited on an upstream
|
|
8
|
+
// release. So eject also copies the TRANSITIVE CLOSURE of those modules into
|
|
9
|
+
// `codegen/templates/`, the way it copies the HTTP adapter into `codegen/runtime/`
|
|
10
|
+
// (runtime-eject.ts), and the owned generator imports them from there.
|
|
11
|
+
//
|
|
12
|
+
// What stays packaged is the ENGINE (`ENGINE_MODULES`): the generator base, the model walks,
|
|
13
|
+
// and the naming and type-mapping tables. A copied module reaches those through the engine
|
|
14
|
+
// entry, `@metaobjectsdev/codegen-ts/engine` (a framework package's own engine module through
|
|
15
|
+
// that package's root). That is the one edit a copy makes: every module specifier is rewritten, and
|
|
16
|
+
// nothing else in the file is touched, so "what did upstream change?" is a diff of two files
|
|
17
|
+
// that differ in their import lines only.
|
|
18
|
+
//
|
|
19
|
+
// ./names.js, ../column-mapper.js an ENGINE module -> "@metaobjectsdev/codegen-ts/engine"
|
|
20
|
+
// ./zod-validators.js, ../cube/x.js an EMIT module -> the copy beside it
|
|
21
|
+
// @metaobjectsdev/codegen-ts/templates/x another package's emit -> the copy beside it
|
|
22
|
+
// ts-poet the package's own Code -> "@metaobjectsdev/codegen-ts/engine"
|
|
23
|
+
//
|
|
24
|
+
// The last row is the 0.21.6 split-tree defect: `Code` objects are recognised by `instanceof`,
|
|
25
|
+
// so a copy must build them with the same ts-poet the engine uses.
|
|
26
|
+
//
|
|
27
|
+
// Imports are found by scanning the leading import block of each module — the only place these
|
|
28
|
+
// files declare a module specifier. A scanner and not a regex over the whole file because the
|
|
29
|
+
// template modules hold text that LOOKS like an import inside their template literals. The
|
|
30
|
+
// scanner is held to the TypeScript compiler's own reading of every closure module in
|
|
31
|
+
// test/template-eject.test.ts.
|
|
32
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
33
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
34
|
+
import { dirname, join, posix, relative, sep } from "node:path";
|
|
35
|
+
import * as coreTpl from "@metaobjectsdev/codegen-ts";
|
|
36
|
+
import { ENGINE_MODULES } from "@metaobjectsdev/codegen-ts/engine";
|
|
37
|
+
import * as reactTpl from "@metaobjectsdev/codegen-ts-react";
|
|
38
|
+
import * as tanstackTpl from "@metaobjectsdev/codegen-ts-tanstack";
|
|
39
|
+
import { compareOwnedCopy } from "./owned-copy.js";
|
|
40
|
+
const SCOPE = "@metaobjectsdev/";
|
|
41
|
+
/** Where the copied template modules land, relative to the project root. */
|
|
42
|
+
export const OWNED_TEMPLATES_DIR = "codegen/templates";
|
|
43
|
+
const OWNED_GENERATORS_DIR = "codegen/generators";
|
|
44
|
+
/** The package that holds the engine. */
|
|
45
|
+
const CORE_PACKAGE = `${SCOPE}codegen-ts`;
|
|
46
|
+
/** The entry an owned copy imports the core engine from, and the ts-poet it shares. */
|
|
47
|
+
const ENGINE_ENTRY = `${CORE_PACKAGE}/engine`;
|
|
48
|
+
/** `@metaobjectsdev/codegen-ts-react` → `codegen-ts-react`, the directory spelling `ENGINE_MODULES` uses. */
|
|
49
|
+
function shortName(pkg) {
|
|
50
|
+
return pkg.startsWith(SCOPE) ? pkg.slice(SCOPE.length) : pkg;
|
|
51
|
+
}
|
|
52
|
+
const IDENT = /[A-Za-z0-9_$]/;
|
|
53
|
+
/**
|
|
54
|
+
* Every module specifier in the leading import block of `source`: `import … from "x"`,
|
|
55
|
+
* `import "x"` and `export … from "x"`, up to the first statement that is none of those.
|
|
56
|
+
*
|
|
57
|
+
* Within that block there are only comments, string literals, braces and identifiers, which
|
|
58
|
+
* is why a scanner this small is sound: no template literal and no regular expression can
|
|
59
|
+
* occur before the first real statement.
|
|
60
|
+
*/
|
|
61
|
+
export function importRefs(source) {
|
|
62
|
+
const refs = [];
|
|
63
|
+
const n = source.length;
|
|
64
|
+
let i = 0;
|
|
65
|
+
const skipTrivia = () => {
|
|
66
|
+
for (;;) {
|
|
67
|
+
const c = source[i];
|
|
68
|
+
if (c === " " || c === "\t" || c === "\n" || c === "\r")
|
|
69
|
+
i++;
|
|
70
|
+
else if (c === "/" && source[i + 1] === "/") {
|
|
71
|
+
while (i < n && source[i] !== "\n")
|
|
72
|
+
i++;
|
|
73
|
+
}
|
|
74
|
+
else if (c === "/" && source[i + 1] === "*") {
|
|
75
|
+
const close = source.indexOf("*/", i + 2);
|
|
76
|
+
i = close === -1 ? n : close + 2;
|
|
77
|
+
}
|
|
78
|
+
else
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const word = () => {
|
|
83
|
+
const from = i;
|
|
84
|
+
while (i < n && IDENT.test(source[i]))
|
|
85
|
+
i++;
|
|
86
|
+
return source.slice(from, i);
|
|
87
|
+
};
|
|
88
|
+
const peekWord = () => {
|
|
89
|
+
const save = i;
|
|
90
|
+
const w = word();
|
|
91
|
+
i = save;
|
|
92
|
+
return w;
|
|
93
|
+
};
|
|
94
|
+
/** Read a quoted string at `i`; record it as a specifier. */
|
|
95
|
+
const specifier = () => {
|
|
96
|
+
const quote = source[i];
|
|
97
|
+
const close = source.indexOf(quote, i + 1);
|
|
98
|
+
if (close === -1)
|
|
99
|
+
throw new Error("unterminated module specifier");
|
|
100
|
+
refs.push({ spec: source.slice(i + 1, close), start: i + 1, end: close });
|
|
101
|
+
i = close + 1;
|
|
102
|
+
};
|
|
103
|
+
const endStatement = () => {
|
|
104
|
+
skipTrivia();
|
|
105
|
+
if (source[i] === ";")
|
|
106
|
+
i++;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* After `import` / `export`: skip the clause to its `from` and read the specifier.
|
|
110
|
+
* Returns false when the statement has none (`export const …`, `export { a };`).
|
|
111
|
+
*/
|
|
112
|
+
const clause = () => {
|
|
113
|
+
let depth = 0;
|
|
114
|
+
for (;;) {
|
|
115
|
+
skipTrivia();
|
|
116
|
+
if (i >= n)
|
|
117
|
+
return false;
|
|
118
|
+
const c = source[i];
|
|
119
|
+
if (c === '"' || c === "'") {
|
|
120
|
+
specifier(); // `import "x"` — a bare side-effect import
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
if (c === "{") {
|
|
124
|
+
depth++;
|
|
125
|
+
i++;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (c === "}") {
|
|
129
|
+
depth--;
|
|
130
|
+
i++;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (c === "," || c === "*" || c === "=") {
|
|
134
|
+
i++;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (c === ";")
|
|
138
|
+
return false;
|
|
139
|
+
if (IDENT.test(c)) {
|
|
140
|
+
const w = word();
|
|
141
|
+
if (w === "from" && depth === 0) {
|
|
142
|
+
skipTrivia();
|
|
143
|
+
if (source[i] === '"' || source[i] === "'") {
|
|
144
|
+
specifier();
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
for (;;) {
|
|
155
|
+
skipTrivia();
|
|
156
|
+
const w = peekWord();
|
|
157
|
+
if (w === "import") {
|
|
158
|
+
i += w.length;
|
|
159
|
+
// `import("x")` and `import.meta` are expressions, which is the end of the block.
|
|
160
|
+
skipTrivia();
|
|
161
|
+
if (source[i] === "(" || source[i] === ".")
|
|
162
|
+
return refs;
|
|
163
|
+
if (!clause())
|
|
164
|
+
return refs;
|
|
165
|
+
endStatement();
|
|
166
|
+
}
|
|
167
|
+
else if (w === "export") {
|
|
168
|
+
i += w.length;
|
|
169
|
+
skipTrivia();
|
|
170
|
+
const next = peekWord();
|
|
171
|
+
if (next === "type")
|
|
172
|
+
i += next.length;
|
|
173
|
+
skipTrivia();
|
|
174
|
+
if (source[i] !== "*" && source[i] !== "{")
|
|
175
|
+
return refs;
|
|
176
|
+
const save = refs.length;
|
|
177
|
+
if (!clause() || refs.length === save)
|
|
178
|
+
return refs;
|
|
179
|
+
endStatement();
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
return refs;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/** `source` with each specifier in `refs` replaced by `replace(spec)` — nothing else is touched. */
|
|
187
|
+
function rewriteImports(source, refs, replace) {
|
|
188
|
+
let out = source;
|
|
189
|
+
for (const r of [...refs].sort((a, b) => b.start - a.start)) {
|
|
190
|
+
out = out.slice(0, r.start) + replace(r.spec) + out.slice(r.end);
|
|
191
|
+
}
|
|
192
|
+
return out;
|
|
193
|
+
}
|
|
194
|
+
/** The spelling `ENGINE_MODULES` uses: `codegen-ts/src/templates/find-inbound.ts`. */
|
|
195
|
+
function keyOf(m) {
|
|
196
|
+
return `${shortName(m.pkg.name)}/src/${m.rel}`;
|
|
197
|
+
}
|
|
198
|
+
const ENGINE = new Set(ENGINE_MODULES);
|
|
199
|
+
/** Where a template module's copy lands: `templates/x.ts` → `codegen/templates/x.ts`, `cube/y.ts` → `codegen/templates/cube/y.ts`. */
|
|
200
|
+
function destinationOf(m) {
|
|
201
|
+
const rel = m.rel.startsWith("templates/") ? m.rel.slice("templates/".length) : m.rel;
|
|
202
|
+
return `${OWNED_TEMPLATES_DIR}/${rel}`;
|
|
203
|
+
}
|
|
204
|
+
function sourceOf(m) {
|
|
205
|
+
return readFileSync(posix.join(m.pkg.srcRoot.split("\\").join("/"), m.rel), "utf8");
|
|
206
|
+
}
|
|
207
|
+
/** The module `spec` names, imported from `from`, or undefined when it is not one of ours. */
|
|
208
|
+
function resolveModule(packages, from, spec) {
|
|
209
|
+
const find = (pkg, rel) => {
|
|
210
|
+
for (const candidate of [rel.replace(/\.js$/, ".ts"), `${rel}.ts`, `${rel}/index.ts`]) {
|
|
211
|
+
if (existsSync(posix.join(pkg.srcRoot.split("\\").join("/"), candidate)))
|
|
212
|
+
return { pkg, rel: candidate };
|
|
213
|
+
}
|
|
214
|
+
throw new Error(`${keyOf(from)} imports "${spec}", which is not a module of ${pkg.name}. ` +
|
|
215
|
+
"Only TypeScript modules can be handed over with a generator.");
|
|
216
|
+
};
|
|
217
|
+
if (spec.startsWith("./") || spec.startsWith("../")) {
|
|
218
|
+
return find(from.pkg, posix.normalize(posix.join(posix.dirname(from.rel), spec)));
|
|
219
|
+
}
|
|
220
|
+
// `@metaobjectsdev/codegen-ts/templates/x` — another codegen package's emit module, by path.
|
|
221
|
+
const sub = /^(@metaobjectsdev\/[\w-]+)\/(templates\/[\w-]+)$/.exec(spec);
|
|
222
|
+
if (sub !== null) {
|
|
223
|
+
const pkg = packages.find((p) => p.name === sub[1]);
|
|
224
|
+
if (pkg !== undefined)
|
|
225
|
+
return find(pkg, `${sub[2]}.ts`);
|
|
226
|
+
}
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* The owned form of one reference generator: the generator file and every template module it
|
|
231
|
+
* reaches, each with its module specifiers pointed at the project.
|
|
232
|
+
*
|
|
233
|
+
* `pkg` is the package the reference ships in; `packages` is every codegen package, since a
|
|
234
|
+
* client-tier reference reaches template modules in the core one.
|
|
235
|
+
*/
|
|
236
|
+
export function templateClosure(packages, pkg, name,
|
|
237
|
+
/** The modules that stay packaged. The tests hand in a smaller set than the shipped one. */
|
|
238
|
+
engine = ENGINE) {
|
|
239
|
+
const reference = { pkg, rel: `reference/${name}.ts` };
|
|
240
|
+
const destination = (m) => m.rel === reference.rel && m.pkg === reference.pkg ? `${OWNED_GENERATORS_DIR}/${name}.ts` : destinationOf(m);
|
|
241
|
+
// Breadth-first over the specifiers: an engine module ends a path, anything else is copied.
|
|
242
|
+
const members = new Map([[keyOf(reference), reference]]);
|
|
243
|
+
const queue = [reference];
|
|
244
|
+
while (queue.length > 0) {
|
|
245
|
+
const module = queue.shift();
|
|
246
|
+
for (const ref of importRefs(sourceOf(module))) {
|
|
247
|
+
const target = resolveModule(packages, module, ref.spec);
|
|
248
|
+
if (target === undefined || engine.has(keyOf(target)) || members.has(keyOf(target)))
|
|
249
|
+
continue;
|
|
250
|
+
members.set(keyOf(target), target);
|
|
251
|
+
queue.push(target);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Two packaged modules must not land on one path; the layout drops a directory level.
|
|
255
|
+
const owners = new Map();
|
|
256
|
+
for (const [key, m] of members) {
|
|
257
|
+
const dest = destination(m);
|
|
258
|
+
const other = owners.get(dest);
|
|
259
|
+
if (other !== undefined)
|
|
260
|
+
throw new Error(`${other} and ${key} would both be copied to ${dest}.`);
|
|
261
|
+
owners.set(dest, key);
|
|
262
|
+
}
|
|
263
|
+
const imported = new Set();
|
|
264
|
+
const render = (m) => {
|
|
265
|
+
const source = sourceOf(m);
|
|
266
|
+
const here = destination(m);
|
|
267
|
+
const content = rewriteImports(source, importRefs(source), (spec) => {
|
|
268
|
+
const target = resolveModule(packages, m, spec);
|
|
269
|
+
let next = spec;
|
|
270
|
+
if (target !== undefined) {
|
|
271
|
+
next = engine.has(keyOf(target))
|
|
272
|
+
? engineEntryOf(target.pkg.name)
|
|
273
|
+
: relativeSpecifier(here, destination(target));
|
|
274
|
+
}
|
|
275
|
+
else if (spec === "ts-poet") {
|
|
276
|
+
next = ENGINE_ENTRY;
|
|
277
|
+
}
|
|
278
|
+
if (!next.startsWith(".") && !next.startsWith("node:"))
|
|
279
|
+
imported.add(packageOfSpecifier(next));
|
|
280
|
+
return next;
|
|
281
|
+
});
|
|
282
|
+
return { path: here, content, origin: keyOf(m) };
|
|
283
|
+
};
|
|
284
|
+
const rendered = [...members.values()].map(render);
|
|
285
|
+
const generator = rendered.find((f) => f.path === `${OWNED_GENERATORS_DIR}/${name}.ts`);
|
|
286
|
+
const templates = rendered.filter((f) => f !== generator).sort((a, b) => a.path.localeCompare(b.path));
|
|
287
|
+
return { generator, templates, packages: [...imported].sort() };
|
|
288
|
+
}
|
|
289
|
+
/** Where a copy imports an engine module of `pkg` from: the core engine entry, or a framework package's root. */
|
|
290
|
+
function engineEntryOf(pkg) {
|
|
291
|
+
return pkg === CORE_PACKAGE ? ENGINE_ENTRY : pkg;
|
|
292
|
+
}
|
|
293
|
+
/** `./x.js` / `../y/z.js` from the file at `from` to the one at `to`, both project-relative. */
|
|
294
|
+
function relativeSpecifier(from, to) {
|
|
295
|
+
const rel = posix.relative(posix.dirname(from), to).replace(/\.ts$/, ".js");
|
|
296
|
+
return rel.startsWith(".") ? rel : `./${rel}`;
|
|
297
|
+
}
|
|
298
|
+
/** `@scope/name/sub` → `@scope/name`; `name/sub` → `name`. */
|
|
299
|
+
function packageOfSpecifier(spec) {
|
|
300
|
+
const parts = spec.split("/");
|
|
301
|
+
return spec.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Write the template modules of `closures` into `<cwd>/codegen/templates/`. Never overwrites a
|
|
305
|
+
* file without `force`, the rule the generator copy keeps: two generators that call the same
|
|
306
|
+
* module share one copy, and re-running eject fills in what is missing without touching what
|
|
307
|
+
* the adopter has changed.
|
|
308
|
+
*/
|
|
309
|
+
export async function ejectTemplates(cwd, closures, force) {
|
|
310
|
+
const wanted = new Map();
|
|
311
|
+
for (const closure of closures) {
|
|
312
|
+
for (const file of closure.templates) {
|
|
313
|
+
const seen = wanted.get(file.path);
|
|
314
|
+
// One packaged module, one copy: the rewrite depends on the module alone.
|
|
315
|
+
if (seen !== undefined && seen.content !== file.content) {
|
|
316
|
+
throw new Error(`${file.path} would be written with two different contents (${seen.origin}, ${file.origin}).`);
|
|
317
|
+
}
|
|
318
|
+
wanted.set(file.path, file);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
const files = [];
|
|
322
|
+
for (const file of [...wanted.values()].sort((a, b) => a.path.localeCompare(b.path))) {
|
|
323
|
+
const abs = join(cwd, file.path);
|
|
324
|
+
const existing = existsSync(abs) ? await readFile(abs, "utf8") : undefined;
|
|
325
|
+
const comparison = existing === undefined ? undefined : await compareOwnedCopy(existing, file.content);
|
|
326
|
+
if (existing !== undefined && !force) {
|
|
327
|
+
files.push({ path: file.path, status: "preserved", comparison });
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
await mkdir(dirname(abs), { recursive: true });
|
|
331
|
+
await writeFile(abs, file.content, "utf8");
|
|
332
|
+
files.push({ path: file.path, status: existing === undefined ? "created" : "replaced", comparison });
|
|
333
|
+
}
|
|
334
|
+
return { files };
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* True when a kept generator file calls none of the template modules its reference now calls.
|
|
338
|
+
* Such a copy predates the hand-over (1.1): it still imports the emit code from the package,
|
|
339
|
+
* so copying the modules beside it would be dead code. Re-ejecting it with `--force` is the
|
|
340
|
+
* way to take the new shape.
|
|
341
|
+
*/
|
|
342
|
+
export function predatesTemplateHandOver(existing, closure) {
|
|
343
|
+
if (closure.templates.length === 0)
|
|
344
|
+
return false;
|
|
345
|
+
const called = importRefs(closure.generator.content)
|
|
346
|
+
.map((r) => r.spec)
|
|
347
|
+
.filter((spec) => spec.startsWith("."));
|
|
348
|
+
return called.length > 0 && !called.some((spec) => existing.includes(`"${spec}"`));
|
|
349
|
+
}
|
|
350
|
+
function listTs(dir) {
|
|
351
|
+
const out = [];
|
|
352
|
+
for (const entry of readdirSync(dir)) {
|
|
353
|
+
const abs = join(dir, entry);
|
|
354
|
+
if (statSync(abs).isDirectory())
|
|
355
|
+
out.push(...listTs(abs));
|
|
356
|
+
else if (entry.endsWith(".ts"))
|
|
357
|
+
out.push(abs);
|
|
358
|
+
}
|
|
359
|
+
return out;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Every file under `<cwd>/codegen/templates/`, compared to what the installed package would
|
|
363
|
+
* write there today. Empty when the project owns no template copy. `not-in-package` is a file
|
|
364
|
+
* the package would not write: your own addition, or one upstream deleted or renamed.
|
|
365
|
+
*/
|
|
366
|
+
export async function templateCopyStatus(cwd, upstream) {
|
|
367
|
+
const root = join(cwd, OWNED_TEMPLATES_DIR);
|
|
368
|
+
if (!existsSync(root))
|
|
369
|
+
return [];
|
|
370
|
+
const rows = [];
|
|
371
|
+
for (const abs of listTs(root).sort()) {
|
|
372
|
+
const path = relative(cwd, abs).split(sep).join("/");
|
|
373
|
+
const packaged = upstream.get(path);
|
|
374
|
+
if (packaged === undefined) {
|
|
375
|
+
rows.push({ path, verdict: "not-in-package", localOnly: 0, referenceOnly: 0 });
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
const cmp = await compareOwnedCopy(readFileSync(abs, "utf8"), packaged.content);
|
|
379
|
+
rows.push({ path, verdict: cmp.verdict, localOnly: cmp.localOnly, referenceOnly: cmp.referenceOnly, origin: packaged.origin });
|
|
380
|
+
}
|
|
381
|
+
return rows;
|
|
382
|
+
}
|
|
383
|
+
/** The command that shows exactly how one owned template file differs from the installed package's. */
|
|
384
|
+
export function templateDiffCommand(row) {
|
|
385
|
+
if (row.origin === undefined)
|
|
386
|
+
return undefined;
|
|
387
|
+
const [short, ...rest] = row.origin.split("/");
|
|
388
|
+
return `diff -u node_modules/${SCOPE}${short}/${rest.join("/")} ${row.path}`;
|
|
389
|
+
}
|
|
390
|
+
let installed;
|
|
391
|
+
/** The three codegen packages, as installed: their shipped `src/` and the generators each ships a reference for. */
|
|
392
|
+
function installedSources() {
|
|
393
|
+
installed ??= [
|
|
394
|
+
[`${SCOPE}codegen-ts`, coreTpl],
|
|
395
|
+
[`${SCOPE}codegen-ts-react`, reactTpl],
|
|
396
|
+
[`${SCOPE}codegen-ts-tanstack`, tanstackTpl],
|
|
397
|
+
].map(([name, tpl]) => {
|
|
398
|
+
const t = tpl;
|
|
399
|
+
return { pkg: { name: name, srcRoot: dirname(t.resolveReferenceRoot()) }, names: t.REFERENCE_GENERATOR_NAMES };
|
|
400
|
+
});
|
|
401
|
+
return installed;
|
|
402
|
+
}
|
|
403
|
+
/** The three codegen packages' shipped source — where the template modules a reference calls live. */
|
|
404
|
+
export function codegenPackages() {
|
|
405
|
+
return installedSources().map((s) => s.pkg);
|
|
406
|
+
}
|
|
407
|
+
const closures = new Map();
|
|
408
|
+
/**
|
|
409
|
+
* The owned form of one reference generator, from the installed packages: the generator file
|
|
410
|
+
* and the template modules it calls, with their module specifiers pointed at the project.
|
|
411
|
+
* Memoized — the installed source does not change under a running command.
|
|
412
|
+
*/
|
|
413
|
+
export function closureOf(name) {
|
|
414
|
+
let closure = closures.get(name);
|
|
415
|
+
if (closure === undefined) {
|
|
416
|
+
const sources = installedSources();
|
|
417
|
+
const source = sources.find((s) => s.names.includes(name));
|
|
418
|
+
if (source === undefined)
|
|
419
|
+
throw new Error(`no reference generator named "${name}".`);
|
|
420
|
+
closure = templateClosure(sources.map((s) => s.pkg), source.pkg, name);
|
|
421
|
+
closures.set(name, closure);
|
|
422
|
+
}
|
|
423
|
+
return closure;
|
|
424
|
+
}
|
|
425
|
+
/** Every ejectable name, across the three packages, in registry order. */
|
|
426
|
+
export function referenceNames() {
|
|
427
|
+
return installedSources().flatMap((s) => s.names);
|
|
428
|
+
}
|
|
429
|
+
/** Every file `meta eject` would write for a template module, across every ejectable generator. */
|
|
430
|
+
export function packagedTemplates() {
|
|
431
|
+
const all = new Map();
|
|
432
|
+
for (const name of referenceNames()) {
|
|
433
|
+
for (const file of closureOf(name).templates)
|
|
434
|
+
all.set(file.path, file);
|
|
435
|
+
}
|
|
436
|
+
return all;
|
|
437
|
+
}
|
|
438
|
+
//# sourceMappingURL=template-eject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-eject.js","sourceRoot":"","sources":["../../../src/lib/template-eject.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,4 +4,13 @@
|
|
|
4
4
|
* "0.0.0" if not found.
|
|
5
5
|
*/
|
|
6
6
|
export declare function cliVersion(): string;
|
|
7
|
+
/**
|
|
8
|
+
* True when `version` carries a semver prerelease identifier (`-rc.4`, `-alpha.1`,
|
|
9
|
+
* `-beta`, `-SNAPSHOT`, …) — the same shape `tools/prerelease/detect-prerelease-pins.sh`'s
|
|
10
|
+
* `PRERELEASE_RE` matches. Used to warn when a pre-release CLI is about to stamp its own
|
|
11
|
+
* version into committed state (`.metaobjects/.agent-context.json`'s `generatedBy`),
|
|
12
|
+
* which that detector now also flags on the tree side.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isPrereleaseVersion(version: string): boolean;
|
|
15
|
+
export declare function isVersionFlag(arg: string | undefined): boolean;
|
|
7
16
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/lib/version.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAiBnC"}
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/lib/version.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAiBnC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5D;AAKD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE9D"}
|
package/dist/src/lib/version.js
CHANGED
|
@@ -27,4 +27,19 @@ export function cliVersion() {
|
|
|
27
27
|
}
|
|
28
28
|
return "0.0.0";
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* True when `version` carries a semver prerelease identifier (`-rc.4`, `-alpha.1`,
|
|
32
|
+
* `-beta`, `-SNAPSHOT`, …) — the same shape `tools/prerelease/detect-prerelease-pins.sh`'s
|
|
33
|
+
* `PRERELEASE_RE` matches. Used to warn when a pre-release CLI is about to stamp its own
|
|
34
|
+
* version into committed state (`.metaobjects/.agent-context.json`'s `generatedBy`),
|
|
35
|
+
* which that detector now also flags on the tree side.
|
|
36
|
+
*/
|
|
37
|
+
export function isPrereleaseVersion(version) {
|
|
38
|
+
return /^\d+\.\d+\.\d+-[0-9A-Za-z.-]+$/.test(version.trim());
|
|
39
|
+
}
|
|
40
|
+
/** The three spellings that print the bare version: `--version`, `-v` and `-V`. */
|
|
41
|
+
const VERSION_FLAGS = ["--version", "-v", "-V"];
|
|
42
|
+
export function isVersionFlag(arg) {
|
|
43
|
+
return arg !== undefined && VERSION_FLAGS.includes(arg);
|
|
44
|
+
}
|
|
30
45
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/lib/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAwC,CAAC;gBAC/F,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,IAAI,GAAG,CAAC,OAAO;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;YAC5E,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/lib/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAwC,CAAC;gBAC/F,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,IAAI,GAAG,CAAC,OAAO;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;YAC5E,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,mFAAmF;AACnF,MAAM,aAAa,GAAsB,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEnE,MAAM,UAAU,aAAa,CAAC,GAAuB;IACnD,OAAO,GAAG,KAAK,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaobjectsdev/cli",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "CLI for MetaObjects: scaffold, codegen, migrate, and drift-detection commands.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -51,15 +51,15 @@
|
|
|
51
51
|
"@biomejs/js-api": "^0.7.0",
|
|
52
52
|
"@biomejs/wasm-nodejs": "^1.9.4",
|
|
53
53
|
"@libsql/kysely-libsql": "^0.4.0",
|
|
54
|
-
"@metaobjectsdev/codegen-ts": "1.0
|
|
55
|
-
"@metaobjectsdev/codegen-ts-react": "1.0
|
|
56
|
-
"@metaobjectsdev/codegen-ts-tanstack": "1.0
|
|
57
|
-
"@metaobjectsdev/docs-site": "1.0
|
|
58
|
-
"@metaobjectsdev/metadata": "1.0
|
|
59
|
-
"@metaobjectsdev/migrate-ts": "1.0
|
|
60
|
-
"@metaobjectsdev/render": "1.0
|
|
61
|
-
"@metaobjectsdev/runtime-ts": "1.0
|
|
62
|
-
"@metaobjectsdev/sdk": "1.0
|
|
54
|
+
"@metaobjectsdev/codegen-ts": "1.1.0",
|
|
55
|
+
"@metaobjectsdev/codegen-ts-react": "1.1.0",
|
|
56
|
+
"@metaobjectsdev/codegen-ts-tanstack": "1.1.0",
|
|
57
|
+
"@metaobjectsdev/docs-site": "1.1.0",
|
|
58
|
+
"@metaobjectsdev/metadata": "1.1.0",
|
|
59
|
+
"@metaobjectsdev/migrate-ts": "1.1.0",
|
|
60
|
+
"@metaobjectsdev/render": "1.1.0",
|
|
61
|
+
"@metaobjectsdev/runtime-ts": "1.1.0",
|
|
62
|
+
"@metaobjectsdev/sdk": "1.1.0",
|
|
63
63
|
"@toon-format/toon": "^2.3.0",
|
|
64
64
|
"jiti": "^2.4.0"
|
|
65
65
|
},
|