cabloy 5.1.225 → 5.1.227
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/.cabloy-version +1 -1
- package/.github/workflows/vona-tsc.yml +2 -2
- package/CHANGELOG.md +22 -0
- package/oxlint.config.ts +5 -1
- package/package.json +5 -11
- package/repo-agent-governance/managed-assets.json +9 -9
- package/repo-agent-governance/policies/repository.md +2 -0
- package/repo-agent-governance/skills/cabloy-spec-execution/references/execution-protocol.md +6 -2
- package/repo-agent-governance/skills/cabloy-spec-generation/SKILL.md +1 -1
- package/repo-docs/ai/ai-spec-driven-development.md +6 -2
- package/repo-docs/reference/repo-scripts.md +18 -19
- package/scripts/oxlintPlugins.ts +25 -0
- package/scripts/typecheck.test.ts +107 -94
- package/scripts/typecheck.ts +1 -1
- package/vona/oxlint.config.ts +5 -1
- package/vona/package.original.json +5 -6
- package/vona/packages-cli/cabloy-cli/package.json +1 -1
- package/vona/packages-cli/cli/package.json +1 -1
- package/vona/packages-cli/cli-set-api/package.json +1 -1
- package/vona/packages-cli/cli-set-api/src/lib/beans.ts +0 -2
- package/vona/packages-cli/cli-set-api/src/lib/commands.ts +0 -2
- package/vona/packages-utils/lint/package.json +3 -3
- package/vona/packages-utils/module-glob/package.json +2 -1
- package/vona/packages-utils/module-glob/src/index.ts +2 -26
- package/vona/packages-utils/module-glob/src/suites.ts +31 -0
- package/vona/packages-utils/module-glob/test/suites.test.ts +108 -0
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/pnpm-lock.yaml +254 -182
- package/vona/pnpm-workspace.yaml +0 -1
- package/vona/src/suite/a-commerce/modules/commerce-catalog/test/product.test.ts +2 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/test/sku.test.ts +1 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/test/skuUniqueness.test.ts +9 -10
- package/vona/src/suite/a-commerce/modules/commerce-member/test/addressOwnership.test.ts +43 -16
- package/vona/src/suite/a-commerce/modules/commerce-member/test/addressPresentation.test.ts +7 -1
- package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentIndexes.test.ts +2 -1
- package/vona/src/suite/a-commerce/modules/commerce-promotion/test/couponReservation.test.ts +18 -9
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/cartOwnership.test.ts +28 -11
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/checkoutReservation.test.ts +33 -21
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/checkoutTransaction.test.ts +6 -5
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/orderSnapshot.test.ts +33 -25
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/paymentOutcome.test.ts +31 -20
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/refundLifecycle.test.ts +30 -30
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/reservationExpiry.test.ts +24 -26
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/shipment.test.ts +7 -2
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/shipmentRefundRace.test.ts +15 -5
- package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockBalance.test.ts +7 -5
- package/vona/src/suite/a-home/modules/home-user/test/account.test.ts +2 -2
- package/vona/src/suite/a-home/modules/home-user/test/accountActivation.test.ts +2 -1
- package/vona/src/suite/a-home/modules/home-user/test/accountOpenapi.test.ts +53 -42
- package/vona/src/suite/a-home/modules/home-user/test/accountPasswordReset.test.ts +1 -0
- package/vona/src/suite/a-home/modules/home-user/test/accountPasswordSet.test.ts +2 -1
- package/vona/src/suite/a-training/modules/training-record/test/record.test.ts +12 -7
- package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +23 -11
- package/vona/src/suite-vendor/a-cabloy/modules/a-rbac/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-rbac/test/rbacCatalogGuard.test.ts +5 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/test/ssrMenuVisibility.test.ts +3 -3
- package/vona/src/suite-vendor/a-cabloy/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-metrics/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-metrics/test/middlewareSystem.health.test.ts +33 -12
- package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/types/permissions.ts +3 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/bean.model/bean.model_crud_inner.ts +6 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/bean.model/bean.model_crud_table.ts +4 -4
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoMutate.ts +38 -9
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsGroup.ts +12 -10
- package/vona/src/suite-vendor/a-vona/modules/a-orm/test/dtoMutate.types.test.ts +129 -0
- package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-security/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-security/test/origin.test.ts +1 -0
- package/vona/src/suite-vendor/a-vona/modules/a-web/cli/controller/metadata/generate.ts +72 -28
- package/vona/src/suite-vendor/a-vona/modules/a-web/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-web/test/controllerMetadataParser.test.ts +156 -0
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/vona/tsconfig.json +19 -35
- package/zova/oxlint.config.ts +5 -1
- package/zova/package.original.json +6 -6
- package/zova/packages-cli/cli/package.json +3 -3
- package/zova/packages-cli/cli-set-front/package.json +4 -4
- package/zova/packages-utils/zova-vite/package.json +2 -2
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +195 -65
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/package.json +2 -2
- package/vona/packages-cli/cli-set-api/src/lib/bean/cli.bin.tsc.ts +0 -89
- package/vona/packages-cli/cli-set-api/src/lib/command/bin.tsc.ts +0 -24
- /package/{vona/packages-cli/cli-set-api/src/lib → scripts}/typescriptRunner.ts +0 -0
|
@@ -177,6 +177,7 @@ async function withWhiteList(whiteList: string | string[], fn: () => Promise<voi
|
|
|
177
177
|
await app.bean.executor.mockCtx(async () => {
|
|
178
178
|
const options =
|
|
179
179
|
app.bean.onion.middlewareSystem.getOnionSlice('a-security:cors').beanOptions.options;
|
|
180
|
+
assert.ok(options);
|
|
180
181
|
const whiteListPrevious = options.whiteList;
|
|
181
182
|
options.whiteList = Array.isArray(whiteList) ? [...whiteList] : whiteList;
|
|
182
183
|
try {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import type { types as t } from '@babel/core';
|
|
1
2
|
import type { IMetadataCustomGenerateOptions } from '@cabloy/cli';
|
|
2
3
|
|
|
3
4
|
import { combineApiPathControllerAndActionRaw } from '@cabloy/utils';
|
|
4
5
|
import { toUpperCaseFirstChar } from '@cabloy/word-utils';
|
|
5
6
|
|
|
6
7
|
export default async function (options: IMetadataCustomGenerateOptions): Promise<string> {
|
|
7
|
-
const { sceneName, moduleName, globFiles } = options;
|
|
8
|
+
const { sceneName, moduleName, globFiles, cli } = options;
|
|
8
9
|
const contentResources: string[] = [];
|
|
9
10
|
const contentImports: string[] = [];
|
|
10
11
|
const contentActions: string[] = [];
|
|
@@ -22,11 +23,25 @@ export default async function (options: IMetadataCustomGenerateOptions): Promise
|
|
|
22
23
|
export interface ${opionsName} {
|
|
23
24
|
actions?: TypeControllerOptionsActions<${className}>;
|
|
24
25
|
}`);
|
|
26
|
+
const file = cli.helper.gogocode(fileContent, {
|
|
27
|
+
parseOptions: { sourceType: 'module', plugins: ['typescript', 'decorators-legacy'] },
|
|
28
|
+
}).node as t.File;
|
|
29
|
+
const declaration = file.program.body
|
|
30
|
+
.map(statement =>
|
|
31
|
+
statement.type === 'ExportNamedDeclaration' || statement.type === 'ExportDefaultDeclaration'
|
|
32
|
+
? statement.declaration
|
|
33
|
+
: statement,
|
|
34
|
+
)
|
|
35
|
+
.find(
|
|
36
|
+
(node): node is t.ClassDeclaration =>
|
|
37
|
+
node?.type === 'ClassDeclaration' && node.id?.name === className,
|
|
38
|
+
);
|
|
39
|
+
if (!declaration) continue;
|
|
25
40
|
// controllerPath
|
|
26
|
-
const controllerPath = __parseControllerPath(
|
|
41
|
+
const controllerPath = __parseControllerPath(declaration);
|
|
27
42
|
if (controllerPath === false) continue;
|
|
28
43
|
// actionPath;
|
|
29
|
-
const actionPaths = __parseActionPaths(
|
|
44
|
+
const actionPaths = __parseActionPaths(declaration);
|
|
30
45
|
for (const [method, actionPath] of actionPaths) {
|
|
31
46
|
if (!contentPaths[method]) contentPaths[method] = [];
|
|
32
47
|
const apiPath = __combineApiPath(moduleName, controllerPath, actionPath);
|
|
@@ -81,36 +96,65 @@ ${contentResources2}
|
|
|
81
96
|
return content;
|
|
82
97
|
}
|
|
83
98
|
|
|
84
|
-
function __parseControllerPath(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
function __parseControllerPath(declaration: t.ClassDeclaration): string | false {
|
|
100
|
+
for (const decorator of declaration.decorators ?? []) {
|
|
101
|
+
const call = decorator.expression;
|
|
102
|
+
if (
|
|
103
|
+
call.type !== 'CallExpression' ||
|
|
104
|
+
call.callee.type !== 'Identifier' ||
|
|
105
|
+
call.callee.name !== 'Controller'
|
|
106
|
+
) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const argument = call.arguments[0];
|
|
110
|
+
if (!argument) return '';
|
|
111
|
+
if (argument.type === 'StringLiteral') return argument.value;
|
|
112
|
+
if (argument.type !== 'ObjectExpression') return false;
|
|
113
|
+
// Read the last explicit path; a later spread/computed key makes it dynamic.
|
|
114
|
+
for (const property of argument.properties.toReversed()) {
|
|
115
|
+
if (property.type === 'SpreadElement' || property.computed) return false;
|
|
116
|
+
const key = property.key;
|
|
117
|
+
if (
|
|
118
|
+
(key.type === 'Identifier' && key.name === 'path') ||
|
|
119
|
+
(key.type === 'StringLiteral' && key.value === 'path')
|
|
120
|
+
) {
|
|
121
|
+
return property.type === 'ObjectProperty' && property.value.type === 'StringLiteral'
|
|
122
|
+
? property.value.value
|
|
123
|
+
: false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return '';
|
|
90
127
|
}
|
|
91
|
-
|
|
92
|
-
const controllerPath = matched[1];
|
|
93
|
-
if (controllerPath === '') return '';
|
|
94
|
-
return controllerPath.split(',')[0].replaceAll("'", '');
|
|
128
|
+
return false;
|
|
95
129
|
}
|
|
96
130
|
|
|
97
|
-
function __parseActionPaths(
|
|
131
|
+
function __parseActionPaths(declaration: t.ClassDeclaration): [string, string][] {
|
|
98
132
|
const actionPaths: [string, string][] = [];
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
133
|
+
for (const member of declaration.body.body) {
|
|
134
|
+
if (member.type !== 'ClassMethod') continue;
|
|
135
|
+
for (const decorator of member.decorators ?? []) {
|
|
136
|
+
const call = decorator.expression;
|
|
137
|
+
if (call.type !== 'CallExpression') continue;
|
|
138
|
+
const callee = call.callee;
|
|
139
|
+
if (
|
|
140
|
+
callee.type !== 'MemberExpression' ||
|
|
141
|
+
callee.computed ||
|
|
142
|
+
callee.object.type !== 'Identifier' ||
|
|
143
|
+
callee.object.name !== 'Web' ||
|
|
144
|
+
callee.property.type !== 'Identifier' ||
|
|
145
|
+
!['get', 'post', 'delete', 'put', 'patch'].includes(callee.property.name)
|
|
146
|
+
) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const argument = call.arguments[0];
|
|
150
|
+
// Options-only and no-argument decorators map to the root action route.
|
|
151
|
+
// RegExp and other dynamic expressions cannot supply static route metadata.
|
|
152
|
+
if (!argument || argument.type === 'ObjectExpression') {
|
|
153
|
+
actionPaths.push([toUpperCaseFirstChar(callee.property.name), '']);
|
|
154
|
+
} else if (argument.type === 'StringLiteral') {
|
|
155
|
+
actionPaths.push([toUpperCaseFirstChar(callee.property.name), argument.value]);
|
|
156
|
+
}
|
|
111
157
|
}
|
|
112
|
-
const method = toUpperCaseFirstChar(matches2[1].substring(4));
|
|
113
|
-
actionPaths.push([method, actionPath]);
|
|
114
158
|
}
|
|
115
159
|
return actionPaths;
|
|
116
160
|
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import gogocode from 'gogocode';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { test } from 'node:test';
|
|
4
|
+
|
|
5
|
+
import generate from '../cli/controller/metadata/generate.ts';
|
|
6
|
+
|
|
7
|
+
async function routes(controller: string, methods: string, extra = '') {
|
|
8
|
+
const content = await generate({
|
|
9
|
+
cli: { helper: { gogocode } },
|
|
10
|
+
sceneName: 'controller',
|
|
11
|
+
moduleName: 'test-parser',
|
|
12
|
+
globFiles: [
|
|
13
|
+
{
|
|
14
|
+
className: 'ControllerExample',
|
|
15
|
+
beanName: 'example',
|
|
16
|
+
fileNameJSRelative: '../controller/example.ts',
|
|
17
|
+
fileContent: `${extra}
|
|
18
|
+
${controller}
|
|
19
|
+
export class ControllerExample extends BeanBase {
|
|
20
|
+
${methods}
|
|
21
|
+
}`,
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
} as never);
|
|
25
|
+
return Object.fromEntries(
|
|
26
|
+
Array.from(content.matchAll(/export interface IApiPath(\w+)Record\{([\s\S]*?)\}/g), match => [
|
|
27
|
+
match[1],
|
|
28
|
+
Array.from(match[2].matchAll(/'([^']+)': undefined;/g), entry => entry[1]),
|
|
29
|
+
]),
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
test('options-only Web get/post decorators produce root action routes', async () => {
|
|
34
|
+
assert.deepEqual(
|
|
35
|
+
await routes(
|
|
36
|
+
"@Controller<IControllerOptions>('trainingRecord')",
|
|
37
|
+
`@Web.get({ summary: 'List records (current)', meta: { label: makeLabel('list') } })
|
|
38
|
+
async list() {}
|
|
39
|
+
@Web.post({ summary: 'Create record', meta: { nested: { enabled: true } } })
|
|
40
|
+
async create() {}`,
|
|
41
|
+
),
|
|
42
|
+
{
|
|
43
|
+
Get: ['/test/parser/trainingRecord'],
|
|
44
|
+
Post: ['/test/parser/trainingRecord'],
|
|
45
|
+
},
|
|
46
|
+
);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('object Controller path survives nested metadata and following Api.exclude', async () => {
|
|
50
|
+
for (const typeArguments of ['', '<IControllerOptions>']) {
|
|
51
|
+
assert.deepEqual(
|
|
52
|
+
await routes(
|
|
53
|
+
`@Controller${typeArguments}({
|
|
54
|
+
meta: { path: 'notTheControllerPath', guard: makeGuard({ enabled: true }) },
|
|
55
|
+
path: 'passportTest',
|
|
56
|
+
})
|
|
57
|
+
@Api.exclude()`,
|
|
58
|
+
`@Web.get({ summary: 'Passport test (root)' })
|
|
59
|
+
async read() {}
|
|
60
|
+
@Web.post('login', { summary: 'Login' })
|
|
61
|
+
async login() {}`,
|
|
62
|
+
),
|
|
63
|
+
{
|
|
64
|
+
Get: ['/test/parser/passportTest'],
|
|
65
|
+
Post: ['/test/parser/passportTest/login'],
|
|
66
|
+
},
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test('string paths and all existing action verbs remain supported', async () => {
|
|
72
|
+
assert.deepEqual(
|
|
73
|
+
await routes(
|
|
74
|
+
'@Controller<IControllerOptions>("records", { meta: { nested: true } })',
|
|
75
|
+
`@Web.get('items/:id', { summary: 'Read (one)' })
|
|
76
|
+
read() {}
|
|
77
|
+
@Web.post( 'items' )
|
|
78
|
+
create() {}
|
|
79
|
+
@Web.put("items/:id")
|
|
80
|
+
replace() {}
|
|
81
|
+
@Web.patch('/absolute/:id')
|
|
82
|
+
update() {}
|
|
83
|
+
@Web.delete('//external/:id')
|
|
84
|
+
remove() {}`,
|
|
85
|
+
),
|
|
86
|
+
{
|
|
87
|
+
Get: ['/test/parser/records/items/:id'],
|
|
88
|
+
Post: ['/test/parser/records/items'],
|
|
89
|
+
Put: ['/test/parser/records/items/:id'],
|
|
90
|
+
Patch: ['/absolute/:id'],
|
|
91
|
+
Delete: ['//external/:id'],
|
|
92
|
+
},
|
|
93
|
+
);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test('no-path Controller and Web decorators preserve root routes', async () => {
|
|
97
|
+
for (const controller of [
|
|
98
|
+
'@Controller()',
|
|
99
|
+
'@Controller<IControllerOptions>()',
|
|
100
|
+
"@Controller({ meta: { path: 'nestedOnly' } })",
|
|
101
|
+
"@Controller<IControllerOptions>({ meta: { path: 'nestedOnly' } })",
|
|
102
|
+
"@Controller('')",
|
|
103
|
+
]) {
|
|
104
|
+
assert.deepEqual(
|
|
105
|
+
await routes(controller, '@Web.get()\nread() {}\n@Web.post()\ncreate() {}'),
|
|
106
|
+
{ Get: ['/test/parser'], Post: ['/test/parser'] },
|
|
107
|
+
controller,
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test('RegExp and dynamic action routes stay excluded, without evaluating expressions', async () => {
|
|
113
|
+
assert.deepEqual(
|
|
114
|
+
await routes(
|
|
115
|
+
"@Controller('records')",
|
|
116
|
+
`@Web.get(/items\\/(.*)/)
|
|
117
|
+
regex() {}
|
|
118
|
+
@Web.post(new RegExp('items'))
|
|
119
|
+
regexConstructor() {}
|
|
120
|
+
@Web.put(dynamicPath)
|
|
121
|
+
identifier() {}
|
|
122
|
+
@Web.patch(resolvePath())
|
|
123
|
+
expression() {}
|
|
124
|
+
@Web.delete(\`items/\${id}\`)
|
|
125
|
+
template() {}
|
|
126
|
+
@Web.get('kept')
|
|
127
|
+
kept() {}`,
|
|
128
|
+
),
|
|
129
|
+
{ Get: ['/test/parser/records/kept'] },
|
|
130
|
+
);
|
|
131
|
+
for (const controller of [
|
|
132
|
+
'@Controller(dynamicPath)',
|
|
133
|
+
'@Controller({ path: resolvePath() })',
|
|
134
|
+
'@Controller({ path: /items/ })',
|
|
135
|
+
"@Controller({ path: 'records', ...dynamicOptions })",
|
|
136
|
+
]) {
|
|
137
|
+
assert.deepEqual(await routes(controller, '@Web.get()\nread() {}'), {}, controller);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test('only real decorators on the owning controller contribute routes', async () => {
|
|
142
|
+
assert.deepEqual(
|
|
143
|
+
await routes(
|
|
144
|
+
"@Controller({ 'path': 'records' })",
|
|
145
|
+
`// @Web.get('comment')
|
|
146
|
+
@Web.get('kept')
|
|
147
|
+
kept() { return "@Web.post('string')"; }`,
|
|
148
|
+
`@Controller('unrelated')
|
|
149
|
+
class ControllerOther {
|
|
150
|
+
@Web.get('other')
|
|
151
|
+
other() {}
|
|
152
|
+
}`,
|
|
153
|
+
),
|
|
154
|
+
{ Get: ['/test/parser/records/kept'] },
|
|
155
|
+
);
|
|
156
|
+
});
|
package/vona/tsconfig.json
CHANGED
|
@@ -1,41 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"extends": "./tsconfig.base.json",
|
|
3
3
|
"compilerOptions": {
|
|
4
|
+
"composite": false,
|
|
5
|
+
"declaration": false,
|
|
6
|
+
"declarationMap": false,
|
|
4
7
|
"noEmit": true
|
|
5
8
|
},
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
{
|
|
23
|
-
"path": "packages-vona/vona-core"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"path": "packages-vona/vona"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"path": "packages-vona/vona-mock"
|
|
30
|
-
}
|
|
31
|
-
],
|
|
32
|
-
"include": [
|
|
33
|
-
".vona/**/*.ts",
|
|
34
|
-
".vona-test-*/**/*.ts",
|
|
35
|
-
"src/backend/package.json",
|
|
36
|
-
"src/backend/config",
|
|
37
|
-
"src/backend/play",
|
|
38
|
-
"src/backend/typing"
|
|
39
|
-
],
|
|
40
|
-
"exclude": []
|
|
9
|
+
"exclude": [
|
|
10
|
+
"**/cli/**",
|
|
11
|
+
"**/dist/**",
|
|
12
|
+
"./dist",
|
|
13
|
+
"./dist-releases",
|
|
14
|
+
"./coverage",
|
|
15
|
+
"./.app",
|
|
16
|
+
"./.app-test-*",
|
|
17
|
+
"./.vona",
|
|
18
|
+
"./.vona-test-*",
|
|
19
|
+
"./.zova-rest",
|
|
20
|
+
"./node_modules",
|
|
21
|
+
"./packages-cli",
|
|
22
|
+
"./packages-utils",
|
|
23
|
+
"./packages-vona"
|
|
24
|
+
]
|
|
41
25
|
}
|
package/zova/oxlint.config.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { oxcLintConfigVue } from '@cabloy/lint';
|
|
2
2
|
import { defineConfig } from 'oxlint';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
import { resolveOxlintPlugins } from '../scripts/oxlintPlugins.ts';
|
|
5
|
+
|
|
6
|
+
const config = defineConfig(
|
|
5
7
|
oxcLintConfigVue({
|
|
6
8
|
ignorePatterns: [
|
|
7
9
|
'**/node_modules',
|
|
@@ -60,3 +62,5 @@ export default defineConfig(
|
|
|
60
62
|
],
|
|
61
63
|
}),
|
|
62
64
|
);
|
|
65
|
+
|
|
66
|
+
export default resolveOxlintPlugins(config);
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"dev:spa": "npm run prerun && quasar dev --mode spa --flavor admin",
|
|
24
24
|
"build:spa": "npm run prerun && quasar build --mode spa --flavor admin",
|
|
25
25
|
"preview:spa": "vite preview --outDir=dist/spa-admin",
|
|
26
|
-
"prerun": "npm run zova :tools:deps
|
|
27
|
-
"tsc": "
|
|
28
|
-
"tsc:native": "node ../scripts/typecheck.ts native zova --noEmit --incremental false --project tsconfig.vue-tsc.json",
|
|
29
|
-
"tsc:legacy": "node ../scripts/typecheck.ts typescript zova --noEmit --incremental false --project tsconfig.vue-tsc.json",
|
|
26
|
+
"prerun": "npm run zova :tools:deps",
|
|
27
|
+
"tsc": "npm run tsc:native",
|
|
28
|
+
"tsc:native": "npm run prerun && node ../scripts/typecheck.ts native zova --noEmit --incremental false --project tsconfig.vue-tsc.json",
|
|
29
|
+
"tsc:legacy": "npm run prerun && node ../scripts/typecheck.ts typescript zova --noEmit --incremental false --project tsconfig.vue-tsc.json",
|
|
30
30
|
"format": "oxfmt --check",
|
|
31
31
|
"format:fix": "oxfmt --write",
|
|
32
32
|
"lint": "oxlint",
|
|
@@ -93,8 +93,8 @@
|
|
|
93
93
|
"textlint-rule-ja-no-mixed-period": "^3.0.2",
|
|
94
94
|
"textlint-rule-ja-space-between-half-and-full-width": "^2.4.2",
|
|
95
95
|
"textlint-rule-period-in-list-item": "^1.0.1",
|
|
96
|
-
"oxfmt": "^0.
|
|
97
|
-
"oxlint": "^1.
|
|
96
|
+
"oxfmt": "^0.74.0",
|
|
97
|
+
"oxlint": "^1.89.0"
|
|
98
98
|
},
|
|
99
99
|
"engines": {
|
|
100
100
|
"node": ">=24.4.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.120",
|
|
4
4
|
"gitHead": "6f675a8cc46d596142c591c28a40cc4d82fcc6cc",
|
|
5
5
|
"description": "zova cli",
|
|
6
6
|
"keywords": [
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"postpack": "clean-package restore"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@cabloy/cli": "^3.1.
|
|
43
|
+
"@cabloy/cli": "^3.1.31",
|
|
44
44
|
"@cabloy/process-helper": "^3.1.9",
|
|
45
45
|
"fs-extra": "^11.3.5",
|
|
46
46
|
"semver": "^7.6.2",
|
|
47
|
-
"zova-cli-set-front": "^1.2.
|
|
47
|
+
"zova-cli-set-front": "^1.2.118"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"clean-package": "^2.2.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-cli-set-front",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.118",
|
|
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.
|
|
44
|
+
"@cabloy/cli": "^3.1.31",
|
|
45
45
|
"@cabloy/extend": "^3.2.8",
|
|
46
46
|
"@cabloy/module-info": "^2.0.3",
|
|
47
47
|
"@cabloy/openapi-typescript": "^7.9.2",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@cabloy/vite-plugin-babel": "^1.3.3",
|
|
50
50
|
"@cabloy/vue-babel-plugin-jsx": "^2.0.1",
|
|
51
51
|
"@cabloy/word-utils": "^2.1.14",
|
|
52
|
-
"@typescript/native-preview": "
|
|
52
|
+
"@typescript/native-preview": "npm:typescript@7.0.2",
|
|
53
53
|
"@vitejs/plugin-vue-jsx": "^5.1.5",
|
|
54
54
|
"babel-plugin-transform-typescript-metadata": "^0.4.0",
|
|
55
55
|
"babel-plugin-zova-bean-module": "^1.2.15",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"vite": "^8.3.4",
|
|
71
71
|
"yaml": "^2.8.3",
|
|
72
72
|
"zova-openapi": "^1.1.17",
|
|
73
|
-
"zova-vite": "^1.1.
|
|
73
|
+
"zova-vite": "^1.1.50"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"clean-package": "^2.2.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-vite",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.50",
|
|
4
4
|
"gitHead": "09d901d17140a80ee0764211b441cda72fd94663",
|
|
5
5
|
"description": "zova vite",
|
|
6
6
|
"keywords": [
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@babel/plugin-transform-typescript": "^7.28.6",
|
|
43
43
|
"@cabloy/dotenv": "^1.2.9",
|
|
44
44
|
"@cabloy/extend": "^3.2.8",
|
|
45
|
-
"@cabloy/module-glob": "^5.3.
|
|
45
|
+
"@cabloy/module-glob": "^5.3.19",
|
|
46
46
|
"@cabloy/module-info": "^2.0.3",
|
|
47
47
|
"@cabloy/vite-plugin-babel": "^1.3.3",
|
|
48
48
|
"@cabloy/vue-babel-plugin-jsx": "^2.0.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.174",
|
|
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.
|
|
49
|
+
"zova-suite-a-zova": "^5.1.173"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"clean-package": "^2.2.0",
|