cabloy 5.1.77 → 5.1.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.78
4
+
5
+ ### Improvements
6
+
7
+ - Add a release compensation flow for `zova-core`.
8
+ - Publish the latest package updates.
9
+
3
10
  ## 5.1.77
4
11
 
5
12
  ### Improvements
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cabloy",
3
- "version": "5.1.77",
3
+ "version": "5.1.78",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A Node.js fullstack framework",
6
6
  "keywords": [
@@ -1,39 +1,100 @@
1
1
  import minimist from 'minimist';
2
2
  import { execSync } from 'node:child_process';
3
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
4
4
  import { dirname, resolve } from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
6
 
7
7
  // --- Constants ---
8
8
  const TAG_PREFIX = 'cabloy@';
9
9
  const GITHUB_REPO = 'cabloy/cabloy';
10
- const PACKAGE_JSON_PATH = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
11
- const CHANGELOG_PATH = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'CHANGELOG.md');
12
10
  const COMMIT_CAP = 200;
13
- // const ZOVA_DIR = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'zova');
14
- // const VONA_DIR = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'vona');
11
+ const RELEASE_SCRIPT_PATH = fileURLToPath(import.meta.url);
12
+ const ROOT_DIR = resolve(dirname(RELEASE_SCRIPT_PATH), '..');
13
+ const VONA_DIR = resolve(ROOT_DIR, 'vona');
14
+ const VONA_WORKSPACE_PATH = resolve(VONA_DIR, 'pnpm-workspace.yaml');
15
+ const VONA_PATCHES_DIR = resolve(VONA_DIR, 'patches');
16
+ const ZOVA_CORE_PACKAGE_JSON_PATH = resolve(
17
+ ROOT_DIR,
18
+ 'zova',
19
+ 'packages-zova',
20
+ 'zova-core',
21
+ 'package.json',
22
+ );
23
+ const PACKAGE_JSON_PATH = resolve(ROOT_DIR, 'package.json');
24
+ const CHANGELOG_PATH = resolve(ROOT_DIR, 'CHANGELOG.md');
25
+
26
+ interface ExecOptions {
27
+ cwd?: string;
28
+ env?: NodeJS.ProcessEnv;
29
+ }
15
30
 
16
31
  // --- Utility functions ---
17
- function exec(cmd: string, dryRun?: boolean): string {
32
+ function exec(cmd: string, dryRun?: boolean, options?: ExecOptions): string {
18
33
  if (dryRun) {
19
34
  // eslint-disable-next-line
20
35
  console.log(` [dry-run] ${cmd}`);
21
36
  return '';
22
37
  }
23
- return execSync(cmd, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
38
+ return execSync(cmd, {
39
+ cwd: options?.cwd || ROOT_DIR,
40
+ env: options?.env ? { ...process.env, ...options.env } : process.env,
41
+ encoding: 'utf-8',
42
+ stdio: ['pipe', 'pipe', 'pipe'],
43
+ }).trim();
44
+ }
45
+
46
+ function execInherited(cmd: string, dryRun?: boolean, options?: ExecOptions): void {
47
+ if (dryRun) {
48
+ // eslint-disable-next-line
49
+ console.log(` [dry-run] ${cmd}`);
50
+ return;
51
+ }
52
+ execSync(cmd, {
53
+ cwd: options?.cwd || ROOT_DIR,
54
+ env: options?.env ? { ...process.env, ...options.env } : process.env,
55
+ encoding: 'utf-8',
56
+ stdio: 'inherit',
57
+ });
58
+ }
59
+
60
+ function readJson(filePath: string): Record<string, any> {
61
+ return JSON.parse(readFileSync(filePath, 'utf-8'));
24
62
  }
25
63
 
26
64
  function readPackageJson(): Record<string, any> {
27
- return JSON.parse(readFileSync(PACKAGE_JSON_PATH, 'utf-8'));
65
+ return readJson(PACKAGE_JSON_PATH);
28
66
  }
29
67
 
30
68
  function writePackageJson(pkg: Record<string, any>): void {
31
69
  writeFileSync(PACKAGE_JSON_PATH, `${JSON.stringify(pkg, null, 2)}\n`);
32
70
  }
33
71
 
72
+ function isValidVersion(version: string): boolean {
73
+ return /^\d+\.\d+\.\d+$/.test(version);
74
+ }
75
+
76
+ function parseVersion(version: string): [number, number, number] {
77
+ if (!isValidVersion(version)) {
78
+ throw new Error(`Invalid version: ${version}`);
79
+ }
80
+ const [major, minor, patch] = version.split('.').map(item => Number.parseInt(item, 10));
81
+ return [major, minor, patch];
82
+ }
83
+
84
+ function compareVersions(left: string, right: string): number {
85
+ const leftParts = parseVersion(left);
86
+ const rightParts = parseVersion(right);
87
+ for (let i = 0; i < leftParts.length; i++) {
88
+ if (leftParts[i] > rightParts[i]) return 1;
89
+ if (leftParts[i] < rightParts[i]) return -1;
90
+ }
91
+ return 0;
92
+ }
93
+
34
94
  function getLastTag(): string | null {
35
95
  try {
36
96
  const result = execSync(`git tag -l '${TAG_PREFIX}*' --sort=-v:refname`, {
97
+ cwd: ROOT_DIR,
37
98
  encoding: 'utf-8',
38
99
  }).trim();
39
100
  const tags = result.split('\n').filter(Boolean);
@@ -51,7 +112,7 @@ interface CommitInfo {
51
112
  function getCommitsSinceTag(tag: string | null): CommitInfo[] {
52
113
  const range = tag ? `${tag}..HEAD` : 'HEAD';
53
114
  const logCmd = `git log ${range} --pretty=format:"%h|||%s" --no-merges -${COMMIT_CAP}`;
54
- const result = execSync(logCmd, { encoding: 'utf-8' }).trim();
115
+ const result = execSync(logCmd, { cwd: ROOT_DIR, encoding: 'utf-8' }).trim();
55
116
  if (!result) return [];
56
117
  return result.split('\n').map(line => {
57
118
  const [hash, subject] = line.split('|||');
@@ -79,9 +140,107 @@ function getToday(): string {
79
140
  return new Date().toISOString().split('T')[0];
80
141
  }
81
142
 
143
+ function getPatchFilePath(version: string): string {
144
+ return resolve(VONA_PATCHES_DIR, `zova-core@${version}.patch`);
145
+ }
146
+
147
+ function readCurrentPatchedZovaCoreVersion(): string | null {
148
+ const content = readFileSync(VONA_WORKSPACE_PATH, 'utf-8');
149
+ const match = content.match(/^\s*zova-core@(\d+\.\d+\.\d+):\s+patches\/zova-core@\1\.patch\s*$/m);
150
+ return match?.[1] || null;
151
+ }
152
+
153
+ function readLocalZovaCoreVersion(): string {
154
+ const pkg = readJson(ZOVA_CORE_PACKAGE_JSON_PATH);
155
+ const version = pkg.version?.trim();
156
+ if (!version || !isValidVersion(version)) {
157
+ throw new Error(`Invalid zova-core version in ${ZOVA_CORE_PACKAGE_JSON_PATH}`);
158
+ }
159
+ return version;
160
+ }
161
+
162
+ function normalizeVonaPatchedDependency(version: string): void {
163
+ const patchLine = ` zova-core@${version}: patches/zova-core@${version}.patch`;
164
+ const lines = readFileSync(VONA_WORKSPACE_PATH, 'utf-8').split('\n');
165
+ const patchedDependenciesIndex = lines.findIndex(line => line.trim() === 'patchedDependencies:');
166
+ if (patchedDependenciesIndex === -1) {
167
+ throw new Error(`Missing patchedDependencies block in ${VONA_WORKSPACE_PATH}`);
168
+ }
169
+ let blockEndIndex = patchedDependenciesIndex + 1;
170
+ while (blockEndIndex < lines.length) {
171
+ const line = lines[blockEndIndex];
172
+ if (line && !/^\s/.test(line)) break;
173
+ blockEndIndex++;
174
+ }
175
+ const preservedBlockLines = lines
176
+ .slice(patchedDependenciesIndex + 1, blockEndIndex)
177
+ .filter(
178
+ line =>
179
+ !/^\s*zova-core@\d+\.\d+\.\d+:\s+patches\/zova-core@\d+\.\d+\.\d+\.patch\s*$/.test(line),
180
+ );
181
+ const newLines = [
182
+ ...lines.slice(0, patchedDependenciesIndex + 1),
183
+ patchLine,
184
+ ...preservedBlockLines,
185
+ ...lines.slice(blockEndIndex),
186
+ ];
187
+ writeFileSync(VONA_WORKSPACE_PATH, `${newLines.join('\n').replace(/\n+$/, '\n')}\n`);
188
+ }
189
+
190
+ function replaceOrThrow(
191
+ content: string,
192
+ search: RegExp,
193
+ replacement: string,
194
+ description: string,
195
+ ): string {
196
+ const matches = content.match(search);
197
+ if (!matches || matches.length !== 1) {
198
+ throw new Error(
199
+ `Unable to locate ${description} exactly once while regenerating the zova-core patch`,
200
+ );
201
+ }
202
+ return content.replace(search, replacement);
203
+ }
204
+
205
+ function applyKnownZovaCorePatchEdits(editDir: string): void {
206
+ const errorGlobalPath = resolve(editDir, 'dist', 'bean', 'resource', 'error', 'errorGlobal.d.ts');
207
+ const envPath = resolve(editDir, 'dist', 'types', 'utils', 'env.d.ts');
208
+ const modulePath = resolve(editDir, 'dist', 'types', 'interface', 'module.d.ts');
209
+
210
+ for (const filePath of [errorGlobalPath, envPath, modulePath]) {
211
+ if (!existsSync(filePath)) {
212
+ throw new Error(`Expected patch target file is missing: ${filePath}`);
213
+ }
214
+ }
215
+
216
+ const errorGlobalContent = readFileSync(errorGlobalPath, 'utf-8');
217
+ if (!errorGlobalContent.includes('declare global')) {
218
+ throw new Error(`Expected global Error augmentation in ${errorGlobalPath}`);
219
+ }
220
+ writeFileSync(errorGlobalPath, 'export {};\n');
221
+
222
+ const envContent = readFileSync(envPath, 'utf-8');
223
+ const envNext = replaceOrThrow(
224
+ envContent,
225
+ /declare global \{\n {4}namespace NodeJS \{\n interface ProcessEnv \{[\s\S]*?\n \}\n \}\n\}\n?/,
226
+ '',
227
+ 'the NodeJS.ProcessEnv augmentation',
228
+ );
229
+ writeFileSync(envPath, envNext);
230
+
231
+ const moduleContent = readFileSync(modulePath, 'utf-8');
232
+ const moduleNext = replaceOrThrow(
233
+ moduleContent,
234
+ /declare module '@cabloy\/module-info' \{\n {4}interface IModule \{[\s\S]*?\n \}\n\}\n?/,
235
+ '',
236
+ 'the @cabloy/module-info augmentation',
237
+ );
238
+ writeFileSync(modulePath, moduleNext);
239
+ }
240
+
82
241
  // --- Pre-step: Commit pending changes ---
83
242
  function commitPendingChanges(dryRun?: boolean): void {
84
- const status = execSync('git status --porcelain', { encoding: 'utf-8' }).trim();
243
+ const status = execSync('git status --porcelain', { cwd: ROOT_DIR, encoding: 'utf-8' }).trim();
85
244
  if (!status) return;
86
245
  // eslint-disable-next-line
87
246
  console.log('\n📁 Committing pending changes...');
@@ -94,12 +253,144 @@ function commitPendingChanges(dryRun?: boolean): void {
94
253
  function subProjectRelease(bumpType: 'patch' | 'minor' | 'major', dryRun?: boolean): void {
95
254
  // eslint-disable-next-line
96
255
  console.log(`\n🔧 Running vona/zova release (${bumpType})...`);
256
+ execInherited(`lerna publish ${bumpType} --yes`, dryRun);
257
+ }
258
+
259
+ // --- Compensation step: Refresh the zova-core patch ---
260
+ function regenerateVonaZovaCorePatch(
261
+ currentPatchedVersion: string,
262
+ targetVersion: string,
263
+ dryRun?: boolean,
264
+ ): void {
265
+ const editDir = resolve(
266
+ VONA_DIR,
267
+ 'node_modules',
268
+ '.release-compensation',
269
+ `zova-core-${targetVersion}`,
270
+ );
271
+ const oldPatchFilePath = getPatchFilePath(currentPatchedVersion);
272
+ const newPatchFilePath = getPatchFilePath(targetVersion);
273
+
274
+ // eslint-disable-next-line
275
+ console.log(`\n🩹 Regenerating the Vona zova-core patch for ${targetVersion}...`);
276
+
97
277
  if (dryRun) {
278
+ exec(
279
+ `pnpm --dir "${VONA_DIR}" patch zova-core@${targetVersion} --edit-dir "${editDir}" --ignore-existing`,
280
+ true,
281
+ );
282
+ // eslint-disable-next-line
283
+ console.log(' [dry-run] Apply the known zova-core declaration-file patch edits');
284
+ exec(`pnpm --dir "${VONA_DIR}" patch-commit "${editDir}"`, true);
98
285
  // eslint-disable-next-line
99
- console.log(` [dry-run] lerna publish ${bumpType} --yes`);
286
+ console.log(` [dry-run] Normalize ${VONA_WORKSPACE_PATH}`);
287
+ // eslint-disable-next-line
288
+ console.log(` [dry-run] Remove ${oldPatchFilePath} if it still exists`);
100
289
  return;
101
290
  }
102
- execSync(`lerna publish ${bumpType} --yes`, { encoding: 'utf-8', stdio: 'inherit' });
291
+
292
+ rmSync(editDir, { recursive: true, force: true });
293
+ mkdirSync(dirname(editDir), { recursive: true });
294
+
295
+ try {
296
+ execInherited(
297
+ `pnpm --dir "${VONA_DIR}" patch zova-core@${targetVersion} --edit-dir "${editDir}" --ignore-existing`,
298
+ );
299
+ applyKnownZovaCorePatchEdits(editDir);
300
+ execInherited(`pnpm --dir "${VONA_DIR}" patch-commit "${editDir}"`);
301
+
302
+ normalizeVonaPatchedDependency(targetVersion);
303
+
304
+ if (!existsSync(newPatchFilePath)) {
305
+ throw new Error(`Expected regenerated patch file is missing: ${newPatchFilePath}`);
306
+ }
307
+ if (currentPatchedVersion !== targetVersion && existsSync(oldPatchFilePath)) {
308
+ rmSync(oldPatchFilePath);
309
+ }
310
+ } finally {
311
+ rmSync(editDir, { recursive: true, force: true });
312
+ }
313
+ }
314
+
315
+ function refreshVonaLockfile(dryRun?: boolean): void {
316
+ // eslint-disable-next-line
317
+ console.log('\n📦 Refreshing the Vona lockfile...');
318
+ execInherited(`pnpm --dir "${VONA_DIR}" install`, dryRun);
319
+ }
320
+
321
+ function verifyCompensationPatch(dryRun?: boolean): void {
322
+ // eslint-disable-next-line
323
+ console.log('\n✅ Verifying the refreshed zova-core patch...');
324
+ execInherited('pnpm exec tsc -p tsconfig.json --noEmit', dryRun, { cwd: VONA_DIR });
325
+ execInherited('npm run tsc', dryRun);
326
+ }
327
+
328
+ function commitCompensationChanges(targetVersion: string, dryRun?: boolean): void {
329
+ // eslint-disable-next-line
330
+ console.log('\n📁 Committing compensation changes...');
331
+ exec('git add vona/pnpm-workspace.yaml vona/pnpm-lock.yaml vona/patches', dryRun);
332
+ if (!dryRun) {
333
+ const staged = execSync(
334
+ 'git diff --cached --name-only -- vona/pnpm-workspace.yaml vona/pnpm-lock.yaml vona/patches',
335
+ { cwd: ROOT_DIR, encoding: 'utf-8' },
336
+ ).trim();
337
+ if (!staged) {
338
+ throw new Error('No compensation changes were staged for commit');
339
+ }
340
+ }
341
+ exec(`git commit -m "chore: refresh vona zova-core patch for v${targetVersion}"`, dryRun);
342
+ exec('git push', dryRun);
343
+ }
344
+
345
+ function rerunPatchReleaseAfterCompensation(noAi?: boolean, dryRun?: boolean): void {
346
+ const noAiFlag = noAi ? ' --no-ai' : '';
347
+ // eslint-disable-next-line
348
+ console.log('\n🚀 Running the compensation patch release...');
349
+ execInherited(`node "${RELEASE_SCRIPT_PATH}" patch --skip-compensation${noAiFlag}`, dryRun);
350
+ }
351
+
352
+ async function postReleaseCompensation(options: ReleaseOptions): Promise<void> {
353
+ if (
354
+ options.dryRun ||
355
+ options.changelogOnly ||
356
+ options.publishOnly ||
357
+ options.releaseOnly ||
358
+ options.skipCompensation
359
+ ) {
360
+ return;
361
+ }
362
+
363
+ // eslint-disable-next-line
364
+ console.log('\n🔍 Checking whether zova-core compensation is needed...');
365
+
366
+ const currentPatchedVersion = readCurrentPatchedZovaCoreVersion();
367
+ if (!currentPatchedVersion) {
368
+ throw new Error(`Missing zova-core patchedDependencies entry in ${VONA_WORKSPACE_PATH}`);
369
+ }
370
+
371
+ const localZovaCoreVersion = readLocalZovaCoreVersion();
372
+ // eslint-disable-next-line
373
+ console.log(`Current Vona zova-core patch target: ${currentPatchedVersion}`);
374
+ // eslint-disable-next-line
375
+ console.log(`Local zova-core version: ${localZovaCoreVersion}`);
376
+
377
+ if (compareVersions(localZovaCoreVersion, currentPatchedVersion) <= 0) {
378
+ // eslint-disable-next-line
379
+ console.log('zova-core patch already matches the local version. Skipping compensation.');
380
+ return;
381
+ }
382
+
383
+ if (compareVersions(localZovaCoreVersion, currentPatchedVersion) <= 0) {
384
+ // eslint-disable-next-line
385
+ console.log('No newer local zova-core version needs patch compensation. Skipping.');
386
+ return;
387
+ }
388
+
389
+ regenerateVonaZovaCorePatch(currentPatchedVersion, localZovaCoreVersion, options.dryRun);
390
+ refreshVonaLockfile(options.dryRun);
391
+ verifyCompensationPatch(options.dryRun);
392
+ commitCompensationChanges(localZovaCoreVersion, options.dryRun);
393
+ rerunPatchReleaseAfterCompensation(options.noAi, options.dryRun);
103
394
  }
104
395
 
105
396
  // --- Step 1: Version Bump ---
@@ -115,6 +406,7 @@ async function versionBump(
115
406
  if (lastTag) {
116
407
  const diffCmd = `git -c diff.renameLimit=10000 diff --name-only ${lastTag}..HEAD`;
117
408
  const changedFiles = execSync(diffCmd, {
409
+ cwd: ROOT_DIR,
118
410
  encoding: 'utf-8',
119
411
  stdio: ['pipe', 'pipe', 'pipe'],
120
412
  }).trim();
@@ -211,7 +503,10 @@ async function generateChangelog(version: string, dryRun?: boolean, noAi?: boole
211
503
  // After version bump, the current tag (e.g. cabloy@5.1.4) points to HEAD,
212
504
  // so we need the tag BEFORE that to get the commit range
213
505
  const currentTag = `${TAG_PREFIX}${version}`;
214
- const allTags = execSync(`git tag -l '${TAG_PREFIX}*' --sort=-v:refname`, { encoding: 'utf-8' })
506
+ const allTags = execSync(`git tag -l '${TAG_PREFIX}*' --sort=-v:refname`, {
507
+ cwd: ROOT_DIR,
508
+ encoding: 'utf-8',
509
+ })
215
510
  .trim()
216
511
  .split('\n')
217
512
  .filter(Boolean);
@@ -279,7 +574,7 @@ async function npmPublish(dryRun?: boolean): Promise<void> {
279
574
  return;
280
575
  }
281
576
 
282
- execSync('npm publish', { encoding: 'utf-8', stdio: 'inherit' });
577
+ execSync('npm publish', { cwd: ROOT_DIR, encoding: 'utf-8', stdio: 'inherit' });
283
578
  }
284
579
 
285
580
  // --- Step 4: GitHub Release ---
@@ -313,19 +608,20 @@ async function githubRelease(version: string, dryRun?: boolean): Promise<void> {
313
608
  }
314
609
 
315
610
  // Use gh CLI with a temp file for notes to avoid shell escaping issues
316
- const tmpFile = resolve(dirname(fileURLToPath(import.meta.url)), '..', '.release-notes.tmp.md');
611
+ const tmpFile = resolve(ROOT_DIR, '.release-notes.tmp.md');
317
612
  writeFileSync(tmpFile, notes);
318
613
  try {
319
614
  execSync(
320
615
  `gh release create ${tag} --repo ${GITHUB_REPO} --title "v${version}" --notes-file "${tmpFile}"`,
321
616
  {
617
+ cwd: ROOT_DIR,
322
618
  encoding: 'utf-8',
323
619
  stdio: 'inherit',
324
620
  },
325
621
  );
326
622
  } finally {
327
623
  if (existsSync(tmpFile)) {
328
- execSync(`rm -f "${tmpFile}"`);
624
+ execSync(`rm -f "${tmpFile}"`, { cwd: ROOT_DIR });
329
625
  }
330
626
  }
331
627
  }
@@ -340,6 +636,7 @@ interface ReleaseOptions {
340
636
  skipChangelog?: boolean;
341
637
  skipPublish?: boolean;
342
638
  skipRelease?: boolean;
639
+ skipCompensation?: boolean;
343
640
  noAi?: boolean;
344
641
  }
345
642
 
@@ -349,14 +646,18 @@ async function release(options: ReleaseOptions): Promise<void> {
349
646
 
350
647
  // Pre-flight checks
351
648
  try {
352
- execSync('git rev-parse --is-inside-work-tree', { encoding: 'utf-8', stdio: 'pipe' });
649
+ execSync('git rev-parse --is-inside-work-tree', {
650
+ cwd: ROOT_DIR,
651
+ encoding: 'utf-8',
652
+ stdio: 'pipe',
653
+ });
353
654
  } catch {
354
655
  // eslint-disable-next-line
355
656
  console.error('Error: Not in a git repository');
356
657
  process.exit(1);
357
658
  }
358
659
 
359
- const status = execSync('git status --porcelain', { encoding: 'utf-8' }).trim();
660
+ const status = execSync('git status --porcelain', { cwd: ROOT_DIR, encoding: 'utf-8' }).trim();
360
661
  if (status && !options.dryRun) {
361
662
  // eslint-disable-next-line
362
663
  console.error('Error: Working tree is not clean. Commit or stash your changes first.');
@@ -395,6 +696,8 @@ async function release(options: ReleaseOptions): Promise<void> {
395
696
  await githubRelease(version, options.dryRun);
396
697
  }
397
698
 
699
+ await postReleaseCompensation(options);
700
+
398
701
  // eslint-disable-next-line
399
702
  console.log('\n✅ Release complete!');
400
703
  }
@@ -409,6 +712,7 @@ const args = minimist(process.argv.slice(2), {
409
712
  'skip-changelog',
410
713
  'skip-publish',
411
714
  'skip-release',
715
+ 'skip-compensation',
412
716
  'no-ai',
413
717
  ],
414
718
  default: {
@@ -419,6 +723,7 @@ const args = minimist(process.argv.slice(2), {
419
723
  'skip-changelog': false,
420
724
  'skip-publish': false,
421
725
  'skip-release': false,
726
+ 'skip-compensation': false,
422
727
  'no-ai': false,
423
728
  },
424
729
  });
@@ -439,6 +744,7 @@ release({
439
744
  skipChangelog: args['skip-changelog'],
440
745
  skipPublish: args['skip-publish'],
441
746
  skipRelease: args['skip-release'],
747
+ skipCompensation: args['skip-compensation'],
442
748
  noAi: args['no-ai'],
443
749
  }).catch(err => {
444
750
  // eslint-disable-next-line
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-jsx",
3
- "version": "1.1.68",
3
+ "version": "1.1.69",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "Zova JSX",
6
6
  "keywords": [
@@ -50,7 +50,7 @@
50
50
  "@cabloy/word-utils": "^2.1.14",
51
51
  "typestyle": "^2.4.0",
52
52
  "vue": "^3.5.38",
53
- "zova-core": "^5.1.62"
53
+ "zova-core": "^5.1.64"
54
54
  },
55
55
  "devDependencies": {
56
56
  "clean-package": "^2.2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova",
3
- "version": "5.1.120",
3
+ "version": "5.1.121",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A vue3 framework with ioc",
6
6
  "keywords": [
@@ -45,8 +45,8 @@
45
45
  "postpack": "clean-package restore"
46
46
  },
47
47
  "dependencies": {
48
- "zova-core": "^5.1.62",
49
- "zova-suite-a-zova": "^5.1.119"
48
+ "zova-core": "^5.1.64",
49
+ "zova-suite-a-zova": "^5.1.120"
50
50
  },
51
51
  "devDependencies": {
52
52
  "clean-package": "^2.2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-core",
3
- "version": "5.1.62",
3
+ "version": "5.1.64",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A vue3 framework with ioc",
6
6
  "keywords": [
@@ -309,7 +309,7 @@ importers:
309
309
  devDependencies:
310
310
  '@cabloy/cli':
311
311
  specifier: ^3.1.27
312
- version: 3.1.27(vue@3.5.38(typescript@5.9.3))
312
+ version: 3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))
313
313
  '@cabloy/lint':
314
314
  specifier: ^5.1.27
315
315
  version: 5.1.30(@typescript-eslint/eslint-plugin@8.62.0(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/rule-tester@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.62.0(typescript@5.9.3))(@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(oxfmt@0.45.0)(oxlint@1.71.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.5.0(jiti@2.7.0)))
@@ -384,7 +384,7 @@ importers:
384
384
  dependencies:
385
385
  '@cabloy/cli':
386
386
  specifier: ^3.1.27
387
- version: 3.1.27(vue@3.5.38(typescript@5.9.3))
387
+ version: 3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))
388
388
  '@cabloy/process-helper':
389
389
  specifier: ^3.1.8
390
390
  version: 3.1.8
@@ -418,7 +418,7 @@ importers:
418
418
  version: 7.29.7(@babel/core@7.29.7)
419
419
  '@cabloy/cli':
420
420
  specifier: ^3.1.27
421
- version: 3.1.27(vue@3.5.38(typescript@5.9.3))
421
+ version: 3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))
422
422
  '@cabloy/extend':
423
423
  specifier: ^3.2.8
424
424
  version: 3.2.8
@@ -672,7 +672,7 @@ importers:
672
672
  specifier: ^3.5.38
673
673
  version: 3.5.38(typescript@5.9.3)
674
674
  zova-core:
675
- specifier: ^5.1.61
675
+ specifier: ^5.1.62
676
676
  version: link:../../packages-zova/zova-core
677
677
  devDependencies:
678
678
  clean-package:
@@ -813,10 +813,10 @@ importers:
813
813
  packages-zova/zova:
814
814
  dependencies:
815
815
  zova-core:
816
- specifier: ^5.1.61
816
+ specifier: ^5.1.62
817
817
  version: link:../zova-core
818
818
  zova-suite-a-zova:
819
- specifier: ^5.1.118
819
+ specifier: ^5.1.119
820
820
  version: link:../../src/suite-vendor/a-zova
821
821
  devDependencies:
822
822
  clean-package:
@@ -871,8 +871,8 @@ importers:
871
871
  specifier: ^2.1.14
872
872
  version: link:../../packages-utils/word-utils
873
873
  '@cabloy/zod-errors-custom':
874
- specifier: ^2.1.9
875
- version: 2.1.9
874
+ specifier: ^2.1.10
875
+ version: 2.1.10
876
876
  '@cabloy/zod-openapi':
877
877
  specifier: ^1.1.9
878
878
  version: 1.1.9
@@ -998,10 +998,10 @@ importers:
998
998
  specifier: ^5.1.37
999
999
  version: link:modules/a-table
1000
1000
  zova-module-a-zod:
1001
- specifier: ^5.1.34
1001
+ specifier: ^5.1.35
1002
1002
  version: link:modules/a-zod
1003
1003
  zova-module-a-zova:
1004
- specifier: ^5.1.82
1004
+ specifier: ^5.1.83
1005
1005
  version: link:modules/a-zova
1006
1006
 
1007
1007
  src/suite-vendor/a-zova/modules/a-api:
@@ -1291,8 +1291,8 @@ importers:
1291
1291
  src/suite-vendor/a-zova/modules/a-zod:
1292
1292
  dependencies:
1293
1293
  '@cabloy/zod-errors-custom':
1294
- specifier: ^2.1.9
1295
- version: 2.1.9
1294
+ specifier: ^2.1.10
1295
+ version: 2.1.10
1296
1296
  '@cabloy/zod-openapi':
1297
1297
  specifier: ^1.1.9
1298
1298
  version: 1.1.9
@@ -1340,12 +1340,12 @@ importers:
1340
1340
  specifier: ^3.7.2
1341
1341
  version: 3.7.2
1342
1342
  zova-jsx:
1343
- specifier: ^1.1.67
1343
+ specifier: ^1.1.68
1344
1344
  version: link:../../../../../packages-utils/zova-jsx
1345
1345
  devDependencies:
1346
1346
  '@cabloy/cli':
1347
1347
  specifier: ^3.1.27
1348
- version: 3.1.27(vue@3.5.38(typescript@5.9.3))
1348
+ version: 3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))
1349
1349
  '@types/luxon':
1350
1350
  specifier: ^3.7.1
1351
1351
  version: 3.7.2
@@ -2086,8 +2086,8 @@ packages:
2086
2086
  peerDependencies:
2087
2087
  vue: 3.5.13
2088
2088
 
2089
- '@cabloy/zod-errors-custom@2.1.9':
2090
- resolution: {integrity: sha512-k30D8uyqO8vfCq6ZJBbiUpt5jliqIBFiumJneLCUyAlCChOXWNvwzaAq+c9f1JVoJguEePhAxPiGQpsksKJHpQ==}
2089
+ '@cabloy/zod-errors-custom@2.1.10':
2090
+ resolution: {integrity: sha512-MEyJClI621uGezvBN0RjyvFv63hW6jbalT0TZ4F9FagR3aQRE/qDYyl/o8DlD18My3l2OsoiWnLHsJfJPD99tg==}
2091
2091
 
2092
2092
  '@cabloy/zod-openapi@1.1.9':
2093
2093
  resolution: {integrity: sha512-rAZz0/OeQ2WjNGJlj8RuvI5n106VSUQQ1JrFncRPY6mme98RQThMOVPObx299yBA5QQRCR6nkl0tGMHG3q6uVg==}
@@ -8189,7 +8189,7 @@ snapshots:
8189
8189
 
8190
8190
  '@bufbuild/protobuf@2.12.1': {}
8191
8191
 
8192
- '@cabloy/cli@3.1.27(vue@3.5.38(typescript@5.9.3))':
8192
+ '@cabloy/cli@3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))':
8193
8193
  dependencies:
8194
8194
  '@babel/parser': 7.29.7
8195
8195
  '@cabloy/module-glob': 5.3.16
@@ -8198,7 +8198,7 @@ snapshots:
8198
8198
  '@cabloy/utils': 2.1.25
8199
8199
  '@cabloy/word-utils': link:packages-utils/word-utils
8200
8200
  '@npmcli/config': 10.11.0
8201
- '@zhennann/common-bin': 4.0.1
8201
+ '@zhennann/common-bin': 4.0.1(supports-color@10.2.2)
8202
8202
  '@zhennann/ejs': 3.0.1
8203
8203
  boxen: 4.2.0
8204
8204
  chalk: 3.0.0
@@ -8451,9 +8451,10 @@ snapshots:
8451
8451
  '@vue/shared': 3.5.13
8452
8452
  vue: 3.5.38(typescript@5.9.3)
8453
8453
 
8454
- '@cabloy/zod-errors-custom@2.1.9':
8454
+ '@cabloy/zod-errors-custom@2.1.10':
8455
8455
  dependencies:
8456
8456
  '@cabloy/word-utils': link:packages-utils/word-utils
8457
+ zod: '@cabloy/zod@4.3.8'
8457
8458
 
8458
8459
  '@cabloy/zod-openapi@1.1.9':
8459
8460
  dependencies:
@@ -10218,7 +10219,7 @@ snapshots:
10218
10219
 
10219
10220
  '@vue/shared@3.5.13': {}
10220
10221
 
10221
- '@zhennann/common-bin@4.0.1':
10222
+ '@zhennann/common-bin@4.0.1(supports-color@10.2.2)':
10222
10223
  dependencies:
10223
10224
  chalk: 4.1.2
10224
10225
  change-case: 4.1.2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-zova",
3
- "version": "5.1.83",
3
+ "version": "5.1.84",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "zova",
6
6
  "keywords": [
@@ -43,7 +43,7 @@
43
43
  "@cabloy/word-utils": "^2.1.14",
44
44
  "defu": "^6.1.7",
45
45
  "luxon": "^3.7.2",
46
- "zova-jsx": "^1.1.68"
46
+ "zova-jsx": "^1.1.69"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@cabloy/cli": "^3.1.27",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-suite-a-zova",
3
- "version": "5.1.119",
3
+ "version": "5.1.120",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "zova",
6
6
  "license": "MIT",
@@ -32,7 +32,7 @@
32
32
  "zova-module-a-style": "^5.1.32",
33
33
  "zova-module-a-table": "^5.1.37",
34
34
  "zova-module-a-zod": "^5.1.35",
35
- "zova-module-a-zova": "^5.1.83"
35
+ "zova-module-a-zova": "^5.1.84"
36
36
  },
37
37
  "title": "a-zova"
38
38
  }