@zmdb/cli 1.0.0-beta.1
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/LICENSE +674 -0
- package/README.md +19 -0
- package/dist/__fixtures__/http-client/src/contract.d.ts +38 -0
- package/dist/__fixtures__/http-client/src/contract.d.ts.map +1 -0
- package/dist/__fixtures__/http-client/src/contract.js +121 -0
- package/dist/__fixtures__/http-client/src/contract.js.map +1 -0
- package/dist/__fixtures__/http-client/src/models.d.ts +11 -0
- package/dist/__fixtures__/http-client/src/models.d.ts.map +1 -0
- package/dist/__fixtures__/http-client/src/models.js +2 -0
- package/dist/__fixtures__/http-client/src/models.js.map +1 -0
- package/dist/__fixtures__/http-client/src/schema.d.ts +4 -0
- package/dist/__fixtures__/http-client/src/schema.d.ts.map +1 -0
- package/dist/__fixtures__/http-client/src/schema.js +2 -0
- package/dist/__fixtures__/http-client/src/schema.js.map +1 -0
- package/dist/__fixtures__/http-client/src/unrelated.d.ts +2 -0
- package/dist/__fixtures__/http-client/src/unrelated.d.ts.map +1 -0
- package/dist/__fixtures__/http-client/src/unrelated.js +2 -0
- package/dist/__fixtures__/http-client/src/unrelated.js.map +1 -0
- package/dist/__fixtures__/http-client/zmdb.config.d.ts +16 -0
- package/dist/__fixtures__/http-client/zmdb.config.d.ts.map +1 -0
- package/dist/__fixtures__/http-client/zmdb.config.js +12 -0
- package/dist/__fixtures__/http-client/zmdb.config.js.map +1 -0
- package/dist/__fixtures__/project/src/schema.d.ts +6 -0
- package/dist/__fixtures__/project/src/schema.d.ts.map +1 -0
- package/dist/__fixtures__/project/src/schema.js +2 -0
- package/dist/__fixtures__/project/src/schema.js.map +1 -0
- package/dist/__fixtures__/project/zmdb.config.d.ts +22 -0
- package/dist/__fixtures__/project/zmdb.config.d.ts.map +1 -0
- package/dist/__fixtures__/project/zmdb.config.js +55 -0
- package/dist/__fixtures__/project/zmdb.config.js.map +1 -0
- package/dist/application-loader.d.ts +4 -0
- package/dist/application-loader.d.ts.map +1 -0
- package/dist/application-loader.js +102 -0
- package/dist/application-loader.js.map +1 -0
- package/dist/args.d.ts +23 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +353 -0
- package/dist/args.js.map +1 -0
- package/dist/atomic.d.ts +13 -0
- package/dist/atomic.d.ts.map +1 -0
- package/dist/atomic.js +28 -0
- package/dist/atomic.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +4 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/check.d.ts +5 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +7 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/client.d.ts +38 -0
- package/dist/commands/client.d.ts.map +1 -0
- package/dist/commands/client.js +347 -0
- package/dist/commands/client.js.map +1 -0
- package/dist/commands/codegen.d.ts +9 -0
- package/dist/commands/codegen.d.ts.map +1 -0
- package/dist/commands/codegen.js +56 -0
- package/dist/commands/codegen.js.map +1 -0
- package/dist/commands/embed.d.ts +8 -0
- package/dist/commands/embed.d.ts.map +1 -0
- package/dist/commands/embed.js +17 -0
- package/dist/commands/embed.js.map +1 -0
- package/dist/commands/export.d.ts +5 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +6 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/generate.d.ts +5 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +6 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/migrate.d.ts +9 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +18 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/new.d.ts +4 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +35 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/pull.d.ts +5 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +14 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/push.d.ts +6 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +11 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/studio.d.ts +31 -0
- package/dist/commands/studio.d.ts.map +1 -0
- package/dist/commands/studio.js +154 -0
- package/dist/commands/studio.js.map +1 -0
- package/dist/commands/upgrade.d.ts +5 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +11 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/database.d.ts +4 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +8 -0
- package/dist/database.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +20 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +626 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle.d.ts +6 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +75 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/migration-project.d.ts +14 -0
- package/dist/migration-project.d.ts.map +1 -0
- package/dist/migration-project.js +74 -0
- package/dist/migration-project.js.map +1 -0
- package/dist/output.d.ts +27 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +60 -0
- package/dist/output.js.map +1 -0
- package/dist/repl.d.ts +48 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +265 -0
- package/dist/repl.js.map +1 -0
- package/dist/scaffold.d.ts +28 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +414 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/studio/index.d.ts +20 -0
- package/dist/studio/index.d.ts.map +1 -0
- package/dist/studio/index.js +607 -0
- package/dist/studio/index.js.map +1 -0
- package/dist/templates/command.d.ts +3 -0
- package/dist/templates/command.d.ts.map +1 -0
- package/dist/templates/command.js +65 -0
- package/dist/templates/command.js.map +1 -0
- package/dist/templates/controller.d.ts +3 -0
- package/dist/templates/controller.d.ts.map +1 -0
- package/dist/templates/controller.js +41 -0
- package/dist/templates/controller.js.map +1 -0
- package/dist/templates/index.d.ts +4 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +18 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/module.d.ts +3 -0
- package/dist/templates/module.d.ts.map +1 -0
- package/dist/templates/module.js +41 -0
- package/dist/templates/module.js.map +1 -0
- package/dist/templates/project.d.ts +3 -0
- package/dist/templates/project.d.ts.map +1 -0
- package/dist/templates/project.js +280 -0
- package/dist/templates/project.js.map +1 -0
- package/dist/templates/repository.d.ts +3 -0
- package/dist/templates/repository.d.ts.map +1 -0
- package/dist/templates/repository.js +66 -0
- package/dist/templates/repository.js.map +1 -0
- package/dist/templates/schema.d.ts +3 -0
- package/dist/templates/schema.d.ts.map +1 -0
- package/dist/templates/schema.js +36 -0
- package/dist/templates/schema.js.map +1 -0
- package/dist/templates/types.d.ts +25 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/templates/types.js +17 -0
- package/dist/templates/types.js.map +1 -0
- package/package.json +72 -0
- package/src/__fixtures__/http-client/package.json +5 -0
- package/src/__fixtures__/http-client/src/contract.ts +85 -0
- package/src/__fixtures__/http-client/src/models.ts +12 -0
- package/src/__fixtures__/http-client/src/schema.ts +3 -0
- package/src/__fixtures__/http-client/src/unrelated.ts +1 -0
- package/src/__fixtures__/http-client/tsconfig.json +17 -0
- package/src/__fixtures__/http-client/zmdb.config.ts +12 -0
- package/src/__fixtures__/project/package.json +5 -0
- package/src/__fixtures__/project/src/schema.ts +6 -0
- package/src/__fixtures__/project/tsconfig.json +24 -0
- package/src/__fixtures__/project/zmdb.config.ts +57 -0
- package/src/application-loader.ts +108 -0
- package/src/args.ts +391 -0
- package/src/atomic.ts +43 -0
- package/src/bin.ts +5 -0
- package/src/commands/check.ts +11 -0
- package/src/commands/client.ts +415 -0
- package/src/commands/codegen.ts +73 -0
- package/src/commands/embed.ts +36 -0
- package/src/commands/export.ts +10 -0
- package/src/commands/generate.ts +14 -0
- package/src/commands/migrate.ts +38 -0
- package/src/commands/new.ts +48 -0
- package/src/commands/pull.ts +32 -0
- package/src/commands/push.ts +21 -0
- package/src/commands/studio.ts +200 -0
- package/src/commands/upgrade.ts +14 -0
- package/src/database.ts +9 -0
- package/src/errors.ts +19 -0
- package/src/index.ts +710 -0
- package/src/lifecycle.ts +73 -0
- package/src/migration-project.ts +91 -0
- package/src/output.ts +77 -0
- package/src/repl.ts +328 -0
- package/src/scaffold.ts +485 -0
- package/src/studio/index.ts +674 -0
- package/src/templates/command.ts +66 -0
- package/src/templates/controller.ts +42 -0
- package/src/templates/index.ts +29 -0
- package/src/templates/module.ts +42 -0
- package/src/templates/project.ts +281 -0
- package/src/templates/repository.ts +67 -0
- package/src/templates/schema.ts +37 -0
- package/src/templates/types.ts +46 -0
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { readFile, watch } from 'node:fs/promises';
|
|
3
|
+
import { registerHooks } from 'node:module';
|
|
4
|
+
import { dirname, resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
6
|
+
import { ReflectSession } from '@zmdb/compiler/reflect';
|
|
7
|
+
import { compileHttpContracts, generateHttpClient } from '@zmdb/web/contract/compiler';
|
|
8
|
+
import { toOpenApi } from '@zmdb/web/openapi';
|
|
9
|
+
import { writeTextAtomically } from '../atomic.js';
|
|
10
|
+
import { CliInvocationError } from '../errors.js';
|
|
11
|
+
const GENERATION_QUERY = 'zmdb-http-generation';
|
|
12
|
+
const RELATIVE_SPECIFIER = /^\.{1,2}\//u;
|
|
13
|
+
const TYPESCRIPT_SOURCE = /\.[cm]?tsx?$/u;
|
|
14
|
+
const FORMAT_OPTIONS = {
|
|
15
|
+
arrowParens: 'avoid',
|
|
16
|
+
bracketSpacing: true,
|
|
17
|
+
endOfLine: 'lf',
|
|
18
|
+
insertFinalNewline: true,
|
|
19
|
+
objectWrap: 'preserve',
|
|
20
|
+
printWidth: 120,
|
|
21
|
+
quoteProps: 'as-needed',
|
|
22
|
+
semi: true,
|
|
23
|
+
singleQuote: true,
|
|
24
|
+
sortImports: true,
|
|
25
|
+
sortPackageJson: true,
|
|
26
|
+
tabWidth: 2,
|
|
27
|
+
trailingComma: 'all',
|
|
28
|
+
useTabs: false,
|
|
29
|
+
};
|
|
30
|
+
let contractLoader;
|
|
31
|
+
let generationSequence = 0;
|
|
32
|
+
/** Compile once, project both public artifacts, and write or check their exact bytes. */
|
|
33
|
+
export async function generateHttpArtifacts(config, options = {}) {
|
|
34
|
+
const borrowed = options.session;
|
|
35
|
+
const session = borrowed ?? ReflectSession.open({ project: config.project });
|
|
36
|
+
try {
|
|
37
|
+
return await generateWithSession(config, session, options.check === true);
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
if (borrowed === undefined)
|
|
41
|
+
session.close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Keep one reflection session open and regenerate only after an input in the
|
|
46
|
+
* last compiled dependency set changes.
|
|
47
|
+
*/
|
|
48
|
+
export async function watchHttpArtifacts(config, options = {}) {
|
|
49
|
+
requireHttpConfig(config);
|
|
50
|
+
const borrowed = options.session;
|
|
51
|
+
const session = borrowed ?? ReflectSession.open({ project: config.project });
|
|
52
|
+
const log = options.log ?? (() => undefined);
|
|
53
|
+
let last;
|
|
54
|
+
let dependencies = new Set();
|
|
55
|
+
const controller = new AbortController();
|
|
56
|
+
const stop = () => {
|
|
57
|
+
controller.abort();
|
|
58
|
+
};
|
|
59
|
+
void options.until?.then(stop, stop);
|
|
60
|
+
const projectRoot = dirname(resolve(config.project));
|
|
61
|
+
const pendingRelevant = new Set();
|
|
62
|
+
const pendingCreated = new Set();
|
|
63
|
+
let timer;
|
|
64
|
+
let queued = Promise.resolve();
|
|
65
|
+
let failure;
|
|
66
|
+
const flush = () => {
|
|
67
|
+
timer = undefined;
|
|
68
|
+
if (controller.signal.aborted)
|
|
69
|
+
return;
|
|
70
|
+
const relevant = [...pendingRelevant];
|
|
71
|
+
pendingRelevant.clear();
|
|
72
|
+
if (relevant.length === 0)
|
|
73
|
+
return;
|
|
74
|
+
const observed = new Set([...relevant, ...pendingCreated]);
|
|
75
|
+
pendingCreated.clear();
|
|
76
|
+
queued = queued
|
|
77
|
+
.then(async () => {
|
|
78
|
+
const created = [];
|
|
79
|
+
const changed = [];
|
|
80
|
+
const deleted = [];
|
|
81
|
+
for (const path of observed) {
|
|
82
|
+
if (!existsSync(path)) {
|
|
83
|
+
if (dependencies.has(path))
|
|
84
|
+
deleted.push(path);
|
|
85
|
+
}
|
|
86
|
+
else if (session.sourceFile(path) === undefined) {
|
|
87
|
+
created.push(path);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
changed.push(path);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (created.length > 0)
|
|
94
|
+
session.created(created);
|
|
95
|
+
if (changed.length > 0)
|
|
96
|
+
session.refresh(changed);
|
|
97
|
+
if (deleted.length > 0)
|
|
98
|
+
session.deleted(deleted);
|
|
99
|
+
last = await generateWithSession(config, session, false);
|
|
100
|
+
dependencies = new Set(last.dependencies);
|
|
101
|
+
log(last);
|
|
102
|
+
})
|
|
103
|
+
.catch((error) => {
|
|
104
|
+
failure = error;
|
|
105
|
+
controller.abort();
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
try {
|
|
109
|
+
last = await generateWithSession(config, session, false);
|
|
110
|
+
dependencies = new Set(last.dependencies);
|
|
111
|
+
log(last);
|
|
112
|
+
try {
|
|
113
|
+
for await (const event of watch(projectRoot, { recursive: true, signal: controller.signal })) {
|
|
114
|
+
if (typeof event.filename !== 'string')
|
|
115
|
+
continue;
|
|
116
|
+
const path = resolve(projectRoot, event.filename);
|
|
117
|
+
if (existsSync(path) && session.sourceFile(path) === undefined && TYPESCRIPT_SOURCE.test(path)) {
|
|
118
|
+
pendingCreated.add(path);
|
|
119
|
+
}
|
|
120
|
+
if (!dependencies.has(path))
|
|
121
|
+
continue;
|
|
122
|
+
pendingRelevant.add(path);
|
|
123
|
+
if (timer !== undefined)
|
|
124
|
+
clearTimeout(timer);
|
|
125
|
+
timer = setTimeout(flush, options.debounceMs ?? 60);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (!(error instanceof Error) || error.name !== 'AbortError')
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
if (timer !== undefined)
|
|
135
|
+
clearTimeout(timer);
|
|
136
|
+
await queued;
|
|
137
|
+
if (borrowed === undefined)
|
|
138
|
+
session.close();
|
|
139
|
+
}
|
|
140
|
+
if (failure !== undefined)
|
|
141
|
+
throw failure;
|
|
142
|
+
return last;
|
|
143
|
+
}
|
|
144
|
+
async function generateWithSession(config, session, check) {
|
|
145
|
+
const http = requireHttpConfig(config);
|
|
146
|
+
const rendered = await renderArtifacts(http, session);
|
|
147
|
+
const outputs = [
|
|
148
|
+
{ path: http.openApiOut, source: rendered.openApi },
|
|
149
|
+
{ path: http.clientOut, source: rendered.client },
|
|
150
|
+
];
|
|
151
|
+
const current = await Promise.all(outputs.map(output => readOptionalText(output.path)));
|
|
152
|
+
const stale = outputs.flatMap((output, index) => (current[index] === output.source ? [] : [output.path]));
|
|
153
|
+
if (!check) {
|
|
154
|
+
for (const output of outputs) {
|
|
155
|
+
if (stale.includes(output.path))
|
|
156
|
+
await writeTextAtomically(output.path, output.source);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
result: {
|
|
161
|
+
out: { openApi: http.openApiOut, client: http.clientOut },
|
|
162
|
+
operations: rendered.operations,
|
|
163
|
+
changed: stale.length > 0,
|
|
164
|
+
contractFormat: rendered.contractFormat,
|
|
165
|
+
generatorVersion: rendered.generatorVersion,
|
|
166
|
+
},
|
|
167
|
+
stale,
|
|
168
|
+
dependencies: rendered.dependencies,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
async function renderArtifacts(http, session) {
|
|
172
|
+
generationSequence += 1;
|
|
173
|
+
const sources = await loadContractSources(http, generationSequence);
|
|
174
|
+
const compiled = compileHttpContracts(sources, { session });
|
|
175
|
+
const document = toOpenApi(compiled.ir);
|
|
176
|
+
const client = generateHttpClient(compiled.ir);
|
|
177
|
+
const openApiOperations = openApiOperationIds(document);
|
|
178
|
+
if (!sameStrings(openApiOperations, client.operations)) {
|
|
179
|
+
throw new Error(`HTTP artifact generation: OpenAPI operations [${openApiOperations.join(', ')}] ` +
|
|
180
|
+
`do not match client operations [${client.operations.join(', ')}]`);
|
|
181
|
+
}
|
|
182
|
+
const openApi = await formatOpenApi(http.openApiOut, document);
|
|
183
|
+
return {
|
|
184
|
+
openApi,
|
|
185
|
+
client: client.source,
|
|
186
|
+
operations: client.operations,
|
|
187
|
+
contractFormat: client.contractFormat,
|
|
188
|
+
generatorVersion: client.generatorVersion,
|
|
189
|
+
dependencies: compiled.dependencies,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
async function formatOpenApi(path, document) {
|
|
193
|
+
const { format } = await import('oxfmt');
|
|
194
|
+
const formatted = await format(path, `${JSON.stringify(document, null, 2)}\n`, FORMAT_OPTIONS);
|
|
195
|
+
if (formatted.errors.length > 0) {
|
|
196
|
+
throw new TypeError(`oxfmt could not format generated ${path}: ${JSON.stringify(formatted.errors)}`);
|
|
197
|
+
}
|
|
198
|
+
return formatted.code;
|
|
199
|
+
}
|
|
200
|
+
async function loadContractSources(http, generation) {
|
|
201
|
+
await installContractLoader();
|
|
202
|
+
const modules = new Map();
|
|
203
|
+
const sources = [];
|
|
204
|
+
for (const configured of http.contracts) {
|
|
205
|
+
let loaded = modules.get(configured.file);
|
|
206
|
+
if (loaded === undefined) {
|
|
207
|
+
const url = pathToFileURL(configured.file);
|
|
208
|
+
url.searchParams.set(GENERATION_QUERY, String(generation));
|
|
209
|
+
const candidate = await import(url.href);
|
|
210
|
+
if (typeof candidate !== 'object' || candidate === null) {
|
|
211
|
+
throw new Error(`HTTP contract module ${configured.file} did not load as a module record`);
|
|
212
|
+
}
|
|
213
|
+
loaded = candidate;
|
|
214
|
+
modules.set(configured.file, loaded);
|
|
215
|
+
}
|
|
216
|
+
const contract = Reflect.get(loaded, configured.exportName);
|
|
217
|
+
if (!isHttpContractDeclaration(contract)) {
|
|
218
|
+
throw new Error(`HTTP contract module ${configured.file} has no contract declaration export ${configured.exportName}`);
|
|
219
|
+
}
|
|
220
|
+
sources.push({ file: configured.file, exportName: configured.exportName, contract });
|
|
221
|
+
}
|
|
222
|
+
return sources;
|
|
223
|
+
}
|
|
224
|
+
function requireHttpConfig(config) {
|
|
225
|
+
if (config.http === undefined) {
|
|
226
|
+
throw new CliInvocationError(`config ${config.configPath} must declare http.contracts, http.openApi.out and http.client.out`);
|
|
227
|
+
}
|
|
228
|
+
return config.http;
|
|
229
|
+
}
|
|
230
|
+
function openApiOperationIds(document) {
|
|
231
|
+
const operationIds = [];
|
|
232
|
+
for (const path of Object.keys(document.paths).toSorted()) {
|
|
233
|
+
const item = document.paths[path];
|
|
234
|
+
if (item === undefined)
|
|
235
|
+
continue;
|
|
236
|
+
for (const method of Object.keys(item).toSorted()) {
|
|
237
|
+
const operation = item[method];
|
|
238
|
+
if (operation !== undefined)
|
|
239
|
+
operationIds.push(operation.operationId);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return operationIds.toSorted();
|
|
243
|
+
}
|
|
244
|
+
function sameStrings(left, right) {
|
|
245
|
+
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
246
|
+
}
|
|
247
|
+
function isHttpContractDeclaration(value) {
|
|
248
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
249
|
+
return false;
|
|
250
|
+
const operations = Reflect.get(value, 'operations');
|
|
251
|
+
const securitySchemes = Reflect.get(value, 'securitySchemes');
|
|
252
|
+
return (typeof operations === 'object' &&
|
|
253
|
+
operations !== null &&
|
|
254
|
+
!Array.isArray(operations) &&
|
|
255
|
+
typeof securitySchemes === 'object' &&
|
|
256
|
+
securitySchemes !== null &&
|
|
257
|
+
!Array.isArray(securitySchemes));
|
|
258
|
+
}
|
|
259
|
+
async function readOptionalText(path) {
|
|
260
|
+
try {
|
|
261
|
+
return await readFile(path, 'utf8');
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
if (errorCode(error) === 'ENOENT')
|
|
265
|
+
return undefined;
|
|
266
|
+
throw error;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
function errorCode(error) {
|
|
270
|
+
if (typeof error !== 'object' || error === null)
|
|
271
|
+
return undefined;
|
|
272
|
+
const code = Reflect.get(error, 'code');
|
|
273
|
+
return typeof code === 'string' ? code : undefined;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Lower Stage-3 decorators and propagate one cache-busting generation token
|
|
277
|
+
* through relative project imports. Bare package imports keep their canonical
|
|
278
|
+
* URL, preserving framework metadata-symbol identity.
|
|
279
|
+
*/
|
|
280
|
+
async function installContractLoader() {
|
|
281
|
+
contractLoader ??= import('esbuild').then(({ transformSync }) => {
|
|
282
|
+
registerHooks({
|
|
283
|
+
resolve(specifier, context, nextResolve) {
|
|
284
|
+
const parent = context.parentURL === undefined ? undefined : new URL(context.parentURL);
|
|
285
|
+
const generation = parent?.searchParams.get(GENERATION_QUERY);
|
|
286
|
+
if (generation === null || generation === undefined || !RELATIVE_SPECIFIER.test(specifier)) {
|
|
287
|
+
return nextResolve(specifier, context);
|
|
288
|
+
}
|
|
289
|
+
const cleanParent = new URL(context.parentURL ?? '');
|
|
290
|
+
cleanParent.search = '';
|
|
291
|
+
cleanParent.hash = '';
|
|
292
|
+
const mapped = typescriptSibling(specifier, cleanParent);
|
|
293
|
+
if (mapped !== undefined) {
|
|
294
|
+
mapped.searchParams.set(GENERATION_QUERY, generation);
|
|
295
|
+
return { url: mapped.href, shortCircuit: true };
|
|
296
|
+
}
|
|
297
|
+
const resolved = nextResolve(specifier, { ...context, parentURL: cleanParent.href });
|
|
298
|
+
if (!resolved.url.startsWith('file:'))
|
|
299
|
+
return resolved;
|
|
300
|
+
const url = new URL(resolved.url);
|
|
301
|
+
url.searchParams.set(GENERATION_QUERY, generation);
|
|
302
|
+
return { ...resolved, url: url.href };
|
|
303
|
+
},
|
|
304
|
+
load(url, context, nextLoad) {
|
|
305
|
+
if (!url.startsWith('file:'))
|
|
306
|
+
return nextLoad(url, context);
|
|
307
|
+
const sourceUrl = new URL(url);
|
|
308
|
+
sourceUrl.search = '';
|
|
309
|
+
sourceUrl.hash = '';
|
|
310
|
+
if (!TYPESCRIPT_SOURCE.test(sourceUrl.pathname))
|
|
311
|
+
return nextLoad(url, context);
|
|
312
|
+
const file = fileURLToPath(sourceUrl);
|
|
313
|
+
const transformed = transformSync(readFileSync(file, 'utf8'), {
|
|
314
|
+
loader: file.endsWith('x') ? 'tsx' : 'ts',
|
|
315
|
+
format: 'esm',
|
|
316
|
+
target: 'es2022',
|
|
317
|
+
sourcefile: file,
|
|
318
|
+
sourcemap: 'inline',
|
|
319
|
+
tsconfigRaw: {
|
|
320
|
+
compilerOptions: {
|
|
321
|
+
experimentalDecorators: false,
|
|
322
|
+
useDefineForClassFields: true,
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
});
|
|
326
|
+
return { format: 'module', source: transformed.code, shortCircuit: true };
|
|
327
|
+
},
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
await contractLoader;
|
|
331
|
+
}
|
|
332
|
+
function typescriptSibling(specifier, parent) {
|
|
333
|
+
const replacements = specifier.endsWith('.js')
|
|
334
|
+
? [`${specifier.slice(0, -3)}.ts`, `${specifier.slice(0, -3)}.tsx`]
|
|
335
|
+
: specifier.endsWith('.mjs')
|
|
336
|
+
? [`${specifier.slice(0, -4)}.mts`]
|
|
337
|
+
: specifier.endsWith('.cjs')
|
|
338
|
+
? [`${specifier.slice(0, -4)}.cts`]
|
|
339
|
+
: [];
|
|
340
|
+
for (const replacement of replacements) {
|
|
341
|
+
const candidate = new URL(replacement, parent);
|
|
342
|
+
if (existsSync(fileURLToPath(candidate)))
|
|
343
|
+
return candidate;
|
|
344
|
+
}
|
|
345
|
+
return undefined;
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/commands/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ParsedCommand } from '../args.js';
|
|
2
|
+
interface CodegenEnvironment {
|
|
3
|
+
readonly cwd: string;
|
|
4
|
+
readonly stdout: (text: string) => void;
|
|
5
|
+
readonly stderr: (text: string) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function runCodegen(parsed: ParsedCommand, io: CodegenEnvironment): Promise<number>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=codegen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/commands/codegen.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuD/F"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { compileProject, watchCodegen, writeCompileResult } from '@zmdb/compiler';
|
|
4
|
+
import { loadConfig } from '@zmdb/compiler/config';
|
|
5
|
+
import { errorMessage } from '../errors.js';
|
|
6
|
+
import { withSignals } from '../lifecycle.js';
|
|
7
|
+
import { CliOutput } from '../output.js';
|
|
8
|
+
export async function runCodegen(parsed, io) {
|
|
9
|
+
const output = new CliOutput('codegen', parsed.config, parsed.json, io);
|
|
10
|
+
if (parsed.values.check === true && parsed.values.watch === true) {
|
|
11
|
+
return output.failure('--check and --watch ask for opposite things', 2);
|
|
12
|
+
}
|
|
13
|
+
if (parsed.json && parsed.values.watch === true) {
|
|
14
|
+
return output.failure('--json is unavailable because a watch session is not one JSON document', 2);
|
|
15
|
+
}
|
|
16
|
+
if (typeof parsed.values.config === 'string' && !existsSync(parsed.config)) {
|
|
17
|
+
return output.failure(`config file ${parsed.config} does not exist`, 2);
|
|
18
|
+
}
|
|
19
|
+
let config;
|
|
20
|
+
try {
|
|
21
|
+
config =
|
|
22
|
+
typeof parsed.values.config === 'string' || existsSync(parsed.config)
|
|
23
|
+
? await loadConfig({ cwd: io.cwd, path: parsed.config })
|
|
24
|
+
: undefined;
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
return output.failure(errorMessage(error), 2);
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const project = parsed.project === undefined
|
|
31
|
+
? (config?.project ?? resolve(io.cwd, 'tsconfig.json'))
|
|
32
|
+
: resolve(io.cwd, parsed.project);
|
|
33
|
+
const options = { project, ...(config?.resolvedNaming === undefined ? {} : { naming: config.resolvedNaming }) };
|
|
34
|
+
if (parsed.values.watch === true) {
|
|
35
|
+
const result = await withSignals(until => watchCodegen({
|
|
36
|
+
...options,
|
|
37
|
+
until,
|
|
38
|
+
log: text => output.progress(`${text}\n`),
|
|
39
|
+
}));
|
|
40
|
+
return result === undefined || result.problems.length === 0 ? 0 : 1;
|
|
41
|
+
}
|
|
42
|
+
const compiled = await compileProject(options);
|
|
43
|
+
if (compiled.diagnostics.length > 0) {
|
|
44
|
+
return output.failure(compiled.diagnostics
|
|
45
|
+
.map(item => `${item.code}: ${item.message}${item.file === undefined ? '' : ` (${item.file})`}`)
|
|
46
|
+
.join('\n'), 1);
|
|
47
|
+
}
|
|
48
|
+
const result = await writeCompileResult(compiled, { check: parsed.values.check === true });
|
|
49
|
+
const code = parsed.values.check === true && result.stale.length > 0 ? 1 : 0;
|
|
50
|
+
return output.result(result, `${result.stale.length === 0 ? 'up to date' : result.stale.map(path => `${parsed.values.check === true ? 'stale' : 'generated'} ${path}`).join('\n')}\n`, code);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
return output.failure(errorMessage(error), 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/commands/codegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ResolvedConfig } from '@zmdb/compiler/config';
|
|
2
|
+
import { type EmbeddedModuleResult, type EmbedOptions, type EmbedResult } from '@zmdb/migrations/files';
|
|
3
|
+
export type { EmbeddedModuleResult, EmbedOptions, EmbedResult };
|
|
4
|
+
export declare const EMBEDDED_WITH_DOWN_MARKER = "// Includes down sections for development tooling.";
|
|
5
|
+
export declare function embeddedOutputPath(config: ResolvedConfig, requested?: string): string;
|
|
6
|
+
export declare function renderEmbeddedModule(config: ResolvedConfig, options?: EmbedOptions): Promise<EmbeddedModuleResult>;
|
|
7
|
+
export declare function embedMigrations(config: ResolvedConfig, options?: EmbedOptions): Promise<EmbedResult>;
|
|
8
|
+
//# sourceMappingURL=embed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/commands/embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAKhC,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAEhE,eAAO,MAAM,yBAAyB,uDAAuD,CAAC;AAE9F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAErF;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAOxG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { embedMigrations as embedProjectMigrations, embeddedOutputPath as projectEmbeddedOutputPath, renderEmbeddedModule as renderProjectEmbeddedModule, } from '@zmdb/migrations/files';
|
|
2
|
+
import { CliInvocationError } from '../errors.js';
|
|
3
|
+
import { migrationProject } from '../migration-project.js';
|
|
4
|
+
export const EMBEDDED_WITH_DOWN_MARKER = '// Includes down sections for development tooling.';
|
|
5
|
+
export function embeddedOutputPath(config, requested) {
|
|
6
|
+
return projectEmbeddedOutputPath(migrationProject(config), requested);
|
|
7
|
+
}
|
|
8
|
+
export function renderEmbeddedModule(config, options = {}) {
|
|
9
|
+
return renderProjectEmbeddedModule(migrationProject(config), options);
|
|
10
|
+
}
|
|
11
|
+
export function embedMigrations(config, options = {}) {
|
|
12
|
+
if (!config.dialect.migrations.embedded) {
|
|
13
|
+
throw new CliInvocationError(`embedded migrations are not supported by ${config.dialect.name} in ${config.configPath}`);
|
|
14
|
+
}
|
|
15
|
+
return embedProjectMigrations(migrationProject(config), options);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=embed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../../src/commands/embed.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,IAAI,sBAAsB,EACzC,kBAAkB,IAAI,yBAAyB,EAC/C,oBAAoB,IAAI,2BAA2B,GAIpD,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,oDAAoD,CAAC;AAE9F,MAAM,UAAU,kBAAkB,CAAC,MAAsB,EAAE,SAAkB;IAC3E,OAAO,yBAAyB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAsB,EACtB,OAAO,GAAiB,EAAE;IAE1B,OAAO,2BAA2B,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,OAAO,GAAiB,EAAE;IAChF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,kBAAkB,CAC1B,4CAA4C,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,MAAM,CAAC,UAAU,EAAE,CAC1F,CAAC;IACJ,CAAC;IACD,OAAO,sBAAsB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAuC,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAIhG,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,YAAY,CAEjE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { exportSchema as exportProjectSchema } from '@zmdb/migrations/files';
|
|
2
|
+
import { reflectedMigrationProject } from '../migration-project.js';
|
|
3
|
+
export function exportSchema(config) {
|
|
4
|
+
return exportProjectSchema(reflectedMigrationProject(config));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAqB,MAAM,wBAAwB,CAAC;AAEhG,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAIpE,MAAM,UAAU,YAAY,CAAC,MAAsB;IACjD,OAAO,mBAAmB,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ResolvedConfig } from '@zmdb/compiler/config';
|
|
2
|
+
import { type GenerateOptions, type GenerateResult } from '@zmdb/migrations/files';
|
|
3
|
+
export type { GenerateOptions, GenerateResult };
|
|
4
|
+
export declare function generateMigration(config: ResolvedConfig, options?: GenerateOptions): Promise<GenerateResult>;
|
|
5
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAIhC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAEhD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAEhH"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { generateMigration as generateProjectMigration, } from '@zmdb/migrations/files';
|
|
2
|
+
import { reflectedMigrationProject } from '../migration-project.js';
|
|
3
|
+
export function generateMigration(config, options = {}) {
|
|
4
|
+
return generateProjectMigration(reflectedMigrationProject(config), options);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,IAAI,wBAAwB,GAG9C,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAIpE,MAAM,UAAU,iBAAiB,CAAC,MAAsB,EAAE,OAAO,GAAoB,EAAE;IACrF,OAAO,wBAAwB,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ResolvedConfig } from '@zmdb/compiler/config';
|
|
2
|
+
import type { MigrationDriver } from '@zmdb/migrations';
|
|
3
|
+
import { type MigrateResult, type MigrationCommandOptions, type RollbackResult, type StatusResult } from '@zmdb/migrations/files';
|
|
4
|
+
export type { MigrateResult, MigrationCommandOptions, RollbackResult, StatusResult };
|
|
5
|
+
export declare function migrate(config: ResolvedConfig, options: MigrationCommandOptions): Promise<MigrateResult>;
|
|
6
|
+
export declare function rollback(config: ResolvedConfig, target: number | undefined, options: MigrationCommandOptions): Promise<RollbackResult>;
|
|
7
|
+
export declare function migrationStatus(config: ResolvedConfig): Promise<StatusResult>;
|
|
8
|
+
export declare function configuredDriver(config: ResolvedConfig): Promise<MigrationDriver>;
|
|
9
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,wBAAwB,CAAC;AAIhC,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;AAErF,wBAAsB,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC,CAG9G;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,cAAc,CAAC,CAGzB;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAGnF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAEjF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { migrate as migrateProject, migrationStatus as projectMigrationStatus, rollback as rollbackProject, } from '@zmdb/migrations/files';
|
|
2
|
+
import { configuredMigrationDriver, migrationProject } from '../migration-project.js';
|
|
3
|
+
export async function migrate(config, options) {
|
|
4
|
+
const driver = await configuredDriver(config);
|
|
5
|
+
return migrateProject(migrationProject(config, { driver }), options);
|
|
6
|
+
}
|
|
7
|
+
export async function rollback(config, target, options) {
|
|
8
|
+
const driver = await configuredDriver(config);
|
|
9
|
+
return rollbackProject(migrationProject(config, { driver }), target, options);
|
|
10
|
+
}
|
|
11
|
+
export async function migrationStatus(config) {
|
|
12
|
+
const driver = await configuredDriver(config);
|
|
13
|
+
return projectMigrationStatus(migrationProject(config, { driver }));
|
|
14
|
+
}
|
|
15
|
+
export function configuredDriver(config) {
|
|
16
|
+
return configuredMigrationDriver(config);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,eAAe,IAAI,sBAAsB,EACzC,QAAQ,IAAI,eAAe,GAK5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAItF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAsB,EAAE,OAAgC;IACpF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,cAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAsB,EACtB,MAA0B,EAC1B,OAAgC;IAEhC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAsB;IAC1D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,sBAAsB,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAS9C,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB9G"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { renderScaffold, scaffold, ScaffoldConflictError, ScaffoldUsageError, } from '../scaffold.js';
|
|
2
|
+
export async function createNewScaffold(parsed, output, cwd) {
|
|
3
|
+
const kind = parsed.positionals[0];
|
|
4
|
+
const name = parsed.positionals[1];
|
|
5
|
+
if (kind === undefined || name === undefined) {
|
|
6
|
+
return output.failure('usage: zmdb new <project|schema|controller|module|repository|command> <name>', 2);
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
const result = await scaffold({
|
|
10
|
+
cwd,
|
|
11
|
+
kind,
|
|
12
|
+
name,
|
|
13
|
+
...(typeof parsed.values.package === 'string' ? { package: parsed.values.package } : {}),
|
|
14
|
+
dryRun: parsed.values['dry-run'] === true,
|
|
15
|
+
});
|
|
16
|
+
return output.result(publicResult(result), renderScaffold(result));
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (error instanceof ScaffoldUsageError)
|
|
20
|
+
return output.failure(error.message, 2);
|
|
21
|
+
if (error instanceof ScaffoldConflictError)
|
|
22
|
+
return output.failure(error.message, 1);
|
|
23
|
+
return output.failure(error instanceof Error ? error.message : String(error), 1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function publicResult(result) {
|
|
27
|
+
return {
|
|
28
|
+
kind: result.kind,
|
|
29
|
+
name: result.name.input,
|
|
30
|
+
target: result.target,
|
|
31
|
+
files: result.files.map(file => file.path),
|
|
32
|
+
dryRun: result.dryRun,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,QAAQ,EACR,qBAAqB,EACrB,kBAAkB,GAEnB,MAAM,gBAAgB,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAqB,EAAE,MAAiB,EAAE,GAAW;IAC3F,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,8EAA8E,EAAE,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,GAAG;YACH,IAAI;YACJ,IAAI;YACJ,GAAG,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI;SAC1C,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,kBAAkB;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjF,IAAI,KAAK,YAAY,qBAAqB;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpF,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAsB;IAO1C,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1C,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ResolvedConfig } from '@zmdb/compiler/config';
|
|
2
|
+
import { type PullExecution, type PullOptions } from '@zmdb/migrations/files';
|
|
3
|
+
export type { PullExecution, PullFile, PullOptions, PullOutputFile, PullResult, PullSkippedFile, } from '@zmdb/migrations/files';
|
|
4
|
+
export declare function pullDeclarations(config: ResolvedConfig, options?: PullOptions): Promise<PullExecution>;
|
|
5
|
+
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAKhC,YAAY,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,cAAc,EACd,UAAU,EACV,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAYhH"}
|