cabloy 5.1.220 → 5.1.222

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.
Files changed (87) hide show
  1. package/.cabloy-version +1 -1
  2. package/.github/workflows/agent-governance.yml +2 -2
  3. package/.github/workflows/create-cabloy.yml +2 -2
  4. package/.github/workflows/docs-pages.yml +2 -2
  5. package/.github/workflows/playwright-e2e.yml +4 -4
  6. package/.github/workflows/vona-cov-pg.yml +2 -2
  7. package/.github/workflows/vona-test-crud.yml +2 -2
  8. package/.github/workflows/vona-test-mysql.yml +2 -2
  9. package/.github/workflows/vona-test-pg.yml +2 -2
  10. package/.github/workflows/vona-test-sqlite3.yml +2 -2
  11. package/.github/workflows/vona-tsc.yml +2 -2
  12. package/.github/workflows/zova-ui.yml +2 -2
  13. package/CHANGELOG.md +22 -0
  14. package/package.json +4 -3
  15. package/repo-agent-governance/managed-assets.json +15 -15
  16. package/repo-agent-governance/policies/repository.md +1 -0
  17. package/repo-agent-governance/skills/cabloy-backend-scaffold/SKILL.md +5 -1
  18. package/repo-agent-governance/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +7 -5
  19. package/repo-agent-governance/skills/cabloy-frontend-scaffold/SKILL.md +5 -1
  20. package/repo-agent-governance/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +6 -4
  21. package/repo-docs/backend/unit-testing.md +5 -1
  22. package/repo-docs/frontend/openapi-sdk-guide.md +2 -0
  23. package/repo-docs/frontend/scripts.md +8 -0
  24. package/repo-docs/reference/repo-scripts.md +5 -1
  25. package/scripts/generateOpenapiIsolated.ts +18 -1
  26. package/scripts/runIsolatedTest.test.ts +9 -1
  27. package/scripts/runIsolatedTest.ts +81 -18
  28. package/scripts/strictGenerationDiagnostics.test.ts +1009 -0
  29. package/scripts/strictGenerationDiagnostics.ts +61 -0
  30. package/vona/package.original.json +3 -2
  31. package/vona/packages-cli/cabloy-cli/package.json +1 -1
  32. package/vona/packages-cli/cli/package.json +1 -1
  33. package/vona/packages-cli/cli-set-api/package.json +1 -1
  34. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.bin.dev.ts +14 -4
  35. package/vona/packages-cli/cli-set-api/src/lib/bean/toolsBin/generateEntryFiles.ts +6 -1
  36. package/vona/packages-cli/cli-set-api/src/lib/bean/toolsBin/generateVonaMeta.ts +2 -10
  37. package/vona/packages-cli/cli-set-api/src/lib/bean/toolsBin/validateGenerationPaths.ts +27 -0
  38. package/vona/packages-cli/cli-set-api/test/binDevLifecycle.test.ts +1 -1
  39. package/vona/packages-cli/cli-set-api/test/strictGenerationPrivacy.test.ts +439 -0
  40. package/vona/packages-utils/process-helper/package.json +1 -1
  41. package/vona/packages-utils/process-helper/src/index.test.ts +62 -0
  42. package/vona/packages-utils/process-helper/src/index.ts +9 -4
  43. package/vona/packages-vona/vona/package.json +1 -1
  44. package/vona/packages-vona/vona-core/package.json +1 -1
  45. package/vona/packages-vona/vona-core/src/lib/core/completedReadiness.test.ts +558 -0
  46. package/vona/packages-vona/vona-core/src/lib/core/completedReadiness.ts +389 -0
  47. package/vona/packages-vona/vona-core/src/lib/core/context.ts +3 -0
  48. package/vona/packages-vona/vona-core/src/lib/core/index.ts +11 -0
  49. package/vona/packages-vona/vona-core/src/lib/core/logger/appLogger.ts +10 -2
  50. package/vona/packages-vona/vona-core/src/lib/core/logger/diagnosticLogger.test.ts +268 -68
  51. package/vona/packages-vona/vona-core/src/lib/core/meta.ts +5 -0
  52. package/vona/packages-vona/vona-core/src/lib/core/testFreshness.ts +3 -9
  53. package/vona/packages-vona/vona-core/src/lib/core/testStrictMode.ts +9 -0
  54. package/vona/packages-vona/vona-core/src/lib/framework/start.test.ts +10 -0
  55. package/vona/packages-vona/vona-core/src/lib/framework/start.ts +8 -0
  56. package/vona/packages-vona/vona-mock/package.json +1 -1
  57. package/vona/pnpm-lock.yaml +542 -236
  58. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
  59. package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +1 -1
  60. package/vona/src/suite-vendor/a-vona/modules/a-executor/src/bean/bean.executor.ts +124 -4
  61. package/vona/src/suite-vendor/a-vona/modules/a-executor/src/types/executor.ts +7 -0
  62. package/vona/src/suite-vendor/a-vona/modules/a-executor/test/readyExisting.test.ts +423 -0
  63. package/vona/src/suite-vendor/a-vona/modules/a-executor/test/readyExistingCommit.test.ts +174 -0
  64. package/vona/src/suite-vendor/a-vona/modules/a-instance/package.json +1 -1
  65. package/vona/src/suite-vendor/a-vona/modules/a-instance/src/bean/bean.instance.ts +3 -1
  66. package/vona/src/suite-vendor/a-vona/modules/a-instance/src/lib/existingReadyAdmission.ts +125 -0
  67. package/vona/src/suite-vendor/a-vona/modules/a-instance/src/service/instance.ts +72 -25
  68. package/vona/src/suite-vendor/a-vona/modules/a-instance/test/existingReadyAdmission.test.ts +949 -0
  69. package/vona/src/suite-vendor/a-vona/modules/a-logger/package.json +1 -1
  70. package/vona/src/suite-vendor/a-vona/modules/a-logger/test/middlewareSystem.httpLog.test.ts +61 -59
  71. package/vona/src/suite-vendor/a-vona/modules/a-mail/package.json +1 -1
  72. package/vona/src/suite-vendor/a-vona/modules/a-mail/src/service/mail.ts +5 -0
  73. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +1 -1
  74. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/index.ts +11 -0
  75. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/lib/protectedSqliteRegistry.ts +356 -0
  76. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
  77. package/vona/src/suite-vendor/a-vona/modules/a-startup/test/devSeed.test.ts +61 -2
  78. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  79. package/zova/package.original.json +3 -3
  80. package/zova/packages-cli/cli/package.json +4 -4
  81. package/zova/packages-cli/cli-set-front/package.json +2 -2
  82. package/zova/packages-cli/cli-set-front/src/lib/common/restDependencyVersions.ts +22 -1
  83. package/zova/packages-cli/cli-set-front/test/restDependencies.test.ts +137 -0
  84. package/zova/packages-zova/zova/package.json +2 -2
  85. package/zova/pnpm-lock.yaml +448 -641
  86. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  87. package/zova/src/suite-vendor/a-zova/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-cli-set-front",
3
- "version": "1.2.114",
3
+ "version": "1.2.116",
4
4
  "gitHead": "6f675a8cc46d596142c591c28a40cc4d82fcc6cc",
5
5
  "description": "zova cli-set-front",
6
6
  "keywords": [
@@ -41,7 +41,7 @@
41
41
  "@babel/plugin-proposal-decorators": "^7.29.0",
42
42
  "@babel/plugin-transform-class-properties": "^7.28.6",
43
43
  "@babel/plugin-transform-typescript": "^7.28.6",
44
- "@cabloy/cli": "^3.1.29",
44
+ "@cabloy/cli": "^3.1.30",
45
45
  "@cabloy/extend": "^3.2.8",
46
46
  "@cabloy/module-info": "^2.0.3",
47
47
  "@cabloy/openapi-typescript": "^7.9.2",
@@ -29,7 +29,7 @@ export async function extractRestDependencyVersions(
29
29
  ): Promise<Record<string, string>> {
30
30
  const lockfilePath = path.join(projectPath, 'pnpm-lock.yaml');
31
31
  const lockfileContent = await fse.readFile(lockfilePath, 'utf8');
32
- const parsedLockfile = yaml.parse(lockfileContent) as ParsedLockfile;
32
+ const parsedLockfile = parseWorkspaceLockfile(lockfileContent);
33
33
  const depsVersion: Record<string, string> = {};
34
34
 
35
35
  for (const dep of deps) {
@@ -66,6 +66,27 @@ export async function extractRestDependencyVersions(
66
66
  return depsVersion;
67
67
  }
68
68
 
69
+ function parseWorkspaceLockfile(content: string): ParsedLockfile {
70
+ const documents = yaml.parseAllDocuments(content);
71
+ for (const document of documents) {
72
+ if (document.errors.length) throw document.errors[0];
73
+ }
74
+
75
+ // pnpm 12 places the workspace lock after its package-manager/config dependency lock.
76
+ const document = documents.findLast(({ contents }) => {
77
+ return (
78
+ contents !== null &&
79
+ !(yaml.isScalar(contents) && contents.value === null && contents.source === '')
80
+ );
81
+ });
82
+ if (!document || !yaml.isMap(document.contents) || !yaml.isMap(document.get('importers', true))) {
83
+ throw new Error(
84
+ 'Invalid pnpm-lock.yaml: expected a workspace document with an importers mapping.',
85
+ );
86
+ }
87
+ return document.toJS() as ParsedLockfile;
88
+ }
89
+
69
90
  function getPackageDependencyRangeFromLock(
70
91
  parsedLockfile: ParsedLockfile,
71
92
  packageName: string,
@@ -238,6 +238,143 @@ import Alias = Existing.Value;
238
238
  });
239
239
 
240
240
  describe('extractRestDependencyVersions', () => {
241
+ const managementLockfile = `---
242
+ lockfileVersion: '9.0'
243
+ importers:
244
+ .:
245
+ configDependencies: {}
246
+ packageManagerDependencies:
247
+ pnpm:
248
+ specifier: 12.14.0
249
+ version: 12.14.0
250
+ dependencies:
251
+ root-package:
252
+ version: 99.0.0
253
+ management-only:
254
+ version: 99.0.0
255
+ `;
256
+ const workspaceLockfile = `lockfileVersion: '9.0'
257
+ importers:
258
+ .:
259
+ dependencies:
260
+ root-package:
261
+ version: 1.2.3
262
+ alias-package:
263
+ specifier: npm:@scope/package@^2.0.0
264
+ version: '@scope/package@2.0.4'
265
+ src/module/example:
266
+ dependencies:
267
+ owned-package:
268
+ version: 3.1.7(vue@3.5.42)
269
+ `;
270
+
271
+ for (const trailingDocument of ['', '---\n# empty document\n']) {
272
+ it(`uses the workspace document of a pnpm 12 lockfile${trailingDocument ? ' with a trailing empty document' : ''}`, async () => {
273
+ await withFixture(async projectPath => {
274
+ await writeLockfile(
275
+ projectPath,
276
+ `${managementLockfile}---\n${workspaceLockfile}${trailingDocument}`,
277
+ );
278
+ assert.deepEqual(
279
+ await extractRestDependencyVersions(
280
+ projectPath,
281
+ ['root-package', 'alias-package', 'owned-package'],
282
+ ['src/module/example'],
283
+ ),
284
+ {
285
+ 'root-package': '^1.2.3',
286
+ 'alias-package': 'npm:@scope/package@^2.0.0',
287
+ 'owned-package': '^3.1.7',
288
+ },
289
+ );
290
+ for (const dependency of ['management-only', 'pnpm']) {
291
+ await assert.rejects(
292
+ extractRestDependencyVersions(projectPath, [dependency]),
293
+ /Unable to resolve REST dependency version/,
294
+ );
295
+ }
296
+ });
297
+ });
298
+ }
299
+
300
+ it('accepts a single workspace document with an explicit start marker', async () => {
301
+ await withFixture(async projectPath => {
302
+ await writeLockfile(projectPath, `---\n${workspaceLockfile}`);
303
+ assert.deepEqual(await extractRestDependencyVersions(projectPath, ['root-package']), {
304
+ 'root-package': '^1.2.3',
305
+ });
306
+ });
307
+ });
308
+
309
+ for (const [label, invalidDocument, code] of [
310
+ ['malformed YAML', 'importers: [\n', 'BAD_INDENT'],
311
+ ['duplicate keys', 'importers: {}\nimporters: {}\n', 'DUPLICATE_KEY'],
312
+ ]) {
313
+ for (const position of ['management', 'workspace']) {
314
+ it(`rejects ${label} in the ${position} document before installed-package fallback`, async () => {
315
+ await withFixture(async projectPath => {
316
+ const content =
317
+ position === 'management'
318
+ ? `${invalidDocument}---\n${workspaceLockfile}`
319
+ : `${managementLockfile}---\n${invalidDocument}`;
320
+ await writeLockfile(projectPath, content);
321
+ await writePackage(projectPath, 'node_modules/root-package', { version: '5.0.0' });
322
+ await assert.rejects(extractRestDependencyVersions(projectPath, ['root-package']), {
323
+ name: 'YAMLParseError',
324
+ code,
325
+ });
326
+ });
327
+ });
328
+ }
329
+ }
330
+
331
+ for (const [label, invalidDocument] of [
332
+ ['empty', ''],
333
+ ['comment-only', '# no lockfile\n'],
334
+ ['empty marked', '---\n# no lockfile\n'],
335
+ ['null', 'null\n'],
336
+ ['tilde null', '~\n'],
337
+ ['empty string', '""\n'],
338
+ ['scalar', 'invalid\n'],
339
+ ['sequence', '- invalid\n'],
340
+ ['missing importers', "lockfileVersion: '9.0'\n"],
341
+ ['null importers', 'importers: null\n'],
342
+ ['scalar importers', 'importers: invalid\n'],
343
+ ['sequence importers', 'importers: []\n'],
344
+ ]) {
345
+ it(`rejects a ${label} workspace document`, async () => {
346
+ await withFixture(async projectPath => {
347
+ await writePackage(projectPath, 'node_modules/root-package', { version: '5.0.0' });
348
+ await writeLockfile(projectPath, invalidDocument);
349
+ await assert.rejects(
350
+ extractRestDependencyVersions(projectPath, ['root-package']),
351
+ /Invalid pnpm-lock.yaml: expected a workspace document with an importers mapping/,
352
+ );
353
+ if (
354
+ invalidDocument.trim() &&
355
+ !invalidDocument.startsWith('#') &&
356
+ !invalidDocument.startsWith('---')
357
+ ) {
358
+ await writeLockfile(projectPath, `${workspaceLockfile}---\n${invalidDocument}`);
359
+ await assert.rejects(
360
+ extractRestDependencyVersions(projectPath, ['root-package']),
361
+ /Invalid pnpm-lock.yaml: expected a workspace document with an importers mapping/,
362
+ );
363
+ }
364
+ });
365
+ });
366
+ }
367
+
368
+ it('allows installed-package fallback with an empty workspace importer map', async () => {
369
+ await withFixture(async projectPath => {
370
+ await writeLockfile(projectPath, `${managementLockfile}---\nimporters: {}\n`);
371
+ await writePackage(projectPath, 'node_modules/root-package', { version: '5.0.0' });
372
+ assert.deepEqual(await extractRestDependencyVersions(projectPath, ['root-package']), {
373
+ 'root-package': '^5.0.0',
374
+ });
375
+ });
376
+ });
377
+
241
378
  it('uses the root importer range when the dependency is declared there', async () => {
242
379
  await withFixture(async projectPath => {
243
380
  await writeLockfile(
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova",
3
- "version": "5.1.172",
3
+ "version": "5.1.173",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A vue3 framework with ioc",
6
6
  "keywords": [
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "zova-core": "^5.1.93",
49
- "zova-suite-a-zova": "^5.1.171"
49
+ "zova-suite-a-zova": "^5.1.172"
50
50
  },
51
51
  "devDependencies": {
52
52
  "clean-package": "^2.2.0",