@objectstack/cli 4.1.0 → 4.2.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/dist/commands/dev.d.ts +10 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +119 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/i18n/extract.d.ts +28 -0
- package/dist/commands/i18n/extract.d.ts.map +1 -0
- package/dist/commands/i18n/extract.js +148 -0
- package/dist/commands/i18n/extract.js.map +1 -0
- package/dist/utils/i18n-extract.d.ts +102 -0
- package/dist/utils/i18n-extract.d.ts.map +1 -0
- package/dist/utils/i18n-extract.js +332 -0
- package/dist/utils/i18n-extract.js.map +1 -0
- package/package.json +34 -33
package/dist/commands/dev.d.ts
CHANGED
|
@@ -19,5 +19,15 @@ export default class Dev extends Command {
|
|
|
19
19
|
'auth-secret': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
20
|
};
|
|
21
21
|
run(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Watch objectstack source files (config + src/**) and on change:
|
|
24
|
+
* 1. Debounce 250ms
|
|
25
|
+
* 2. Run `os compile` to rebuild `dist/objectstack.json`
|
|
26
|
+
* 3. POST /api/v1/dev/metadata-events on the running server so
|
|
27
|
+
* MetadataPlugin reloads the artifact and Studio previews refresh.
|
|
28
|
+
*
|
|
29
|
+
* The watcher runs in this parent process; the serve child stays untouched.
|
|
30
|
+
*/
|
|
31
|
+
private startWatchRecompile;
|
|
22
32
|
}
|
|
23
33
|
//# sourceMappingURL=dev.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAOnD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,OAAO;IACtC,OAAgB,WAAW,SAA4C;IAEvE,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;;;;;MAwCnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAOnD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,OAAO;IACtC,OAAgB,WAAW,SAA4C;IAEvE,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;;;;;MAwCnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8I1B;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;CA0F5B"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -114,7 +114,7 @@ export default class Dev extends Command {
|
|
|
114
114
|
printKV('Database', redactDbUrl(flags.database), '🗄️');
|
|
115
115
|
const port = flags.port ?? process.env.PORT;
|
|
116
116
|
const binPath = process.argv[1];
|
|
117
|
-
spawn(process.execPath, [
|
|
117
|
+
const serveChild = spawn(process.execPath, [
|
|
118
118
|
binPath,
|
|
119
119
|
'serve',
|
|
120
120
|
'--dev',
|
|
@@ -123,6 +123,28 @@ export default class Dev extends Command {
|
|
|
123
123
|
...(flags.verbose ? ['--verbose'] : []),
|
|
124
124
|
...(flags.preset ? ['--preset', flags.preset] : []),
|
|
125
125
|
], { stdio: 'inherit', env: localEnv });
|
|
126
|
+
// ── Watch-recompile loop ────────────────────────────────────────
|
|
127
|
+
// When the agent edits an objectstack source file (config or
|
|
128
|
+
// src/**), debounce-rebuild dist/objectstack.json then POST the
|
|
129
|
+
// dev HMR endpoint so Studio previews refresh without F5.
|
|
130
|
+
//
|
|
131
|
+
// Skipped when:
|
|
132
|
+
// - --watch=false (user opted out)
|
|
133
|
+
// - --artifact was passed (no source to watch)
|
|
134
|
+
// - the project has no objectstack.config.ts
|
|
135
|
+
if (flags.watch !== false && !flags.artifact && configExists) {
|
|
136
|
+
this.startWatchRecompile({
|
|
137
|
+
cwd: process.cwd(),
|
|
138
|
+
configPath,
|
|
139
|
+
artifactPath,
|
|
140
|
+
binPath,
|
|
141
|
+
port: port ?? '3000',
|
|
142
|
+
verbose: flags.verbose,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
serveChild.on('exit', (code) => {
|
|
146
|
+
process.exit(code ?? 0);
|
|
147
|
+
});
|
|
126
148
|
return;
|
|
127
149
|
}
|
|
128
150
|
// ── Monorepo Orchestration Mode ──────────────────────────────────────────
|
|
@@ -149,6 +171,102 @@ export default class Dev extends Command {
|
|
|
149
171
|
process.exit(1);
|
|
150
172
|
}
|
|
151
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Watch objectstack source files (config + src/**) and on change:
|
|
176
|
+
* 1. Debounce 250ms
|
|
177
|
+
* 2. Run `os compile` to rebuild `dist/objectstack.json`
|
|
178
|
+
* 3. POST /api/v1/dev/metadata-events on the running server so
|
|
179
|
+
* MetadataPlugin reloads the artifact and Studio previews refresh.
|
|
180
|
+
*
|
|
181
|
+
* The watcher runs in this parent process; the serve child stays untouched.
|
|
182
|
+
*/
|
|
183
|
+
startWatchRecompile(opts) {
|
|
184
|
+
void (async () => {
|
|
185
|
+
const chokidar = (await import('chokidar')).default;
|
|
186
|
+
const srcDir = path.resolve(opts.cwd, 'src');
|
|
187
|
+
const watchPaths = [opts.configPath];
|
|
188
|
+
if (fs.existsSync(srcDir))
|
|
189
|
+
watchPaths.push(srcDir);
|
|
190
|
+
const watcher = chokidar.watch(watchPaths, {
|
|
191
|
+
ignored: [
|
|
192
|
+
/node_modules/,
|
|
193
|
+
/\.git/,
|
|
194
|
+
/\.objectstack\//,
|
|
195
|
+
/\bdist\b/,
|
|
196
|
+
/\.test\.[jt]sx?$/,
|
|
197
|
+
],
|
|
198
|
+
ignoreInitial: true,
|
|
199
|
+
persistent: true,
|
|
200
|
+
});
|
|
201
|
+
let timer = null;
|
|
202
|
+
let pending = new Set();
|
|
203
|
+
let inFlight = false;
|
|
204
|
+
let queued = false;
|
|
205
|
+
const compileAndPing = async () => {
|
|
206
|
+
if (inFlight) {
|
|
207
|
+
queued = true;
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
inFlight = true;
|
|
211
|
+
const changed = Array.from(pending);
|
|
212
|
+
pending = new Set();
|
|
213
|
+
const label = changed.length === 1
|
|
214
|
+
? path.relative(opts.cwd, changed[0])
|
|
215
|
+
: `${changed.length} files`;
|
|
216
|
+
console.log(chalk.dim(`\n ↻ recompiling (${label})...`));
|
|
217
|
+
const t0 = Date.now();
|
|
218
|
+
const r = spawnSync(process.execPath, [opts.binPath, 'compile', '--output', opts.artifactPath], { stdio: opts.verbose ? 'inherit' : ['ignore', 'ignore', 'pipe'], env: process.env });
|
|
219
|
+
const dt = Date.now() - t0;
|
|
220
|
+
if (r.status !== 0) {
|
|
221
|
+
const stderr = r.stderr?.toString().trim();
|
|
222
|
+
console.log(chalk.red(` ✗ compile failed (${dt}ms)${stderr ? '\n' + stderr : ''}`));
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
console.log(chalk.green(` ✓ recompiled in ${dt}ms — notifying server`));
|
|
226
|
+
try {
|
|
227
|
+
const res = await fetch(`http://localhost:${opts.port}/api/v1/dev/metadata-events`, {
|
|
228
|
+
method: 'POST',
|
|
229
|
+
headers: { 'content-type': 'application/json' },
|
|
230
|
+
body: JSON.stringify({ reason: 'source-change', changed: changed.map((p) => path.relative(opts.cwd, p)) }),
|
|
231
|
+
});
|
|
232
|
+
if (!res.ok)
|
|
233
|
+
console.log(chalk.yellow(` ⚠ HMR ping returned ${res.status}`));
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
console.log(chalk.yellow(` ⚠ HMR ping failed: ${e?.message ?? e}`));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
inFlight = false;
|
|
240
|
+
if (queued) {
|
|
241
|
+
queued = false;
|
|
242
|
+
setTimeout(compileAndPing, 50);
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
const schedule = (filePath) => {
|
|
246
|
+
pending.add(filePath);
|
|
247
|
+
if (timer)
|
|
248
|
+
clearTimeout(timer);
|
|
249
|
+
timer = setTimeout(compileAndPing, 250);
|
|
250
|
+
};
|
|
251
|
+
watcher.on('change', schedule);
|
|
252
|
+
watcher.on('add', schedule);
|
|
253
|
+
watcher.on('unlink', schedule);
|
|
254
|
+
watcher.on('ready', () => {
|
|
255
|
+
console.log(chalk.dim(` 👁 watching ${watchPaths.map(p => path.relative(opts.cwd, p) || '.').join(', ')} for changes`));
|
|
256
|
+
});
|
|
257
|
+
// Clean up on process exit
|
|
258
|
+
const stop = async () => {
|
|
259
|
+
try {
|
|
260
|
+
await watcher.close();
|
|
261
|
+
}
|
|
262
|
+
catch { /* noop */ }
|
|
263
|
+
};
|
|
264
|
+
process.on('SIGINT', () => { void stop(); });
|
|
265
|
+
process.on('SIGTERM', () => { void stop(); });
|
|
266
|
+
})().catch((e) => {
|
|
267
|
+
console.error(chalk.yellow(` ⚠ watch-recompile failed to start: ${e?.message ?? e}`));
|
|
268
|
+
});
|
|
269
|
+
}
|
|
152
270
|
}
|
|
153
271
|
function redactDbUrl(url) {
|
|
154
272
|
try {
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEjF,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,OAAO;IACtC,MAAM,CAAU,WAAW,GAAG,wCAAwC,CAAC;IAEvE,MAAM,CAAU,IAAI,GAAG;QACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KACzG,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,6BAA6B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC9F,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;QACnE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;QACpE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;QAC/E,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,mEAAmE;SACjF,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,WAAW,EAAE,oIAAoI;YACjJ,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,oEAAoE;QACpE,gEAAgE;QAChE,mEAAmE;QACnE,oEAAoE;QACpE,mEAAmE;QACnE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,yGAAyG;SACvH,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;YACzB,WAAW,EAAE,mEAAmE;SACjF,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,yHAAyH;SACvI,CAAC;QACF,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC;YAC9B,WAAW,EAAE,iGAAiG;YAC9G,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;SAC9D,CAAC;QACF,qBAAqB,EAAE,KAAK,CAAC,MAAM,CAAC;YAClC,WAAW,EAAE,iGAAiG;SAC/G,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,WAAW,EAAE,sHAAsH;SACpI,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;QAEjC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAEhC,4EAA4E;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;QACxE,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE/C,mEAAmE;QACnE,kEAAkE;QAClE,oEAAoE;QACpE,+CAA+C;QAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvE,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ;eAClC,OAAO,CAAC,GAAG,CAAC,gBAAgB;eAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAC7F,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC;QAE5D,IAAI,WAAW,KAAK,KAAK,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YACtC,CAAC;YAED,oEAAoE;YACpE,yDAAyD;YACzD,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;YACxF,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,UAAU,CAAC,sEAAsE,CAAC,CAAC;oBACnF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,iFAAiF,CAAC,CAAC,CAAC;oBAC/G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,SAAS,CAAC,4DAA4D,CAAC,CAAC;gBACxE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,aAAa,GAAG,SAAS,CAC7B,OAAO,CAAC,QAAQ,EAChB,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,EAC9C,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,CACvE,CAAC;gBACF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/B,UAAU,CAAC,8DAA8D,CAAC,CAAC;oBAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,SAAS,CAAC,qCAAqC,CAAC,CAAC;YAEjD,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC;YACnF,kEAAkE;YAClE,iEAAiE;YACjE,+DAA+D;YAC/D,+DAA+D;YAC/D,+DAA+D;YAC/D,iEAAiE;YACjE,gEAAgE;YAChE,iEAAiE;YACjE,oCAAoC;YACpC,MAAM,QAAQ,GAAsB;gBAClC,GAAG,OAAO,CAAC,GAAG;gBACd,aAAa,EAAE,SAAS;gBACxB,gBAAgB,EAAE,YAAY;gBAC9B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvE,CAAC;YACF,OAAO,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7F,IAAI,KAAK,CAAC,QAAQ;gBAAE,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;YAE5E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChC,KAAK,CACH,OAAO,CAAC,QAAQ,EAChB;gBACE,OAAO;gBACP,OAAO;gBACP,OAAO;gBACP,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD,EACD,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CACpC,CAAC;YACF,OAAO;QACT,CAAC;QAED,4EAA4E;QAC5E,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;YACrE,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YAE3D,IAAI,WAAW,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC9C,UAAU,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,6GAA6G,CAAC,CAAC,CAAC;gBAC3I,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,WAAW,EAAE,CAAC;YACtE,OAAO,CAAC,SAAS,EAAE,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC/E,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAElC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,QAAQ,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,UAAU,CAAC,4BAA4B,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;;AAGH,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
/**
|
|
3
|
+
* `os i18n extract` — scaffold translation skeletons.
|
|
4
|
+
*
|
|
5
|
+
* Walks the normalized stack config and emits ready-to-edit `TranslationData`
|
|
6
|
+
* fragments for every requested locale. Designed as the companion to
|
|
7
|
+
* `os i18n check`: extract bootstraps the bundle, check validates it.
|
|
8
|
+
*/
|
|
9
|
+
export default class I18nExtract extends Command {
|
|
10
|
+
static description: string;
|
|
11
|
+
static examples: string[];
|
|
12
|
+
static args: {
|
|
13
|
+
config: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
14
|
+
};
|
|
15
|
+
static flags: {
|
|
16
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
'default-locale': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
locales: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
fill: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
filter: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
|
+
out: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
|
+
'no-merge': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
23
|
+
'objects-only': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
24
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
25
|
+
};
|
|
26
|
+
run(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../src/commands/i18n/extract.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAgBnD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,OAAgB,WAAW,SACkH;IAE7I,OAAgB,QAAQ,WAMtB;IAEF,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;;MAiCnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8F3B"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { normalizeStackInput } from '@objectstack/spec';
|
|
7
|
+
import { loadConfig } from '../../utils/config.js';
|
|
8
|
+
import { printHeader, printSuccess, printError, printInfo, printStep, createTimer, } from '../../utils/format.js';
|
|
9
|
+
import { extractTranslations, renderTranslationModule } from '../../utils/i18n-extract.js';
|
|
10
|
+
const FILL_STRATEGIES = ['empty', 'default', 'todo'];
|
|
11
|
+
/**
|
|
12
|
+
* `os i18n extract` — scaffold translation skeletons.
|
|
13
|
+
*
|
|
14
|
+
* Walks the normalized stack config and emits ready-to-edit `TranslationData`
|
|
15
|
+
* fragments for every requested locale. Designed as the companion to
|
|
16
|
+
* `os i18n check`: extract bootstraps the bundle, check validates it.
|
|
17
|
+
*/
|
|
18
|
+
export default class I18nExtract extends Command {
|
|
19
|
+
static description = 'Scaffold per-locale translation skeletons from a stack config. Default locale is filled from schema labels; other locales follow --fill.';
|
|
20
|
+
static examples = [
|
|
21
|
+
'$ os i18n extract',
|
|
22
|
+
'$ os i18n extract --locales=zh-CN,ja-JP,es-ES',
|
|
23
|
+
'$ os i18n extract --filter="^sys_" --out=./src/translations',
|
|
24
|
+
'$ os i18n extract --fill=default --out=./src/translations',
|
|
25
|
+
'$ os i18n extract --json',
|
|
26
|
+
];
|
|
27
|
+
static args = {
|
|
28
|
+
config: Args.string({ description: 'Configuration file path', required: false }),
|
|
29
|
+
};
|
|
30
|
+
static flags = {
|
|
31
|
+
json: Flags.boolean({ description: 'Output JSON instead of writing files' }),
|
|
32
|
+
'default-locale': Flags.string({
|
|
33
|
+
description: 'Locale filled from schema labels',
|
|
34
|
+
default: 'en',
|
|
35
|
+
}),
|
|
36
|
+
locales: Flags.string({
|
|
37
|
+
description: 'Comma-separated list of locales to emit (always includes default-locale)',
|
|
38
|
+
}),
|
|
39
|
+
fill: Flags.string({
|
|
40
|
+
description: 'How non-default locales are filled: empty | default | todo',
|
|
41
|
+
default: 'empty',
|
|
42
|
+
options: FILL_STRATEGIES,
|
|
43
|
+
}),
|
|
44
|
+
filter: Flags.string({
|
|
45
|
+
description: 'Regex; only entries matching objectName, appName or path are emitted',
|
|
46
|
+
}),
|
|
47
|
+
out: Flags.string({
|
|
48
|
+
description: 'Directory to write <locale>.objects.generated.ts files into',
|
|
49
|
+
}),
|
|
50
|
+
'no-merge': Flags.boolean({
|
|
51
|
+
description: 'Do not merge against existing translations — emit every expected key',
|
|
52
|
+
default: false,
|
|
53
|
+
}),
|
|
54
|
+
'objects-only': Flags.boolean({
|
|
55
|
+
description: 'Emit only the objects/globalActions subtree (default). Disable to include apps/dashboards.',
|
|
56
|
+
default: true,
|
|
57
|
+
allowNo: true,
|
|
58
|
+
}),
|
|
59
|
+
'dry-run': Flags.boolean({
|
|
60
|
+
description: 'Print to stdout instead of writing to --out',
|
|
61
|
+
default: false,
|
|
62
|
+
}),
|
|
63
|
+
};
|
|
64
|
+
async run() {
|
|
65
|
+
const { args, flags } = await this.parse(I18nExtract);
|
|
66
|
+
const timer = createTimer();
|
|
67
|
+
if (!flags.json) {
|
|
68
|
+
printHeader('I18n Extract');
|
|
69
|
+
printStep('Loading configuration...');
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const { config, absolutePath } = await loadConfig(args.config);
|
|
73
|
+
if (!flags.json)
|
|
74
|
+
printInfo(`Config: ${chalk.white(absolutePath)}`);
|
|
75
|
+
const normalized = normalizeStackInput(config);
|
|
76
|
+
const filter = flags.filter ? new RegExp(flags.filter) : undefined;
|
|
77
|
+
const locales = flags.locales
|
|
78
|
+
? flags.locales.split(',').map((s) => s.trim()).filter(Boolean)
|
|
79
|
+
: undefined;
|
|
80
|
+
const result = extractTranslations(normalized, {
|
|
81
|
+
defaultLocale: flags['default-locale'],
|
|
82
|
+
locales,
|
|
83
|
+
fill: flags.fill,
|
|
84
|
+
filter,
|
|
85
|
+
mergeExisting: !flags['no-merge'],
|
|
86
|
+
});
|
|
87
|
+
const localesEmitted = Object.keys(result.bundles);
|
|
88
|
+
const objectsOnly = flags['objects-only'];
|
|
89
|
+
if (flags.json) {
|
|
90
|
+
console.log(JSON.stringify({
|
|
91
|
+
totalExpected: result.totalExpected,
|
|
92
|
+
counts: result.counts,
|
|
93
|
+
bundles: objectsOnly
|
|
94
|
+
? Object.fromEntries(localesEmitted.map((l) => [l, result.bundles[l].objects ?? {}]))
|
|
95
|
+
: result.bundles,
|
|
96
|
+
duration: timer.elapsed(),
|
|
97
|
+
}, null, 2));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
console.log('');
|
|
101
|
+
console.log(chalk.bold(' Skeleton summary'));
|
|
102
|
+
const nameWidth = Math.max(8, ...localesEmitted.map((l) => l.length));
|
|
103
|
+
for (const locale of localesEmitted) {
|
|
104
|
+
const n = result.counts[locale];
|
|
105
|
+
const tone = n === 0 ? chalk.green : chalk.yellow;
|
|
106
|
+
console.log(` ${locale.padEnd(nameWidth)} ${tone(String(n).padStart(5))} key(s)` +
|
|
107
|
+
chalk.dim(` (of ${result.totalExpected} expected)`));
|
|
108
|
+
}
|
|
109
|
+
console.log('');
|
|
110
|
+
if (flags['dry-run'] || !flags.out) {
|
|
111
|
+
for (const locale of localesEmitted) {
|
|
112
|
+
if (result.counts[locale] === 0)
|
|
113
|
+
continue;
|
|
114
|
+
console.log(chalk.dim(`── ${locale} ──`));
|
|
115
|
+
console.log(renderTranslationModule(result.bundles[locale], {
|
|
116
|
+
locale,
|
|
117
|
+
objectsOnly,
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
printInfo('Dry run — no files written (pass --out=<dir> to write).');
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const outDir = path.resolve(process.cwd(), flags.out);
|
|
124
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
125
|
+
let written = 0;
|
|
126
|
+
for (const locale of localesEmitted) {
|
|
127
|
+
if (result.counts[locale] === 0)
|
|
128
|
+
continue;
|
|
129
|
+
const file = path.join(outDir, `${locale}.objects.generated.ts`);
|
|
130
|
+
fs.writeFileSync(file, renderTranslationModule(result.bundles[locale], { locale, objectsOnly }), 'utf8');
|
|
131
|
+
written += 1;
|
|
132
|
+
printInfo(`Wrote ${chalk.white(path.relative(process.cwd(), file))} (${result.counts[locale]} keys)`);
|
|
133
|
+
}
|
|
134
|
+
console.log('');
|
|
135
|
+
printSuccess(`Generated ${written} file(s) ${chalk.dim(`(${timer.display()})`)}`);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (flags.json) {
|
|
139
|
+
console.log(JSON.stringify({ error: error.message }));
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
console.log('');
|
|
143
|
+
printError(error.message || String(error));
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/commands/i18n/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* I18n Extractor
|
|
3
|
+
*
|
|
4
|
+
* Companion to `i18n-coverage.ts`. Where coverage *detects* missing keys,
|
|
5
|
+
* extract *scaffolds* the bundle: it walks a normalized stack config and
|
|
6
|
+
* produces ready-to-edit `TranslationData` skeletons for every requested
|
|
7
|
+
* locale, pre-populated with the source labels from the schema for the
|
|
8
|
+
* default locale.
|
|
9
|
+
*
|
|
10
|
+
* Walk surface (kept superset-aligned with the coverage detector plus the
|
|
11
|
+
* known coverage gap of object-nested `listViews` / inline `actions`):
|
|
12
|
+
*
|
|
13
|
+
* objects.<name>.label
|
|
14
|
+
* objects.<name>.pluralLabel
|
|
15
|
+
* objects.<name>.description
|
|
16
|
+
* objects.<name>.fields.<field>.label
|
|
17
|
+
* objects.<name>.fields.<field>.help
|
|
18
|
+
* objects.<name>.fields.<field>.placeholder
|
|
19
|
+
* objects.<name>.fields.<field>.options.<value>
|
|
20
|
+
* objects.<name>._views.<view>.label
|
|
21
|
+
* objects.<name>._views.<view>.description
|
|
22
|
+
* objects.<name>._actions.<action>.label
|
|
23
|
+
* objects.<name>._actions.<action>.confirmText
|
|
24
|
+
* objects.<name>._actions.<action>.successMessage
|
|
25
|
+
* globalActions.<action>.label / .confirmText / .successMessage
|
|
26
|
+
* apps.<app>.label / .description
|
|
27
|
+
* apps.<app>.navigation.<id>.label
|
|
28
|
+
* dashboards.<dash>.label / .description
|
|
29
|
+
* dashboards.<dash>.widgets.<w>.title / .description
|
|
30
|
+
*
|
|
31
|
+
* Pure: no filesystem or network. Safe to call from the CLI, IDE tooling
|
|
32
|
+
* and unit tests.
|
|
33
|
+
*/
|
|
34
|
+
import type { TranslationData } from '@objectstack/spec/system';
|
|
35
|
+
/** A single translation entry — path + source value carried from the schema. */
|
|
36
|
+
export interface ExpectedEntry {
|
|
37
|
+
/** Lookup path expressed as an array of segments. */
|
|
38
|
+
path: string[];
|
|
39
|
+
/** Source-of-truth string (typically the English literal on the schema). */
|
|
40
|
+
sourceValue: string;
|
|
41
|
+
/** What kind of metadata this entry was harvested from. */
|
|
42
|
+
source: 'object' | 'field' | 'option' | 'view' | 'action' | 'globalAction' | 'app' | 'navigation' | 'dashboard' | 'widget';
|
|
43
|
+
/** Object name when applicable (for `--filter` matching). */
|
|
44
|
+
objectName?: string;
|
|
45
|
+
/** App name when applicable (for `--filter` matching). */
|
|
46
|
+
appName?: string;
|
|
47
|
+
}
|
|
48
|
+
export type FillStrategy = 'empty' | 'default' | 'todo';
|
|
49
|
+
export interface ExtractOptions {
|
|
50
|
+
/** Default locale (filled with source values). Defaults to `'en'`. */
|
|
51
|
+
defaultLocale?: string;
|
|
52
|
+
/** Locales to emit. Defaults to `[defaultLocale]`. */
|
|
53
|
+
locales?: string[];
|
|
54
|
+
/**
|
|
55
|
+
* How to populate values for non-default locales:
|
|
56
|
+
* - `'empty'` → empty string (default)
|
|
57
|
+
* - `'default'` → copy source value verbatim
|
|
58
|
+
* - `'todo'` → source value with a `[TODO] ` prefix
|
|
59
|
+
*/
|
|
60
|
+
fill?: FillStrategy;
|
|
61
|
+
/**
|
|
62
|
+
* Regex filter applied against `objectName` / `appName` / `dashboard` / view
|
|
63
|
+
* / action identifiers. When provided, only matching entries are emitted.
|
|
64
|
+
*/
|
|
65
|
+
filter?: RegExp;
|
|
66
|
+
/**
|
|
67
|
+
* When true, entries that already exist in any of the stack's
|
|
68
|
+
* `translations` bundles for a given locale are *omitted* for that locale.
|
|
69
|
+
* This makes extract idempotent — re-running only fills the gaps.
|
|
70
|
+
*/
|
|
71
|
+
mergeExisting?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface ExtractResult {
|
|
74
|
+
/** Locale → TranslationData skeleton (only the entries we emitted). */
|
|
75
|
+
bundles: Record<string, TranslationData>;
|
|
76
|
+
/** Locale → number of keys emitted. */
|
|
77
|
+
counts: Record<string, number>;
|
|
78
|
+
/** Total expected entries before per-locale merge filtering. */
|
|
79
|
+
totalExpected: number;
|
|
80
|
+
}
|
|
81
|
+
/** Collect every translatable entry from a normalized stack config. */
|
|
82
|
+
export declare function collectExpectedEntries(config: any): ExpectedEntry[];
|
|
83
|
+
/**
|
|
84
|
+
* Build per-locale skeleton bundles from a normalized stack config.
|
|
85
|
+
*/
|
|
86
|
+
export declare function extractTranslations(config: any, opts?: ExtractOptions): ExtractResult;
|
|
87
|
+
/**
|
|
88
|
+
* Render a TranslationData skeleton as a TypeScript module body.
|
|
89
|
+
*
|
|
90
|
+
* The module exports a single named const (`<exportName>`) typed as
|
|
91
|
+
* `TranslationData['objects']` (or the full `TranslationData` shape when
|
|
92
|
+
* the skeleton contains non-objects sections).
|
|
93
|
+
*/
|
|
94
|
+
export declare function renderTranslationModule(data: TranslationData, options: {
|
|
95
|
+
locale: string;
|
|
96
|
+
exportName?: string;
|
|
97
|
+
/** When true, emit only the `objects` sub-tree (typed accordingly). */
|
|
98
|
+
objectsOnly?: boolean;
|
|
99
|
+
/** Header comment lines. */
|
|
100
|
+
header?: string[];
|
|
101
|
+
}): string;
|
|
102
|
+
//# sourceMappingURL=i18n-extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-extract.d.ts","sourceRoot":"","sources":["../../src/utils/i18n-extract.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAqB,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAInF,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,MAAM,EACF,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,cAAc,GACd,KAAK,GACL,YAAY,GACZ,WAAW,GACX,QAAQ,CAAC;IACb,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,gEAAgE;IAChE,aAAa,EAAE,MAAM,CAAC;CACvB;AAmBD,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,EAAE,CAwJnE;AAkED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,GAAE,cAAmB,GAAG,aAAa,CA2CzF;AAID;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,GACA,MAAM,CAyBR"}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
// ─── Walk helpers ──────────────────────────────────────────────────────
|
|
3
|
+
function viewObjectName(view) {
|
|
4
|
+
return view?.objectName ?? view?.object ?? view?.data?.object;
|
|
5
|
+
}
|
|
6
|
+
function pushEntry(out, path, sourceValue, source, extra) {
|
|
7
|
+
if (typeof sourceValue !== 'string')
|
|
8
|
+
return;
|
|
9
|
+
out.push({ path, sourceValue, source, ...extra });
|
|
10
|
+
}
|
|
11
|
+
/** Collect every translatable entry from a normalized stack config. */
|
|
12
|
+
export function collectExpectedEntries(config) {
|
|
13
|
+
const out = [];
|
|
14
|
+
// ── Objects ───────────────────────────────────────────────────────
|
|
15
|
+
const objects = Array.isArray(config?.objects) ? config.objects : [];
|
|
16
|
+
for (const obj of objects) {
|
|
17
|
+
if (!obj?.name)
|
|
18
|
+
continue;
|
|
19
|
+
const objectName = obj.name;
|
|
20
|
+
pushEntry(out, ['objects', objectName, 'label'], obj.label ?? objectName, 'object', { objectName });
|
|
21
|
+
if (obj.pluralLabel) {
|
|
22
|
+
pushEntry(out, ['objects', objectName, 'pluralLabel'], obj.pluralLabel, 'object', { objectName });
|
|
23
|
+
}
|
|
24
|
+
if (obj.description) {
|
|
25
|
+
pushEntry(out, ['objects', objectName, 'description'], obj.description, 'object', { objectName });
|
|
26
|
+
}
|
|
27
|
+
// Fields (always a record on normalized schemas)
|
|
28
|
+
if (obj.fields && typeof obj.fields === 'object') {
|
|
29
|
+
for (const [fieldName, raw] of Object.entries(obj.fields)) {
|
|
30
|
+
const field = raw ?? {};
|
|
31
|
+
pushEntry(out, ['objects', objectName, 'fields', fieldName, 'label'], field.label ?? fieldName, 'field', { objectName });
|
|
32
|
+
const help = field.help ?? field.description;
|
|
33
|
+
if (help) {
|
|
34
|
+
pushEntry(out, ['objects', objectName, 'fields', fieldName, 'help'], help, 'field', { objectName });
|
|
35
|
+
}
|
|
36
|
+
if (field.placeholder) {
|
|
37
|
+
pushEntry(out, ['objects', objectName, 'fields', fieldName, 'placeholder'], field.placeholder, 'field', { objectName });
|
|
38
|
+
}
|
|
39
|
+
// Options — accept either `{value, label}[]` arrays or a record map.
|
|
40
|
+
const opts = field.options;
|
|
41
|
+
if (Array.isArray(opts)) {
|
|
42
|
+
for (const opt of opts) {
|
|
43
|
+
if (opt && typeof opt === 'object' && 'value' in opt) {
|
|
44
|
+
pushEntry(out, ['objects', objectName, 'fields', fieldName, 'options', String(opt.value)], String(opt.label ?? opt.value), 'option', { objectName });
|
|
45
|
+
}
|
|
46
|
+
else if (typeof opt === 'string') {
|
|
47
|
+
pushEntry(out, ['objects', objectName, 'fields', fieldName, 'options', opt], opt, 'option', { objectName });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (opts && typeof opts === 'object') {
|
|
52
|
+
for (const [value, label] of Object.entries(opts)) {
|
|
53
|
+
pushEntry(out, ['objects', objectName, 'fields', fieldName, 'options', value], typeof label === 'string' ? label : String(value), 'option', { objectName });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Object-nested listViews (object-protocol view bundle).
|
|
59
|
+
if (obj.listViews && typeof obj.listViews === 'object') {
|
|
60
|
+
for (const [viewName, raw] of Object.entries(obj.listViews)) {
|
|
61
|
+
const view = raw ?? {};
|
|
62
|
+
pushEntry(out, ['objects', objectName, '_views', viewName, 'label'], view.label ?? viewName, 'view', { objectName });
|
|
63
|
+
if (view.description) {
|
|
64
|
+
pushEntry(out, ['objects', objectName, '_views', viewName, 'description'], view.description, 'view', { objectName });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Inline object-level actions (some schemas declare them on the object).
|
|
69
|
+
if (Array.isArray(obj.actions)) {
|
|
70
|
+
for (const action of obj.actions) {
|
|
71
|
+
if (!action?.name)
|
|
72
|
+
continue;
|
|
73
|
+
const aname = action.name;
|
|
74
|
+
pushEntry(out, ['objects', objectName, '_actions', aname, 'label'], action.label ?? aname, 'action', { objectName });
|
|
75
|
+
if (action.confirmText) {
|
|
76
|
+
pushEntry(out, ['objects', objectName, '_actions', aname, 'confirmText'], action.confirmText, 'action', { objectName });
|
|
77
|
+
}
|
|
78
|
+
if (action.successMessage) {
|
|
79
|
+
pushEntry(out, ['objects', objectName, '_actions', aname, 'successMessage'], action.successMessage, 'action', { objectName });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ── Top-level views (legacy / cross-object) ──────────────────────
|
|
85
|
+
const views = Array.isArray(config?.views) ? config.views : [];
|
|
86
|
+
for (const view of views) {
|
|
87
|
+
if (!view?.name)
|
|
88
|
+
continue;
|
|
89
|
+
const objectName = viewObjectName(view);
|
|
90
|
+
if (!objectName)
|
|
91
|
+
continue;
|
|
92
|
+
pushEntry(out, ['objects', objectName, '_views', view.name, 'label'], view.label ?? view.name, 'view', { objectName });
|
|
93
|
+
if (view.description) {
|
|
94
|
+
pushEntry(out, ['objects', objectName, '_views', view.name, 'description'], view.description, 'view', { objectName });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// ── Top-level actions ────────────────────────────────────────────
|
|
98
|
+
const actions = Array.isArray(config?.actions) ? config.actions : [];
|
|
99
|
+
for (const action of actions) {
|
|
100
|
+
if (!action?.name)
|
|
101
|
+
continue;
|
|
102
|
+
const objectName = action.objectName ?? action.object;
|
|
103
|
+
const root = objectName
|
|
104
|
+
? ['objects', objectName, '_actions', action.name]
|
|
105
|
+
: ['globalActions', action.name];
|
|
106
|
+
const kind = objectName ? 'action' : 'globalAction';
|
|
107
|
+
pushEntry(out, [...root, 'label'], action.label ?? action.name, kind, { objectName });
|
|
108
|
+
if (action.confirmText) {
|
|
109
|
+
pushEntry(out, [...root, 'confirmText'], action.confirmText, kind, { objectName });
|
|
110
|
+
}
|
|
111
|
+
if (action.successMessage) {
|
|
112
|
+
pushEntry(out, [...root, 'successMessage'], action.successMessage, kind, { objectName });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ── Apps + navigation ────────────────────────────────────────────
|
|
116
|
+
const apps = Array.isArray(config?.apps) ? config.apps : [];
|
|
117
|
+
for (const app of apps) {
|
|
118
|
+
if (!app?.name)
|
|
119
|
+
continue;
|
|
120
|
+
const appName = app.name;
|
|
121
|
+
if (app.label)
|
|
122
|
+
pushEntry(out, ['apps', appName, 'label'], app.label, 'app', { appName });
|
|
123
|
+
if (app.description) {
|
|
124
|
+
pushEntry(out, ['apps', appName, 'description'], app.description, 'app', { appName });
|
|
125
|
+
}
|
|
126
|
+
const nav = Array.isArray(app.navigation) ? app.navigation : [];
|
|
127
|
+
walkNavigation(nav, appName, out);
|
|
128
|
+
}
|
|
129
|
+
// ── Dashboards + widgets ─────────────────────────────────────────
|
|
130
|
+
const dashboards = Array.isArray(config?.dashboards) ? config.dashboards : [];
|
|
131
|
+
for (const dash of dashboards) {
|
|
132
|
+
if (!dash?.name)
|
|
133
|
+
continue;
|
|
134
|
+
const name = dash.name;
|
|
135
|
+
if (dash.label)
|
|
136
|
+
pushEntry(out, ['dashboards', name, 'label'], dash.label, 'dashboard');
|
|
137
|
+
if (dash.description) {
|
|
138
|
+
pushEntry(out, ['dashboards', name, 'description'], dash.description, 'dashboard');
|
|
139
|
+
}
|
|
140
|
+
const widgets = Array.isArray(dash.widgets) ? dash.widgets : [];
|
|
141
|
+
for (const w of widgets) {
|
|
142
|
+
if (!w?.id && !w?.name)
|
|
143
|
+
continue;
|
|
144
|
+
const wid = (w.id ?? w.name);
|
|
145
|
+
if (w.title)
|
|
146
|
+
pushEntry(out, ['dashboards', name, 'widgets', wid, 'title'], w.title, 'widget');
|
|
147
|
+
if (w.description) {
|
|
148
|
+
pushEntry(out, ['dashboards', name, 'widgets', wid, 'description'], w.description, 'widget');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return out;
|
|
153
|
+
}
|
|
154
|
+
function walkNavigation(nav, appName, out) {
|
|
155
|
+
for (const item of nav) {
|
|
156
|
+
if (!item)
|
|
157
|
+
continue;
|
|
158
|
+
const id = item.id ?? item.name;
|
|
159
|
+
if (id && item.label) {
|
|
160
|
+
pushEntry(out, ['apps', appName, 'navigation', id, 'label'], item.label, 'navigation', { appName });
|
|
161
|
+
}
|
|
162
|
+
if (Array.isArray(item.items))
|
|
163
|
+
walkNavigation(item.items, appName, out);
|
|
164
|
+
if (Array.isArray(item.children))
|
|
165
|
+
walkNavigation(item.children, appName, out);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// ─── Filter + bundle assembly ──────────────────────────────────────────
|
|
169
|
+
function passesFilter(entry, filter) {
|
|
170
|
+
if (!filter)
|
|
171
|
+
return true;
|
|
172
|
+
if (entry.objectName && filter.test(entry.objectName))
|
|
173
|
+
return true;
|
|
174
|
+
if (entry.appName && filter.test(entry.appName))
|
|
175
|
+
return true;
|
|
176
|
+
// Allow matching against the joined path so users can target e.g. ^dashboards\.system_
|
|
177
|
+
return filter.test(entry.path.join('.'));
|
|
178
|
+
}
|
|
179
|
+
function setDeep(data, path, value) {
|
|
180
|
+
let cur = data;
|
|
181
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
182
|
+
const seg = path[i];
|
|
183
|
+
if (typeof cur[seg] !== 'object' || cur[seg] === null)
|
|
184
|
+
cur[seg] = {};
|
|
185
|
+
cur = cur[seg];
|
|
186
|
+
}
|
|
187
|
+
cur[path[path.length - 1]] = value;
|
|
188
|
+
}
|
|
189
|
+
function lookupDeep(data, path) {
|
|
190
|
+
let cur = data;
|
|
191
|
+
for (const seg of path) {
|
|
192
|
+
if (!cur || typeof cur !== 'object')
|
|
193
|
+
return undefined;
|
|
194
|
+
cur = cur[seg];
|
|
195
|
+
}
|
|
196
|
+
return typeof cur === 'string' && cur.length > 0 ? cur : undefined;
|
|
197
|
+
}
|
|
198
|
+
function mergeBundles(bundles) {
|
|
199
|
+
const out = {};
|
|
200
|
+
for (const bundle of bundles) {
|
|
201
|
+
if (!bundle || typeof bundle !== 'object')
|
|
202
|
+
continue;
|
|
203
|
+
for (const [locale, data] of Object.entries(bundle)) {
|
|
204
|
+
if (!data || typeof data !== 'object')
|
|
205
|
+
continue;
|
|
206
|
+
out[locale] = deepMerge(out[locale] ?? {}, data);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return out;
|
|
210
|
+
}
|
|
211
|
+
function deepMerge(target, source) {
|
|
212
|
+
for (const [k, v] of Object.entries(source)) {
|
|
213
|
+
if (v && typeof v === 'object' && !Array.isArray(v)) {
|
|
214
|
+
target[k] = deepMerge((target[k] ?? {}), v);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
target[k] = v;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return target;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Build per-locale skeleton bundles from a normalized stack config.
|
|
224
|
+
*/
|
|
225
|
+
export function extractTranslations(config, opts = {}) {
|
|
226
|
+
const defaultLocale = opts.defaultLocale ?? 'en';
|
|
227
|
+
const locales = opts.locales && opts.locales.length > 0
|
|
228
|
+
? Array.from(new Set([defaultLocale, ...opts.locales]))
|
|
229
|
+
: [defaultLocale];
|
|
230
|
+
const fill = opts.fill ?? 'empty';
|
|
231
|
+
const allEntries = collectExpectedEntries(config);
|
|
232
|
+
const entries = allEntries.filter((e) => passesFilter(e, opts.filter));
|
|
233
|
+
const existingBundles = Array.isArray(config?.translations) ? config.translations : [];
|
|
234
|
+
const existing = mergeBundles(existingBundles);
|
|
235
|
+
const bundles = {};
|
|
236
|
+
const counts = {};
|
|
237
|
+
for (const locale of locales) {
|
|
238
|
+
const data = {};
|
|
239
|
+
let count = 0;
|
|
240
|
+
for (const entry of entries) {
|
|
241
|
+
// Skip keys that already have a non-empty translation for this locale.
|
|
242
|
+
if (opts.mergeExisting !== false) {
|
|
243
|
+
const existingValue = lookupDeep(existing[locale], entry.path);
|
|
244
|
+
if (existingValue !== undefined)
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
let value;
|
|
248
|
+
if (locale === defaultLocale) {
|
|
249
|
+
value = entry.sourceValue;
|
|
250
|
+
}
|
|
251
|
+
else if (fill === 'default') {
|
|
252
|
+
value = entry.sourceValue;
|
|
253
|
+
}
|
|
254
|
+
else if (fill === 'todo') {
|
|
255
|
+
value = `[TODO] ${entry.sourceValue}`;
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
value = '';
|
|
259
|
+
}
|
|
260
|
+
setDeep(data, entry.path, value);
|
|
261
|
+
count += 1;
|
|
262
|
+
}
|
|
263
|
+
bundles[locale] = data;
|
|
264
|
+
counts[locale] = count;
|
|
265
|
+
}
|
|
266
|
+
return { bundles, counts, totalExpected: entries.length };
|
|
267
|
+
}
|
|
268
|
+
// ─── Serialization ─────────────────────────────────────────────────────
|
|
269
|
+
/**
|
|
270
|
+
* Render a TranslationData skeleton as a TypeScript module body.
|
|
271
|
+
*
|
|
272
|
+
* The module exports a single named const (`<exportName>`) typed as
|
|
273
|
+
* `TranslationData['objects']` (or the full `TranslationData` shape when
|
|
274
|
+
* the skeleton contains non-objects sections).
|
|
275
|
+
*/
|
|
276
|
+
export function renderTranslationModule(data, options) {
|
|
277
|
+
const exportName = options.exportName ?? `${camelize(options.locale)}Objects`;
|
|
278
|
+
const objectsOnly = options.objectsOnly ?? true;
|
|
279
|
+
const payload = objectsOnly ? (data.objects ?? {}) : data;
|
|
280
|
+
const typeSig = objectsOnly
|
|
281
|
+
? "NonNullable<TranslationData['objects']>"
|
|
282
|
+
: 'TranslationData';
|
|
283
|
+
const header = options.header ?? [
|
|
284
|
+
`Auto-generated by 'os i18n extract' for locale '${options.locale}'.`,
|
|
285
|
+
'Edit translations in place; re-run extract (with --merge) to fill new gaps.',
|
|
286
|
+
'Do not hand-edit the structure — only the leaf string values.',
|
|
287
|
+
];
|
|
288
|
+
const lines = [];
|
|
289
|
+
lines.push('// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.');
|
|
290
|
+
lines.push('');
|
|
291
|
+
lines.push('/**');
|
|
292
|
+
for (const h of header)
|
|
293
|
+
lines.push(` * ${h}`);
|
|
294
|
+
lines.push(' */');
|
|
295
|
+
lines.push('');
|
|
296
|
+
lines.push("import type { TranslationData } from '@objectstack/spec/system';");
|
|
297
|
+
lines.push('');
|
|
298
|
+
lines.push(`export const ${exportName}: ${typeSig} = ${stringifyTs(payload, 0)};`);
|
|
299
|
+
lines.push('');
|
|
300
|
+
return lines.join('\n');
|
|
301
|
+
}
|
|
302
|
+
function camelize(locale) {
|
|
303
|
+
// 'zh-CN' → 'zhCN', 'ja-JP' → 'jaJP', 'es-ES' → 'esES'
|
|
304
|
+
return locale.replace(/-(.)/g, (_m, c) => c.toUpperCase());
|
|
305
|
+
}
|
|
306
|
+
function stringifyTs(value, indent) {
|
|
307
|
+
const pad = ' '.repeat(indent);
|
|
308
|
+
const pad2 = ' '.repeat(indent + 1);
|
|
309
|
+
if (value === null)
|
|
310
|
+
return 'null';
|
|
311
|
+
if (typeof value === 'string')
|
|
312
|
+
return JSON.stringify(value);
|
|
313
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
314
|
+
return String(value);
|
|
315
|
+
if (Array.isArray(value)) {
|
|
316
|
+
if (value.length === 0)
|
|
317
|
+
return '[]';
|
|
318
|
+
return '[\n' + value.map((v) => pad2 + stringifyTs(v, indent + 1)).join(',\n') + `\n${pad}]`;
|
|
319
|
+
}
|
|
320
|
+
if (typeof value === 'object') {
|
|
321
|
+
const entries = Object.entries(value);
|
|
322
|
+
if (entries.length === 0)
|
|
323
|
+
return '{}';
|
|
324
|
+
return '{\n' + entries.map(([k, v]) => `${pad2}${formatKey(k)}: ${stringifyTs(v, indent + 1)}`).join(',\n') + `\n${pad}}`;
|
|
325
|
+
}
|
|
326
|
+
return JSON.stringify(value);
|
|
327
|
+
}
|
|
328
|
+
const IDENT_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
|
|
329
|
+
function formatKey(key) {
|
|
330
|
+
return IDENT_RE.test(key) ? key : JSON.stringify(key);
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=i18n-extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-extract.js","sourceRoot":"","sources":["../../src/utils/i18n-extract.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@objectstack/cli",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "Command Line Interface for ObjectStack Protocol",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,48 +33,49 @@
|
|
|
33
33
|
"topicSeparator": " "
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@ai-sdk/gateway": "^3.0.
|
|
36
|
+
"@ai-sdk/gateway": "^3.0.119",
|
|
37
37
|
"@oclif/core": "^4.11.3",
|
|
38
38
|
"bundle-require": "^5.1.0",
|
|
39
39
|
"chalk": "^5.6.2",
|
|
40
|
+
"chokidar": "^5.0.0",
|
|
40
41
|
"dotenv-flow": "^4.1.0",
|
|
41
42
|
"esbuild": "^0.28.0",
|
|
42
43
|
"tsx": "^4.22.3",
|
|
43
44
|
"yaml": "^2.9.0",
|
|
44
45
|
"zod": "^4.4.3",
|
|
45
|
-
"@objectstack/client": "4.
|
|
46
|
-
"@objectstack/core": "4.
|
|
47
|
-
"@objectstack/driver-memory": "^4.
|
|
48
|
-
"@objectstack/driver-mongodb": "^4.
|
|
49
|
-
"@objectstack/driver-sql": "^4.
|
|
50
|
-
"@objectstack/driver-turso": "^4.
|
|
51
|
-
"@objectstack/objectql": "^4.
|
|
52
|
-
"@objectstack/plugin-approvals": "4.0
|
|
53
|
-
"@objectstack/plugin-audit": "4.
|
|
54
|
-
"@objectstack/plugin-auth": "4.
|
|
55
|
-
"@objectstack/plugin-email": "4.0
|
|
56
|
-
"@objectstack/plugin-hono-server": "4.
|
|
57
|
-
"@objectstack/plugin-mcp-server": "4.
|
|
58
|
-
"@objectstack/plugin-reports": "4.0
|
|
59
|
-
"@objectstack/plugin-security": "4.
|
|
60
|
-
"@objectstack/plugin-sharing": "4.0
|
|
61
|
-
"@objectstack/rest": "4.
|
|
62
|
-
"@objectstack/runtime": "^4.
|
|
63
|
-
"@objectstack/service-ai": "4.
|
|
64
|
-
"@objectstack/service-analytics": "4.
|
|
65
|
-
"@objectstack/service-automation": "4.
|
|
66
|
-
"@objectstack/service-cache": "4.
|
|
67
|
-
"@objectstack/service-feed": "4.
|
|
68
|
-
"@objectstack/service-job": "4.
|
|
69
|
-
"@objectstack/service-package": "4.
|
|
70
|
-
"@objectstack/service-queue": "4.
|
|
71
|
-
"@objectstack/service-realtime": "4.
|
|
72
|
-
"@objectstack/service-settings": "
|
|
73
|
-
"@objectstack/service-storage": "4.
|
|
74
|
-
"@objectstack/spec": "4.
|
|
46
|
+
"@objectstack/client": "4.2.0",
|
|
47
|
+
"@objectstack/core": "4.2.0",
|
|
48
|
+
"@objectstack/driver-memory": "^4.2.0",
|
|
49
|
+
"@objectstack/driver-mongodb": "^4.2.0",
|
|
50
|
+
"@objectstack/driver-sql": "^4.2.0",
|
|
51
|
+
"@objectstack/driver-turso": "^4.2.0",
|
|
52
|
+
"@objectstack/objectql": "^4.2.0",
|
|
53
|
+
"@objectstack/plugin-approvals": "4.2.0",
|
|
54
|
+
"@objectstack/plugin-audit": "4.2.0",
|
|
55
|
+
"@objectstack/plugin-auth": "4.2.0",
|
|
56
|
+
"@objectstack/plugin-email": "4.2.0",
|
|
57
|
+
"@objectstack/plugin-hono-server": "4.2.0",
|
|
58
|
+
"@objectstack/plugin-mcp-server": "4.2.0",
|
|
59
|
+
"@objectstack/plugin-reports": "4.2.0",
|
|
60
|
+
"@objectstack/plugin-security": "4.2.0",
|
|
61
|
+
"@objectstack/plugin-sharing": "4.2.0",
|
|
62
|
+
"@objectstack/rest": "4.2.0",
|
|
63
|
+
"@objectstack/runtime": "^4.2.0",
|
|
64
|
+
"@objectstack/service-ai": "4.2.0",
|
|
65
|
+
"@objectstack/service-analytics": "4.2.0",
|
|
66
|
+
"@objectstack/service-automation": "4.2.0",
|
|
67
|
+
"@objectstack/service-cache": "4.2.0",
|
|
68
|
+
"@objectstack/service-feed": "4.2.0",
|
|
69
|
+
"@objectstack/service-job": "4.2.0",
|
|
70
|
+
"@objectstack/service-package": "4.2.0",
|
|
71
|
+
"@objectstack/service-queue": "4.2.0",
|
|
72
|
+
"@objectstack/service-realtime": "4.2.0",
|
|
73
|
+
"@objectstack/service-settings": "4.2.0",
|
|
74
|
+
"@objectstack/service-storage": "4.2.0",
|
|
75
|
+
"@objectstack/spec": "4.2.0"
|
|
75
76
|
},
|
|
76
77
|
"peerDependencies": {
|
|
77
|
-
"@objectstack/core": "^4.
|
|
78
|
+
"@objectstack/core": "^4.2.0"
|
|
78
79
|
},
|
|
79
80
|
"devDependencies": {
|
|
80
81
|
"@oclif/plugin-help": "^6.2.49",
|