openxiangda-contracts 2.24.0 → 2.26.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/README.md +1 -1
- package/dist/cli.d.ts +38 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/native-compiler/compiler.d.ts.map +1 -1
- package/dist/native-compiler/compiler.js +21 -2
- package/dist/native-compiler/compiler.js.map +1 -1
- package/dist/native-compiler/decimal-lifecycle.d.ts +12 -0
- package/dist/native-compiler/decimal-lifecycle.d.ts.map +1 -0
- package/dist/native-compiler/decimal-lifecycle.js +83 -0
- package/dist/native-compiler/decimal-lifecycle.js.map +1 -0
- package/dist/native-compiler/index.cjs +2 -2
- package/dist/native-compiler/index.d.ts +1 -0
- package/dist/native-compiler/index.d.ts.map +1 -1
- package/dist/native-compiler/index.js +2 -2
- package/dist/native-version.d.ts +1 -0
- package/dist/native-version.d.ts.map +1 -1
- package/dist/native-version.js +1 -0
- package/dist/native-version.js.map +1 -1
- package/dist/schemas.d.ts +91 -799
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +28 -280
- package/dist/schemas.js.map +1 -1
- package/dist/types.d.ts +17 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -5
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +9 -0
- package/dist/validation.js.map +1 -1
- package/package.json +1 -1
- package/dist/studio.d.ts +0 -140
- package/dist/studio.d.ts.map +0 -1
- package/dist/studio.js +0 -23
- package/dist/studio.js.map +0 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DataDecimalReservationLifecycle } from '../types.js';
|
|
2
|
+
export declare class NativeDecimalLifecycleContractError extends Error {
|
|
3
|
+
readonly pointer: string;
|
|
4
|
+
readonly reason: string;
|
|
5
|
+
readonly code = "NATIVE_DECIMAL_LIFECYCLE_INVALID";
|
|
6
|
+
constructor(pointer: string, reason: string);
|
|
7
|
+
}
|
|
8
|
+
/** Shared shape validation and canonical ordering; no authorization is granted. */
|
|
9
|
+
export declare function parseDecimalReservationLifecycle(value: unknown, pointer?: string): DataDecimalReservationLifecycle | undefined;
|
|
10
|
+
/** Both compilers provide canonical resources and their same-resource operation grants. */
|
|
11
|
+
export declare function validateDecimalReservationLifecycles(resources: unknown, operations: unknown, pointer?: string): void;
|
|
12
|
+
//# sourceMappingURL=decimal-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimal-lifecycle.d.ts","sourceRoot":"","sources":["../../src/native-compiler/decimal-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAEnE,qBAAa,mCAAoC,SAAQ,KAAK;IAEhD,QAAQ,CAAC,OAAO,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAD7D,QAAQ,CAAC,IAAI,sCAAsC;gBAC9B,OAAO,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM;CAG9D;AAaD,mFAAmF;AACnF,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,EACd,OAAO,SAAiC,GACvC,+BAA+B,GAAG,SAAS,CA6B7C;AAED,2FAA2F;AAC3F,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,OAAO,EACnB,OAAO,SAA2B,GACjC,IAAI,CAwBN"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export class NativeDecimalLifecycleContractError extends Error {
|
|
2
|
+
pointer;
|
|
3
|
+
reason;
|
|
4
|
+
code = 'NATIVE_DECIMAL_LIFECYCLE_INVALID';
|
|
5
|
+
constructor(pointer, reason) {
|
|
6
|
+
super(`金额生命周期声明无效:${reason}(${pointer})`);
|
|
7
|
+
this.pointer = pointer;
|
|
8
|
+
this.reason = reason;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const KEYS = ['parentTransitions', 'childTransitions', 'fulfilledChildStatuses', 'lockedParentStatuses'];
|
|
12
|
+
const MAPPING = ['amountFieldCode', 'currencyFieldCode', 'relationFieldCode', 'parentFieldCode',
|
|
13
|
+
'rootFieldCode', 'statusFieldCode', 'parentRelationValue', 'childRelationValue'];
|
|
14
|
+
const record = (value) => Boolean(value && typeof value === 'object' && !Array.isArray(value));
|
|
15
|
+
const list = (value) => Array.isArray(value) ? value.filter(record) : [];
|
|
16
|
+
const fail = (pointer, reason) => { throw new NativeDecimalLifecycleContractError(pointer, reason); };
|
|
17
|
+
const status = (value) => typeof value === 'string' && /^[A-Za-z0-9._:-]{1,128}$/.test(value);
|
|
18
|
+
const compare = (left, right) => left < right ? -1 : left > right ? 1 : 0;
|
|
19
|
+
/** Shared shape validation and canonical ordering; no authorization is granted. */
|
|
20
|
+
export function parseDecimalReservationLifecycle(value, pointer = '/decimalReservationLifecycle') {
|
|
21
|
+
if (value === undefined)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (!record(value) || Object.keys(value).some(key => !KEYS.includes(key)) ||
|
|
24
|
+
KEYS.some(key => !Object.prototype.hasOwnProperty.call(value, key)))
|
|
25
|
+
return fail(pointer, '必须完整声明四项规则,不能包含未知属性');
|
|
26
|
+
const edges = (key) => {
|
|
27
|
+
const values = value[key];
|
|
28
|
+
if (!Array.isArray(values) || values.length > 64)
|
|
29
|
+
return fail(`${pointer}/${key}`, '状态边最多 64 条');
|
|
30
|
+
const seen = new Set();
|
|
31
|
+
return values.map((edge, index) => {
|
|
32
|
+
const path = `${pointer}/${key}/${index}`;
|
|
33
|
+
if (!record(edge) || Object.keys(edge).some(k => k !== 'from' && k !== 'to') ||
|
|
34
|
+
!status(edge.from) || !status(edge.to) || edge.from === edge.to)
|
|
35
|
+
return fail(path, '状态边必须包含不同的有效 from/to');
|
|
36
|
+
const id = JSON.stringify([edge.from, edge.to]);
|
|
37
|
+
if (seen.has(id))
|
|
38
|
+
return fail(path, '状态边不能重复');
|
|
39
|
+
seen.add(id);
|
|
40
|
+
return { from: edge.from, to: edge.to };
|
|
41
|
+
}).sort((a, b) => compare(a.from, b.from) || compare(a.to, b.to));
|
|
42
|
+
};
|
|
43
|
+
const statuses = (key) => {
|
|
44
|
+
const values = value[key];
|
|
45
|
+
if (!Array.isArray(values) || values.length < 1 || values.length > 16 ||
|
|
46
|
+
values.some(item => !status(item)) || new Set(values).size !== values.length)
|
|
47
|
+
return fail(`${pointer}/${key}`, '状态集合必须包含 1 到 16 个不重复的有效状态');
|
|
48
|
+
return [...values].sort(compare);
|
|
49
|
+
};
|
|
50
|
+
return { parentTransitions: edges('parentTransitions'), childTransitions: edges('childTransitions'),
|
|
51
|
+
fulfilledChildStatuses: statuses('fulfilledChildStatuses'), lockedParentStatuses: statuses('lockedParentStatuses') };
|
|
52
|
+
}
|
|
53
|
+
/** Both compilers provide canonical resources and their same-resource operation grants. */
|
|
54
|
+
export function validateDecimalReservationLifecycles(resources, operations, pointer = '/config/data/resources') {
|
|
55
|
+
list(resources).forEach((resource, index) => {
|
|
56
|
+
const path = `${pointer}/${index}/decimalReservationLifecycle`;
|
|
57
|
+
const lifecycle = parseDecimalReservationLifecycle(resource.decimalReservationLifecycle, path);
|
|
58
|
+
if (!lifecycle)
|
|
59
|
+
return;
|
|
60
|
+
const grants = list(operations).map(operation => operation.platformAccess?.decimalReservation)
|
|
61
|
+
.filter(grant => record(grant) && grant.resourceCode === resource.code);
|
|
62
|
+
const reserve = grants.find(grant => grant.mode === 'reserve');
|
|
63
|
+
if (!reserve)
|
|
64
|
+
return fail(path, '需要同资源已声明的 reserve 动作映射');
|
|
65
|
+
if (MAPPING.some(key => typeof reserve[key] !== 'string') ||
|
|
66
|
+
grants.some(grant => MAPPING.some(key => grant[key] !== reserve[key])))
|
|
67
|
+
return fail(path, '同资源额度动作的字段映射必须一致');
|
|
68
|
+
const field = list(resource.schema?.fields).find(item => item.code === reserve.statusFieldCode);
|
|
69
|
+
if (field?.type !== 'option.single')
|
|
70
|
+
return fail(path, '额度状态字段必须为 option.single');
|
|
71
|
+
const allowed = new Set(list(field.options).map(option => option.value));
|
|
72
|
+
for (const key of KEYS) {
|
|
73
|
+
const values = key === 'parentTransitions' || key === 'childTransitions'
|
|
74
|
+
? lifecycle[key].flatMap(edge => [edge.from, edge.to]) : lifecycle[key];
|
|
75
|
+
if (values.some(value => !allowed.has(value)))
|
|
76
|
+
return fail(`${path}/${key}`, '状态必须来自额度状态字段的选项');
|
|
77
|
+
}
|
|
78
|
+
if (grants.some(grant => grant.mode === 'reserve' && Array.isArray(grant.eligibleParentStatuses) &&
|
|
79
|
+
grant.eligibleParentStatuses.some((value) => lifecycle.lockedParentStatuses.includes(String(value)))))
|
|
80
|
+
return fail(`${path}/lockedParentStatuses`, '锁定父状态不能允许新预留');
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=decimal-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimal-lifecycle.js","sourceRoot":"","sources":["../../src/native-compiler/decimal-lifecycle.ts"],"names":[],"mappings":"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"}
|