@djvlc/contracts-validators 1.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/index.d.mts +150 -0
- package/dist/index.d.ts +150 -0
- package/dist/index.js +257 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +206 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +66 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import Ajv from 'ajv';
|
|
2
|
+
import { PageSchema, ComponentMeta, ActionDefinition, ActionExecuteRequest, DataQueryDefinition, DataQueryRequest } from '@djvlc/contracts-types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @djvlc/contracts-validators - DJV 低代码平台预编译校验器包
|
|
6
|
+
*
|
|
7
|
+
* 提供预编译的 Ajv 校验器,避免各仓库自行编写校验逻辑导致分叉
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 校验结果
|
|
14
|
+
*/
|
|
15
|
+
interface ValidationResult {
|
|
16
|
+
/** 是否有效 */
|
|
17
|
+
valid: boolean;
|
|
18
|
+
/** 错误列表 */
|
|
19
|
+
errors: ValidationError[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 校验错误
|
|
23
|
+
*/
|
|
24
|
+
interface ValidationError {
|
|
25
|
+
/** 错误路径 */
|
|
26
|
+
path: string;
|
|
27
|
+
/** 错误消息 */
|
|
28
|
+
message: string;
|
|
29
|
+
/** 错误关键字 */
|
|
30
|
+
keyword?: string;
|
|
31
|
+
/** 期望值 */
|
|
32
|
+
expected?: unknown;
|
|
33
|
+
/** 实际值 */
|
|
34
|
+
actual?: unknown;
|
|
35
|
+
}
|
|
36
|
+
declare const ajv: Ajv;
|
|
37
|
+
/**
|
|
38
|
+
* 校验 PageSchema
|
|
39
|
+
* @param data 待校验数据
|
|
40
|
+
* @returns 校验结果
|
|
41
|
+
*/
|
|
42
|
+
declare function validatePage(data: unknown): ValidationResult;
|
|
43
|
+
/**
|
|
44
|
+
* 校验 PageSchema,返回类型安全的结果
|
|
45
|
+
*/
|
|
46
|
+
declare function validatePageSchema(data: unknown): ValidationResult & {
|
|
47
|
+
data?: PageSchema;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* 断言为 PageSchema
|
|
51
|
+
*/
|
|
52
|
+
declare function assertPageSchema(data: unknown): asserts data is PageSchema;
|
|
53
|
+
/**
|
|
54
|
+
* 校验 ComponentMeta
|
|
55
|
+
* @param data 待校验数据
|
|
56
|
+
* @returns 校验结果
|
|
57
|
+
*/
|
|
58
|
+
declare function validateComponentMeta(data: unknown): ValidationResult;
|
|
59
|
+
/**
|
|
60
|
+
* 断言为 ComponentMeta
|
|
61
|
+
*/
|
|
62
|
+
declare function assertComponentMeta(data: unknown): asserts data is ComponentMeta;
|
|
63
|
+
/**
|
|
64
|
+
* 校验 ActionDefinition
|
|
65
|
+
* @param data 待校验数据
|
|
66
|
+
* @returns 校验结果
|
|
67
|
+
*/
|
|
68
|
+
declare function validateActionDefinition(data: unknown): ValidationResult;
|
|
69
|
+
/**
|
|
70
|
+
* 断言为 ActionDefinition
|
|
71
|
+
*/
|
|
72
|
+
declare function assertActionDefinition(data: unknown): asserts data is ActionDefinition;
|
|
73
|
+
/**
|
|
74
|
+
* 校验 ActionExecuteRequest
|
|
75
|
+
*/
|
|
76
|
+
declare function validateActionRequest(data: unknown): ValidationResult;
|
|
77
|
+
/**
|
|
78
|
+
* 断言为 ActionExecuteRequest
|
|
79
|
+
*/
|
|
80
|
+
declare function assertActionRequest(data: unknown): asserts data is ActionExecuteRequest;
|
|
81
|
+
/**
|
|
82
|
+
* 校验 DataQueryDefinition
|
|
83
|
+
* @param data 待校验数据
|
|
84
|
+
* @returns 校验结果
|
|
85
|
+
*/
|
|
86
|
+
declare function validateDataQueryDefinition(data: unknown): ValidationResult;
|
|
87
|
+
/**
|
|
88
|
+
* 断言为 DataQueryDefinition
|
|
89
|
+
*/
|
|
90
|
+
declare function assertDataQueryDefinition(data: unknown): asserts data is DataQueryDefinition;
|
|
91
|
+
/**
|
|
92
|
+
* 校验 DataQueryRequest
|
|
93
|
+
*/
|
|
94
|
+
declare function validateQueryRequest(data: unknown): ValidationResult;
|
|
95
|
+
/**
|
|
96
|
+
* 断言为 DataQueryRequest
|
|
97
|
+
*/
|
|
98
|
+
declare function assertQueryRequest(data: unknown): asserts data is DataQueryRequest;
|
|
99
|
+
/**
|
|
100
|
+
* 检查是否为有效的 PageSchema
|
|
101
|
+
*/
|
|
102
|
+
declare function isPageSchema(value: unknown): value is PageSchema;
|
|
103
|
+
/**
|
|
104
|
+
* 检查是否为有效的 ComponentMeta
|
|
105
|
+
*/
|
|
106
|
+
declare function isComponentMeta(value: unknown): value is ComponentMeta;
|
|
107
|
+
/**
|
|
108
|
+
* 检查是否为有效的 ActionDefinition
|
|
109
|
+
*/
|
|
110
|
+
declare function isActionDefinition(value: unknown): value is ActionDefinition;
|
|
111
|
+
/**
|
|
112
|
+
* 检查是否为有效的 DataQueryDefinition
|
|
113
|
+
*/
|
|
114
|
+
declare function isDataQueryDefinition(value: unknown): value is DataQueryDefinition;
|
|
115
|
+
/**
|
|
116
|
+
* 检查是否为有效的 ActionExecuteRequest
|
|
117
|
+
*/
|
|
118
|
+
declare function isActionRequest(value: unknown): value is ActionExecuteRequest;
|
|
119
|
+
/**
|
|
120
|
+
* 检查是否为有效的 DataQueryRequest
|
|
121
|
+
*/
|
|
122
|
+
declare function isQueryRequest(value: unknown): value is DataQueryRequest;
|
|
123
|
+
/**
|
|
124
|
+
* 批量校验结果
|
|
125
|
+
*/
|
|
126
|
+
interface BatchValidationResult<T> {
|
|
127
|
+
/** 全部有效 */
|
|
128
|
+
allValid: boolean;
|
|
129
|
+
/** 有效项数量 */
|
|
130
|
+
validCount: number;
|
|
131
|
+
/** 无效项数量 */
|
|
132
|
+
invalidCount: number;
|
|
133
|
+
/** 各项结果 */
|
|
134
|
+
results: Array<{
|
|
135
|
+
index: number;
|
|
136
|
+
valid: boolean;
|
|
137
|
+
data?: T;
|
|
138
|
+
errors: ValidationError[];
|
|
139
|
+
}>;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 批量校验 PageSchema
|
|
143
|
+
*/
|
|
144
|
+
declare function validatePages(items: unknown[]): BatchValidationResult<PageSchema>;
|
|
145
|
+
/**
|
|
146
|
+
* 批量校验 ComponentMeta
|
|
147
|
+
*/
|
|
148
|
+
declare function validateComponentMetas(items: unknown[]): BatchValidationResult<ComponentMeta>;
|
|
149
|
+
|
|
150
|
+
export { type BatchValidationResult, type ValidationError, type ValidationResult, ajv, assertActionDefinition, assertActionRequest, assertComponentMeta, assertDataQueryDefinition, assertPageSchema, assertQueryRequest, isActionDefinition, isActionRequest, isComponentMeta, isDataQueryDefinition, isPageSchema, isQueryRequest, validateActionDefinition, validateActionRequest, validateComponentMeta, validateComponentMetas, validateDataQueryDefinition, validatePage, validatePageSchema, validatePages, validateQueryRequest };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import Ajv from 'ajv';
|
|
2
|
+
import { PageSchema, ComponentMeta, ActionDefinition, ActionExecuteRequest, DataQueryDefinition, DataQueryRequest } from '@djvlc/contracts-types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @djvlc/contracts-validators - DJV 低代码平台预编译校验器包
|
|
6
|
+
*
|
|
7
|
+
* 提供预编译的 Ajv 校验器,避免各仓库自行编写校验逻辑导致分叉
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 校验结果
|
|
14
|
+
*/
|
|
15
|
+
interface ValidationResult {
|
|
16
|
+
/** 是否有效 */
|
|
17
|
+
valid: boolean;
|
|
18
|
+
/** 错误列表 */
|
|
19
|
+
errors: ValidationError[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 校验错误
|
|
23
|
+
*/
|
|
24
|
+
interface ValidationError {
|
|
25
|
+
/** 错误路径 */
|
|
26
|
+
path: string;
|
|
27
|
+
/** 错误消息 */
|
|
28
|
+
message: string;
|
|
29
|
+
/** 错误关键字 */
|
|
30
|
+
keyword?: string;
|
|
31
|
+
/** 期望值 */
|
|
32
|
+
expected?: unknown;
|
|
33
|
+
/** 实际值 */
|
|
34
|
+
actual?: unknown;
|
|
35
|
+
}
|
|
36
|
+
declare const ajv: Ajv;
|
|
37
|
+
/**
|
|
38
|
+
* 校验 PageSchema
|
|
39
|
+
* @param data 待校验数据
|
|
40
|
+
* @returns 校验结果
|
|
41
|
+
*/
|
|
42
|
+
declare function validatePage(data: unknown): ValidationResult;
|
|
43
|
+
/**
|
|
44
|
+
* 校验 PageSchema,返回类型安全的结果
|
|
45
|
+
*/
|
|
46
|
+
declare function validatePageSchema(data: unknown): ValidationResult & {
|
|
47
|
+
data?: PageSchema;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* 断言为 PageSchema
|
|
51
|
+
*/
|
|
52
|
+
declare function assertPageSchema(data: unknown): asserts data is PageSchema;
|
|
53
|
+
/**
|
|
54
|
+
* 校验 ComponentMeta
|
|
55
|
+
* @param data 待校验数据
|
|
56
|
+
* @returns 校验结果
|
|
57
|
+
*/
|
|
58
|
+
declare function validateComponentMeta(data: unknown): ValidationResult;
|
|
59
|
+
/**
|
|
60
|
+
* 断言为 ComponentMeta
|
|
61
|
+
*/
|
|
62
|
+
declare function assertComponentMeta(data: unknown): asserts data is ComponentMeta;
|
|
63
|
+
/**
|
|
64
|
+
* 校验 ActionDefinition
|
|
65
|
+
* @param data 待校验数据
|
|
66
|
+
* @returns 校验结果
|
|
67
|
+
*/
|
|
68
|
+
declare function validateActionDefinition(data: unknown): ValidationResult;
|
|
69
|
+
/**
|
|
70
|
+
* 断言为 ActionDefinition
|
|
71
|
+
*/
|
|
72
|
+
declare function assertActionDefinition(data: unknown): asserts data is ActionDefinition;
|
|
73
|
+
/**
|
|
74
|
+
* 校验 ActionExecuteRequest
|
|
75
|
+
*/
|
|
76
|
+
declare function validateActionRequest(data: unknown): ValidationResult;
|
|
77
|
+
/**
|
|
78
|
+
* 断言为 ActionExecuteRequest
|
|
79
|
+
*/
|
|
80
|
+
declare function assertActionRequest(data: unknown): asserts data is ActionExecuteRequest;
|
|
81
|
+
/**
|
|
82
|
+
* 校验 DataQueryDefinition
|
|
83
|
+
* @param data 待校验数据
|
|
84
|
+
* @returns 校验结果
|
|
85
|
+
*/
|
|
86
|
+
declare function validateDataQueryDefinition(data: unknown): ValidationResult;
|
|
87
|
+
/**
|
|
88
|
+
* 断言为 DataQueryDefinition
|
|
89
|
+
*/
|
|
90
|
+
declare function assertDataQueryDefinition(data: unknown): asserts data is DataQueryDefinition;
|
|
91
|
+
/**
|
|
92
|
+
* 校验 DataQueryRequest
|
|
93
|
+
*/
|
|
94
|
+
declare function validateQueryRequest(data: unknown): ValidationResult;
|
|
95
|
+
/**
|
|
96
|
+
* 断言为 DataQueryRequest
|
|
97
|
+
*/
|
|
98
|
+
declare function assertQueryRequest(data: unknown): asserts data is DataQueryRequest;
|
|
99
|
+
/**
|
|
100
|
+
* 检查是否为有效的 PageSchema
|
|
101
|
+
*/
|
|
102
|
+
declare function isPageSchema(value: unknown): value is PageSchema;
|
|
103
|
+
/**
|
|
104
|
+
* 检查是否为有效的 ComponentMeta
|
|
105
|
+
*/
|
|
106
|
+
declare function isComponentMeta(value: unknown): value is ComponentMeta;
|
|
107
|
+
/**
|
|
108
|
+
* 检查是否为有效的 ActionDefinition
|
|
109
|
+
*/
|
|
110
|
+
declare function isActionDefinition(value: unknown): value is ActionDefinition;
|
|
111
|
+
/**
|
|
112
|
+
* 检查是否为有效的 DataQueryDefinition
|
|
113
|
+
*/
|
|
114
|
+
declare function isDataQueryDefinition(value: unknown): value is DataQueryDefinition;
|
|
115
|
+
/**
|
|
116
|
+
* 检查是否为有效的 ActionExecuteRequest
|
|
117
|
+
*/
|
|
118
|
+
declare function isActionRequest(value: unknown): value is ActionExecuteRequest;
|
|
119
|
+
/**
|
|
120
|
+
* 检查是否为有效的 DataQueryRequest
|
|
121
|
+
*/
|
|
122
|
+
declare function isQueryRequest(value: unknown): value is DataQueryRequest;
|
|
123
|
+
/**
|
|
124
|
+
* 批量校验结果
|
|
125
|
+
*/
|
|
126
|
+
interface BatchValidationResult<T> {
|
|
127
|
+
/** 全部有效 */
|
|
128
|
+
allValid: boolean;
|
|
129
|
+
/** 有效项数量 */
|
|
130
|
+
validCount: number;
|
|
131
|
+
/** 无效项数量 */
|
|
132
|
+
invalidCount: number;
|
|
133
|
+
/** 各项结果 */
|
|
134
|
+
results: Array<{
|
|
135
|
+
index: number;
|
|
136
|
+
valid: boolean;
|
|
137
|
+
data?: T;
|
|
138
|
+
errors: ValidationError[];
|
|
139
|
+
}>;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 批量校验 PageSchema
|
|
143
|
+
*/
|
|
144
|
+
declare function validatePages(items: unknown[]): BatchValidationResult<PageSchema>;
|
|
145
|
+
/**
|
|
146
|
+
* 批量校验 ComponentMeta
|
|
147
|
+
*/
|
|
148
|
+
declare function validateComponentMetas(items: unknown[]): BatchValidationResult<ComponentMeta>;
|
|
149
|
+
|
|
150
|
+
export { type BatchValidationResult, type ValidationError, type ValidationResult, ajv, assertActionDefinition, assertActionRequest, assertComponentMeta, assertDataQueryDefinition, assertPageSchema, assertQueryRequest, isActionDefinition, isActionRequest, isComponentMeta, isDataQueryDefinition, isPageSchema, isQueryRequest, validateActionDefinition, validateActionRequest, validateComponentMeta, validateComponentMetas, validateDataQueryDefinition, validatePage, validatePageSchema, validatePages, validateQueryRequest };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
ajv: () => ajv,
|
|
34
|
+
assertActionDefinition: () => assertActionDefinition,
|
|
35
|
+
assertActionRequest: () => assertActionRequest,
|
|
36
|
+
assertComponentMeta: () => assertComponentMeta,
|
|
37
|
+
assertDataQueryDefinition: () => assertDataQueryDefinition,
|
|
38
|
+
assertPageSchema: () => assertPageSchema,
|
|
39
|
+
assertQueryRequest: () => assertQueryRequest,
|
|
40
|
+
isActionDefinition: () => isActionDefinition,
|
|
41
|
+
isActionRequest: () => isActionRequest,
|
|
42
|
+
isComponentMeta: () => isComponentMeta,
|
|
43
|
+
isDataQueryDefinition: () => isDataQueryDefinition,
|
|
44
|
+
isPageSchema: () => isPageSchema,
|
|
45
|
+
isQueryRequest: () => isQueryRequest,
|
|
46
|
+
validateActionDefinition: () => validateActionDefinition,
|
|
47
|
+
validateActionRequest: () => validateActionRequest,
|
|
48
|
+
validateComponentMeta: () => validateComponentMeta,
|
|
49
|
+
validateComponentMetas: () => validateComponentMetas,
|
|
50
|
+
validateDataQueryDefinition: () => validateDataQueryDefinition,
|
|
51
|
+
validatePage: () => validatePage,
|
|
52
|
+
validatePageSchema: () => validatePageSchema,
|
|
53
|
+
validatePages: () => validatePages,
|
|
54
|
+
validateQueryRequest: () => validateQueryRequest
|
|
55
|
+
});
|
|
56
|
+
module.exports = __toCommonJS(index_exports);
|
|
57
|
+
var import_ajv = __toESM(require("ajv"));
|
|
58
|
+
var import_ajv_formats = __toESM(require("ajv-formats"));
|
|
59
|
+
var import_contracts_schemas = require("@djvlc/contracts-schemas");
|
|
60
|
+
var ajv = new import_ajv.default({
|
|
61
|
+
allErrors: true,
|
|
62
|
+
verbose: true,
|
|
63
|
+
strict: false
|
|
64
|
+
});
|
|
65
|
+
(0, import_ajv_formats.default)(ajv);
|
|
66
|
+
var pageValidator = ajv.compile(import_contracts_schemas.pageSchema);
|
|
67
|
+
var componentMetaValidator = ajv.compile(import_contracts_schemas.componentMetaSchema);
|
|
68
|
+
var actionSpecValidator = ajv.compile(import_contracts_schemas.actionSpecSchema);
|
|
69
|
+
var dataQuerySpecValidator = ajv.compile(import_contracts_schemas.dataQuerySpecSchema);
|
|
70
|
+
function convertAjvErrors(errors) {
|
|
71
|
+
if (!errors) return [];
|
|
72
|
+
return errors.map((error) => ({
|
|
73
|
+
path: error.instancePath || "/",
|
|
74
|
+
message: error.message || "Unknown error",
|
|
75
|
+
keyword: error.keyword,
|
|
76
|
+
expected: error.params,
|
|
77
|
+
actual: error.data
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
function createResult(valid, errors) {
|
|
81
|
+
return {
|
|
82
|
+
valid,
|
|
83
|
+
errors: convertAjvErrors(errors)
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function validatePage(data) {
|
|
87
|
+
const valid = pageValidator(data);
|
|
88
|
+
return createResult(valid, pageValidator.errors);
|
|
89
|
+
}
|
|
90
|
+
function validatePageSchema(data) {
|
|
91
|
+
const result = validatePage(data);
|
|
92
|
+
if (result.valid) {
|
|
93
|
+
return { ...result, data };
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
function assertPageSchema(data) {
|
|
98
|
+
const result = validatePage(data);
|
|
99
|
+
if (!result.valid) {
|
|
100
|
+
throw new Error(`Invalid PageSchema: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function validateComponentMeta(data) {
|
|
104
|
+
const valid = componentMetaValidator(data);
|
|
105
|
+
return createResult(valid, componentMetaValidator.errors);
|
|
106
|
+
}
|
|
107
|
+
function assertComponentMeta(data) {
|
|
108
|
+
const result = validateComponentMeta(data);
|
|
109
|
+
if (!result.valid) {
|
|
110
|
+
throw new Error(`Invalid ComponentMeta: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function validateActionDefinition(data) {
|
|
114
|
+
const valid = actionSpecValidator(data);
|
|
115
|
+
return createResult(valid, actionSpecValidator.errors);
|
|
116
|
+
}
|
|
117
|
+
function assertActionDefinition(data) {
|
|
118
|
+
const result = validateActionDefinition(data);
|
|
119
|
+
if (!result.valid) {
|
|
120
|
+
throw new Error(`Invalid ActionDefinition: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function validateActionRequest(data) {
|
|
124
|
+
const errors = [];
|
|
125
|
+
if (!data || typeof data !== "object") {
|
|
126
|
+
errors.push({ path: "/", message: "ActionExecuteRequest must be an object" });
|
|
127
|
+
return { valid: false, errors };
|
|
128
|
+
}
|
|
129
|
+
const obj = data;
|
|
130
|
+
if (typeof obj.actionType !== "string" || !obj.actionType) {
|
|
131
|
+
errors.push({ path: "/actionType", message: "actionType is required and must be a string" });
|
|
132
|
+
}
|
|
133
|
+
if (obj.params === void 0 || typeof obj.params !== "object") {
|
|
134
|
+
errors.push({ path: "/params", message: "params is required and must be an object" });
|
|
135
|
+
}
|
|
136
|
+
if (obj.context === void 0 || typeof obj.context !== "object") {
|
|
137
|
+
errors.push({ path: "/context", message: "context is required and must be an object" });
|
|
138
|
+
}
|
|
139
|
+
return { valid: errors.length === 0, errors };
|
|
140
|
+
}
|
|
141
|
+
function assertActionRequest(data) {
|
|
142
|
+
const result = validateActionRequest(data);
|
|
143
|
+
if (!result.valid) {
|
|
144
|
+
throw new Error(`Invalid ActionExecuteRequest: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function validateDataQueryDefinition(data) {
|
|
148
|
+
const valid = dataQuerySpecValidator(data);
|
|
149
|
+
return createResult(valid, dataQuerySpecValidator.errors);
|
|
150
|
+
}
|
|
151
|
+
function assertDataQueryDefinition(data) {
|
|
152
|
+
const result = validateDataQueryDefinition(data);
|
|
153
|
+
if (!result.valid) {
|
|
154
|
+
throw new Error(`Invalid DataQueryDefinition: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function validateQueryRequest(data) {
|
|
158
|
+
const errors = [];
|
|
159
|
+
if (!data || typeof data !== "object") {
|
|
160
|
+
errors.push({ path: "/", message: "DataQueryRequest must be an object" });
|
|
161
|
+
return { valid: false, errors };
|
|
162
|
+
}
|
|
163
|
+
const obj = data;
|
|
164
|
+
if (typeof obj.queryVersionId !== "string" || !obj.queryVersionId) {
|
|
165
|
+
errors.push({ path: "/queryVersionId", message: "queryVersionId is required and must be a string" });
|
|
166
|
+
}
|
|
167
|
+
if (obj.params === void 0 || typeof obj.params !== "object") {
|
|
168
|
+
errors.push({ path: "/params", message: "params is required and must be an object" });
|
|
169
|
+
}
|
|
170
|
+
return { valid: errors.length === 0, errors };
|
|
171
|
+
}
|
|
172
|
+
function assertQueryRequest(data) {
|
|
173
|
+
const result = validateQueryRequest(data);
|
|
174
|
+
if (!result.valid) {
|
|
175
|
+
throw new Error(`Invalid DataQueryRequest: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function isPageSchema(value) {
|
|
179
|
+
return validatePage(value).valid;
|
|
180
|
+
}
|
|
181
|
+
function isComponentMeta(value) {
|
|
182
|
+
return validateComponentMeta(value).valid;
|
|
183
|
+
}
|
|
184
|
+
function isActionDefinition(value) {
|
|
185
|
+
return validateActionDefinition(value).valid;
|
|
186
|
+
}
|
|
187
|
+
function isDataQueryDefinition(value) {
|
|
188
|
+
return validateDataQueryDefinition(value).valid;
|
|
189
|
+
}
|
|
190
|
+
function isActionRequest(value) {
|
|
191
|
+
return validateActionRequest(value).valid;
|
|
192
|
+
}
|
|
193
|
+
function isQueryRequest(value) {
|
|
194
|
+
return validateQueryRequest(value).valid;
|
|
195
|
+
}
|
|
196
|
+
function validatePages(items) {
|
|
197
|
+
const results = items.map((item, index) => {
|
|
198
|
+
const result = validatePage(item);
|
|
199
|
+
return {
|
|
200
|
+
index,
|
|
201
|
+
valid: result.valid,
|
|
202
|
+
data: result.valid ? item : void 0,
|
|
203
|
+
errors: result.errors
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
const validCount = results.filter((r) => r.valid).length;
|
|
207
|
+
return {
|
|
208
|
+
allValid: validCount === items.length,
|
|
209
|
+
validCount,
|
|
210
|
+
invalidCount: items.length - validCount,
|
|
211
|
+
results
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function validateComponentMetas(items) {
|
|
215
|
+
const results = items.map((item, index) => {
|
|
216
|
+
const result = validateComponentMeta(item);
|
|
217
|
+
return {
|
|
218
|
+
index,
|
|
219
|
+
valid: result.valid,
|
|
220
|
+
data: result.valid ? item : void 0,
|
|
221
|
+
errors: result.errors
|
|
222
|
+
};
|
|
223
|
+
});
|
|
224
|
+
const validCount = results.filter((r) => r.valid).length;
|
|
225
|
+
return {
|
|
226
|
+
allValid: validCount === items.length,
|
|
227
|
+
validCount,
|
|
228
|
+
invalidCount: items.length - validCount,
|
|
229
|
+
results
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
233
|
+
0 && (module.exports = {
|
|
234
|
+
ajv,
|
|
235
|
+
assertActionDefinition,
|
|
236
|
+
assertActionRequest,
|
|
237
|
+
assertComponentMeta,
|
|
238
|
+
assertDataQueryDefinition,
|
|
239
|
+
assertPageSchema,
|
|
240
|
+
assertQueryRequest,
|
|
241
|
+
isActionDefinition,
|
|
242
|
+
isActionRequest,
|
|
243
|
+
isComponentMeta,
|
|
244
|
+
isDataQueryDefinition,
|
|
245
|
+
isPageSchema,
|
|
246
|
+
isQueryRequest,
|
|
247
|
+
validateActionDefinition,
|
|
248
|
+
validateActionRequest,
|
|
249
|
+
validateComponentMeta,
|
|
250
|
+
validateComponentMetas,
|
|
251
|
+
validateDataQueryDefinition,
|
|
252
|
+
validatePage,
|
|
253
|
+
validatePageSchema,
|
|
254
|
+
validatePages,
|
|
255
|
+
validateQueryRequest
|
|
256
|
+
});
|
|
257
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @djvlc/contracts-validators - DJV 低代码平台预编译校验器包\n *\n * 提供预编译的 Ajv 校验器,避免各仓库自行编写校验逻辑导致分叉\n *\n * @packageDocumentation\n */\n\nimport Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nimport {\n pageSchema,\n componentMetaSchema,\n actionSpecSchema,\n dataQuerySpecSchema,\n} from '@djvlc/contracts-schemas';\nimport type {\n PageSchema,\n ComponentMeta,\n ActionDefinition,\n DataQueryDefinition,\n ActionExecuteRequest,\n DataQueryRequest,\n} from '@djvlc/contracts-types';\n\n// ==================== 校验结果类型 ====================\n\n/**\n * 校验结果\n */\nexport interface ValidationResult {\n /** 是否有效 */\n valid: boolean;\n /** 错误列表 */\n errors: ValidationError[];\n}\n\n/**\n * 校验错误\n */\nexport interface ValidationError {\n /** 错误路径 */\n path: string;\n /** 错误消息 */\n message: string;\n /** 错误关键字 */\n keyword?: string;\n /** 期望值 */\n expected?: unknown;\n /** 实际值 */\n actual?: unknown;\n}\n\n// ==================== Ajv 实例 ====================\n\nconst ajv = new Ajv({\n allErrors: true,\n verbose: true,\n strict: false,\n});\n\naddFormats(ajv);\n\n// 预编译 Schema\nconst pageValidator = ajv.compile(pageSchema);\nconst componentMetaValidator = ajv.compile(componentMetaSchema);\nconst actionSpecValidator = ajv.compile(actionSpecSchema);\nconst dataQuerySpecValidator = ajv.compile(dataQuerySpecSchema);\n\n// ==================== 工具函数 ====================\n\n/**\n * 将 Ajv 错误转换为标准格式\n */\nfunction convertAjvErrors(errors: typeof ajv.errors): ValidationError[] {\n if (!errors) return [];\n\n return errors.map((error) => ({\n path: error.instancePath || '/',\n message: error.message || 'Unknown error',\n keyword: error.keyword,\n expected: error.params,\n actual: error.data,\n }));\n}\n\n/**\n * 创建校验结果\n */\nfunction createResult(valid: boolean, errors: typeof ajv.errors): ValidationResult {\n return {\n valid,\n errors: convertAjvErrors(errors),\n };\n}\n\n\n// ==================== 页面校验 ====================\n\n/**\n * 校验 PageSchema\n * @param data 待校验数据\n * @returns 校验结果\n */\nexport function validatePage(data: unknown): ValidationResult {\n const valid = pageValidator(data);\n return createResult(valid, pageValidator.errors);\n}\n\n/**\n * 校验 PageSchema,返回类型安全的结果\n */\nexport function validatePageSchema(data: unknown): ValidationResult & { data?: PageSchema } {\n const result = validatePage(data);\n if (result.valid) {\n return { ...result, data: data as PageSchema };\n }\n return result;\n}\n\n/**\n * 断言为 PageSchema\n */\nexport function assertPageSchema(data: unknown): asserts data is PageSchema {\n const result = validatePage(data);\n if (!result.valid) {\n throw new Error(`Invalid PageSchema: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n// ==================== 组件元数据校验 ====================\n\n/**\n * 校验 ComponentMeta\n * @param data 待校验数据\n * @returns 校验结果\n */\nexport function validateComponentMeta(data: unknown): ValidationResult {\n const valid = componentMetaValidator(data);\n return createResult(valid, componentMetaValidator.errors);\n}\n\n/**\n * 断言为 ComponentMeta\n */\nexport function assertComponentMeta(data: unknown): asserts data is ComponentMeta {\n const result = validateComponentMeta(data);\n if (!result.valid) {\n throw new Error(`Invalid ComponentMeta: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n// ==================== Action 校验 ====================\n\n/**\n * 校验 ActionDefinition\n * @param data 待校验数据\n * @returns 校验结果\n */\nexport function validateActionDefinition(data: unknown): ValidationResult {\n const valid = actionSpecValidator(data);\n return createResult(valid, actionSpecValidator.errors);\n}\n\n/**\n * 断言为 ActionDefinition\n */\nexport function assertActionDefinition(data: unknown): asserts data is ActionDefinition {\n const result = validateActionDefinition(data);\n if (!result.valid) {\n throw new Error(`Invalid ActionDefinition: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n/**\n * 校验 ActionExecuteRequest\n */\nexport function validateActionRequest(data: unknown): ValidationResult {\n const errors: ValidationError[] = [];\n\n if (!data || typeof data !== 'object') {\n errors.push({ path: '/', message: 'ActionExecuteRequest must be an object' });\n return { valid: false, errors };\n }\n\n const obj = data as Record<string, unknown>;\n\n if (typeof obj.actionType !== 'string' || !obj.actionType) {\n errors.push({ path: '/actionType', message: 'actionType is required and must be a string' });\n }\n\n if (obj.params === undefined || typeof obj.params !== 'object') {\n errors.push({ path: '/params', message: 'params is required and must be an object' });\n }\n\n if (obj.context === undefined || typeof obj.context !== 'object') {\n errors.push({ path: '/context', message: 'context is required and must be an object' });\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * 断言为 ActionExecuteRequest\n */\nexport function assertActionRequest(data: unknown): asserts data is ActionExecuteRequest {\n const result = validateActionRequest(data);\n if (!result.valid) {\n throw new Error(`Invalid ActionExecuteRequest: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n// ==================== Data Query 校验 ====================\n\n/**\n * 校验 DataQueryDefinition\n * @param data 待校验数据\n * @returns 校验结果\n */\nexport function validateDataQueryDefinition(data: unknown): ValidationResult {\n const valid = dataQuerySpecValidator(data);\n return createResult(valid, dataQuerySpecValidator.errors);\n}\n\n/**\n * 断言为 DataQueryDefinition\n */\nexport function assertDataQueryDefinition(data: unknown): asserts data is DataQueryDefinition {\n const result = validateDataQueryDefinition(data);\n if (!result.valid) {\n throw new Error(`Invalid DataQueryDefinition: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n/**\n * 校验 DataQueryRequest\n */\nexport function validateQueryRequest(data: unknown): ValidationResult {\n const errors: ValidationError[] = [];\n\n if (!data || typeof data !== 'object') {\n errors.push({ path: '/', message: 'DataQueryRequest must be an object' });\n return { valid: false, errors };\n }\n\n const obj = data as Record<string, unknown>;\n\n if (typeof obj.queryVersionId !== 'string' || !obj.queryVersionId) {\n errors.push({ path: '/queryVersionId', message: 'queryVersionId is required and must be a string' });\n }\n\n if (obj.params === undefined || typeof obj.params !== 'object') {\n errors.push({ path: '/params', message: 'params is required and must be an object' });\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * 断言为 DataQueryRequest\n */\nexport function assertQueryRequest(data: unknown): asserts data is DataQueryRequest {\n const result = validateQueryRequest(data);\n if (!result.valid) {\n throw new Error(`Invalid DataQueryRequest: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n// ==================== 类型保护函数 ====================\n\n/**\n * 检查是否为有效的 PageSchema\n */\nexport function isPageSchema(value: unknown): value is PageSchema {\n return validatePage(value).valid;\n}\n\n/**\n * 检查是否为有效的 ComponentMeta\n */\nexport function isComponentMeta(value: unknown): value is ComponentMeta {\n return validateComponentMeta(value).valid;\n}\n\n/**\n * 检查是否为有效的 ActionDefinition\n */\nexport function isActionDefinition(value: unknown): value is ActionDefinition {\n return validateActionDefinition(value).valid;\n}\n\n/**\n * 检查是否为有效的 DataQueryDefinition\n */\nexport function isDataQueryDefinition(value: unknown): value is DataQueryDefinition {\n return validateDataQueryDefinition(value).valid;\n}\n\n/**\n * 检查是否为有效的 ActionExecuteRequest\n */\nexport function isActionRequest(value: unknown): value is ActionExecuteRequest {\n return validateActionRequest(value).valid;\n}\n\n/**\n * 检查是否为有效的 DataQueryRequest\n */\nexport function isQueryRequest(value: unknown): value is DataQueryRequest {\n return validateQueryRequest(value).valid;\n}\n\n// ==================== 批量校验 ====================\n\n/**\n * 批量校验结果\n */\nexport interface BatchValidationResult<T> {\n /** 全部有效 */\n allValid: boolean;\n /** 有效项数量 */\n validCount: number;\n /** 无效项数量 */\n invalidCount: number;\n /** 各项结果 */\n results: Array<{\n index: number;\n valid: boolean;\n data?: T;\n errors: ValidationError[];\n }>;\n}\n\n/**\n * 批量校验 PageSchema\n */\nexport function validatePages(items: unknown[]): BatchValidationResult<PageSchema> {\n const results = items.map((item, index) => {\n const result = validatePage(item);\n return {\n index,\n valid: result.valid,\n data: result.valid ? (item as PageSchema) : undefined,\n errors: result.errors,\n };\n });\n\n const validCount = results.filter((r) => r.valid).length;\n\n return {\n allValid: validCount === items.length,\n validCount,\n invalidCount: items.length - validCount,\n results,\n };\n}\n\n/**\n * 批量校验 ComponentMeta\n */\nexport function validateComponentMetas(items: unknown[]): BatchValidationResult<ComponentMeta> {\n const results = items.map((item, index) => {\n const result = validateComponentMeta(item);\n return {\n index,\n valid: result.valid,\n data: result.valid ? (item as ComponentMeta) : undefined,\n errors: result.errors,\n };\n });\n\n const validCount = results.filter((r) => r.valid).length;\n\n return {\n allValid: validCount === items.length,\n validCount,\n invalidCount: items.length - validCount,\n results,\n };\n}\n\n// ==================== 导出 Ajv 实例(供高级用法) ====================\n\nexport { ajv };\n"],"mappings":"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","names":["Ajv","addFormats"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import Ajv from "ajv";
|
|
3
|
+
import addFormats from "ajv-formats";
|
|
4
|
+
import {
|
|
5
|
+
pageSchema,
|
|
6
|
+
componentMetaSchema,
|
|
7
|
+
actionSpecSchema,
|
|
8
|
+
dataQuerySpecSchema
|
|
9
|
+
} from "@djvlc/contracts-schemas";
|
|
10
|
+
var ajv = new Ajv({
|
|
11
|
+
allErrors: true,
|
|
12
|
+
verbose: true,
|
|
13
|
+
strict: false
|
|
14
|
+
});
|
|
15
|
+
addFormats(ajv);
|
|
16
|
+
var pageValidator = ajv.compile(pageSchema);
|
|
17
|
+
var componentMetaValidator = ajv.compile(componentMetaSchema);
|
|
18
|
+
var actionSpecValidator = ajv.compile(actionSpecSchema);
|
|
19
|
+
var dataQuerySpecValidator = ajv.compile(dataQuerySpecSchema);
|
|
20
|
+
function convertAjvErrors(errors) {
|
|
21
|
+
if (!errors) return [];
|
|
22
|
+
return errors.map((error) => ({
|
|
23
|
+
path: error.instancePath || "/",
|
|
24
|
+
message: error.message || "Unknown error",
|
|
25
|
+
keyword: error.keyword,
|
|
26
|
+
expected: error.params,
|
|
27
|
+
actual: error.data
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
function createResult(valid, errors) {
|
|
31
|
+
return {
|
|
32
|
+
valid,
|
|
33
|
+
errors: convertAjvErrors(errors)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function validatePage(data) {
|
|
37
|
+
const valid = pageValidator(data);
|
|
38
|
+
return createResult(valid, pageValidator.errors);
|
|
39
|
+
}
|
|
40
|
+
function validatePageSchema(data) {
|
|
41
|
+
const result = validatePage(data);
|
|
42
|
+
if (result.valid) {
|
|
43
|
+
return { ...result, data };
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
function assertPageSchema(data) {
|
|
48
|
+
const result = validatePage(data);
|
|
49
|
+
if (!result.valid) {
|
|
50
|
+
throw new Error(`Invalid PageSchema: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function validateComponentMeta(data) {
|
|
54
|
+
const valid = componentMetaValidator(data);
|
|
55
|
+
return createResult(valid, componentMetaValidator.errors);
|
|
56
|
+
}
|
|
57
|
+
function assertComponentMeta(data) {
|
|
58
|
+
const result = validateComponentMeta(data);
|
|
59
|
+
if (!result.valid) {
|
|
60
|
+
throw new Error(`Invalid ComponentMeta: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function validateActionDefinition(data) {
|
|
64
|
+
const valid = actionSpecValidator(data);
|
|
65
|
+
return createResult(valid, actionSpecValidator.errors);
|
|
66
|
+
}
|
|
67
|
+
function assertActionDefinition(data) {
|
|
68
|
+
const result = validateActionDefinition(data);
|
|
69
|
+
if (!result.valid) {
|
|
70
|
+
throw new Error(`Invalid ActionDefinition: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function validateActionRequest(data) {
|
|
74
|
+
const errors = [];
|
|
75
|
+
if (!data || typeof data !== "object") {
|
|
76
|
+
errors.push({ path: "/", message: "ActionExecuteRequest must be an object" });
|
|
77
|
+
return { valid: false, errors };
|
|
78
|
+
}
|
|
79
|
+
const obj = data;
|
|
80
|
+
if (typeof obj.actionType !== "string" || !obj.actionType) {
|
|
81
|
+
errors.push({ path: "/actionType", message: "actionType is required and must be a string" });
|
|
82
|
+
}
|
|
83
|
+
if (obj.params === void 0 || typeof obj.params !== "object") {
|
|
84
|
+
errors.push({ path: "/params", message: "params is required and must be an object" });
|
|
85
|
+
}
|
|
86
|
+
if (obj.context === void 0 || typeof obj.context !== "object") {
|
|
87
|
+
errors.push({ path: "/context", message: "context is required and must be an object" });
|
|
88
|
+
}
|
|
89
|
+
return { valid: errors.length === 0, errors };
|
|
90
|
+
}
|
|
91
|
+
function assertActionRequest(data) {
|
|
92
|
+
const result = validateActionRequest(data);
|
|
93
|
+
if (!result.valid) {
|
|
94
|
+
throw new Error(`Invalid ActionExecuteRequest: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function validateDataQueryDefinition(data) {
|
|
98
|
+
const valid = dataQuerySpecValidator(data);
|
|
99
|
+
return createResult(valid, dataQuerySpecValidator.errors);
|
|
100
|
+
}
|
|
101
|
+
function assertDataQueryDefinition(data) {
|
|
102
|
+
const result = validateDataQueryDefinition(data);
|
|
103
|
+
if (!result.valid) {
|
|
104
|
+
throw new Error(`Invalid DataQueryDefinition: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function validateQueryRequest(data) {
|
|
108
|
+
const errors = [];
|
|
109
|
+
if (!data || typeof data !== "object") {
|
|
110
|
+
errors.push({ path: "/", message: "DataQueryRequest must be an object" });
|
|
111
|
+
return { valid: false, errors };
|
|
112
|
+
}
|
|
113
|
+
const obj = data;
|
|
114
|
+
if (typeof obj.queryVersionId !== "string" || !obj.queryVersionId) {
|
|
115
|
+
errors.push({ path: "/queryVersionId", message: "queryVersionId is required and must be a string" });
|
|
116
|
+
}
|
|
117
|
+
if (obj.params === void 0 || typeof obj.params !== "object") {
|
|
118
|
+
errors.push({ path: "/params", message: "params is required and must be an object" });
|
|
119
|
+
}
|
|
120
|
+
return { valid: errors.length === 0, errors };
|
|
121
|
+
}
|
|
122
|
+
function assertQueryRequest(data) {
|
|
123
|
+
const result = validateQueryRequest(data);
|
|
124
|
+
if (!result.valid) {
|
|
125
|
+
throw new Error(`Invalid DataQueryRequest: ${result.errors.map((e) => e.message).join(", ")}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function isPageSchema(value) {
|
|
129
|
+
return validatePage(value).valid;
|
|
130
|
+
}
|
|
131
|
+
function isComponentMeta(value) {
|
|
132
|
+
return validateComponentMeta(value).valid;
|
|
133
|
+
}
|
|
134
|
+
function isActionDefinition(value) {
|
|
135
|
+
return validateActionDefinition(value).valid;
|
|
136
|
+
}
|
|
137
|
+
function isDataQueryDefinition(value) {
|
|
138
|
+
return validateDataQueryDefinition(value).valid;
|
|
139
|
+
}
|
|
140
|
+
function isActionRequest(value) {
|
|
141
|
+
return validateActionRequest(value).valid;
|
|
142
|
+
}
|
|
143
|
+
function isQueryRequest(value) {
|
|
144
|
+
return validateQueryRequest(value).valid;
|
|
145
|
+
}
|
|
146
|
+
function validatePages(items) {
|
|
147
|
+
const results = items.map((item, index) => {
|
|
148
|
+
const result = validatePage(item);
|
|
149
|
+
return {
|
|
150
|
+
index,
|
|
151
|
+
valid: result.valid,
|
|
152
|
+
data: result.valid ? item : void 0,
|
|
153
|
+
errors: result.errors
|
|
154
|
+
};
|
|
155
|
+
});
|
|
156
|
+
const validCount = results.filter((r) => r.valid).length;
|
|
157
|
+
return {
|
|
158
|
+
allValid: validCount === items.length,
|
|
159
|
+
validCount,
|
|
160
|
+
invalidCount: items.length - validCount,
|
|
161
|
+
results
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function validateComponentMetas(items) {
|
|
165
|
+
const results = items.map((item, index) => {
|
|
166
|
+
const result = validateComponentMeta(item);
|
|
167
|
+
return {
|
|
168
|
+
index,
|
|
169
|
+
valid: result.valid,
|
|
170
|
+
data: result.valid ? item : void 0,
|
|
171
|
+
errors: result.errors
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
const validCount = results.filter((r) => r.valid).length;
|
|
175
|
+
return {
|
|
176
|
+
allValid: validCount === items.length,
|
|
177
|
+
validCount,
|
|
178
|
+
invalidCount: items.length - validCount,
|
|
179
|
+
results
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
export {
|
|
183
|
+
ajv,
|
|
184
|
+
assertActionDefinition,
|
|
185
|
+
assertActionRequest,
|
|
186
|
+
assertComponentMeta,
|
|
187
|
+
assertDataQueryDefinition,
|
|
188
|
+
assertPageSchema,
|
|
189
|
+
assertQueryRequest,
|
|
190
|
+
isActionDefinition,
|
|
191
|
+
isActionRequest,
|
|
192
|
+
isComponentMeta,
|
|
193
|
+
isDataQueryDefinition,
|
|
194
|
+
isPageSchema,
|
|
195
|
+
isQueryRequest,
|
|
196
|
+
validateActionDefinition,
|
|
197
|
+
validateActionRequest,
|
|
198
|
+
validateComponentMeta,
|
|
199
|
+
validateComponentMetas,
|
|
200
|
+
validateDataQueryDefinition,
|
|
201
|
+
validatePage,
|
|
202
|
+
validatePageSchema,
|
|
203
|
+
validatePages,
|
|
204
|
+
validateQueryRequest
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @djvlc/contracts-validators - DJV 低代码平台预编译校验器包\n *\n * 提供预编译的 Ajv 校验器,避免各仓库自行编写校验逻辑导致分叉\n *\n * @packageDocumentation\n */\n\nimport Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nimport {\n pageSchema,\n componentMetaSchema,\n actionSpecSchema,\n dataQuerySpecSchema,\n} from '@djvlc/contracts-schemas';\nimport type {\n PageSchema,\n ComponentMeta,\n ActionDefinition,\n DataQueryDefinition,\n ActionExecuteRequest,\n DataQueryRequest,\n} from '@djvlc/contracts-types';\n\n// ==================== 校验结果类型 ====================\n\n/**\n * 校验结果\n */\nexport interface ValidationResult {\n /** 是否有效 */\n valid: boolean;\n /** 错误列表 */\n errors: ValidationError[];\n}\n\n/**\n * 校验错误\n */\nexport interface ValidationError {\n /** 错误路径 */\n path: string;\n /** 错误消息 */\n message: string;\n /** 错误关键字 */\n keyword?: string;\n /** 期望值 */\n expected?: unknown;\n /** 实际值 */\n actual?: unknown;\n}\n\n// ==================== Ajv 实例 ====================\n\nconst ajv = new Ajv({\n allErrors: true,\n verbose: true,\n strict: false,\n});\n\naddFormats(ajv);\n\n// 预编译 Schema\nconst pageValidator = ajv.compile(pageSchema);\nconst componentMetaValidator = ajv.compile(componentMetaSchema);\nconst actionSpecValidator = ajv.compile(actionSpecSchema);\nconst dataQuerySpecValidator = ajv.compile(dataQuerySpecSchema);\n\n// ==================== 工具函数 ====================\n\n/**\n * 将 Ajv 错误转换为标准格式\n */\nfunction convertAjvErrors(errors: typeof ajv.errors): ValidationError[] {\n if (!errors) return [];\n\n return errors.map((error) => ({\n path: error.instancePath || '/',\n message: error.message || 'Unknown error',\n keyword: error.keyword,\n expected: error.params,\n actual: error.data,\n }));\n}\n\n/**\n * 创建校验结果\n */\nfunction createResult(valid: boolean, errors: typeof ajv.errors): ValidationResult {\n return {\n valid,\n errors: convertAjvErrors(errors),\n };\n}\n\n\n// ==================== 页面校验 ====================\n\n/**\n * 校验 PageSchema\n * @param data 待校验数据\n * @returns 校验结果\n */\nexport function validatePage(data: unknown): ValidationResult {\n const valid = pageValidator(data);\n return createResult(valid, pageValidator.errors);\n}\n\n/**\n * 校验 PageSchema,返回类型安全的结果\n */\nexport function validatePageSchema(data: unknown): ValidationResult & { data?: PageSchema } {\n const result = validatePage(data);\n if (result.valid) {\n return { ...result, data: data as PageSchema };\n }\n return result;\n}\n\n/**\n * 断言为 PageSchema\n */\nexport function assertPageSchema(data: unknown): asserts data is PageSchema {\n const result = validatePage(data);\n if (!result.valid) {\n throw new Error(`Invalid PageSchema: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n// ==================== 组件元数据校验 ====================\n\n/**\n * 校验 ComponentMeta\n * @param data 待校验数据\n * @returns 校验结果\n */\nexport function validateComponentMeta(data: unknown): ValidationResult {\n const valid = componentMetaValidator(data);\n return createResult(valid, componentMetaValidator.errors);\n}\n\n/**\n * 断言为 ComponentMeta\n */\nexport function assertComponentMeta(data: unknown): asserts data is ComponentMeta {\n const result = validateComponentMeta(data);\n if (!result.valid) {\n throw new Error(`Invalid ComponentMeta: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n// ==================== Action 校验 ====================\n\n/**\n * 校验 ActionDefinition\n * @param data 待校验数据\n * @returns 校验结果\n */\nexport function validateActionDefinition(data: unknown): ValidationResult {\n const valid = actionSpecValidator(data);\n return createResult(valid, actionSpecValidator.errors);\n}\n\n/**\n * 断言为 ActionDefinition\n */\nexport function assertActionDefinition(data: unknown): asserts data is ActionDefinition {\n const result = validateActionDefinition(data);\n if (!result.valid) {\n throw new Error(`Invalid ActionDefinition: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n/**\n * 校验 ActionExecuteRequest\n */\nexport function validateActionRequest(data: unknown): ValidationResult {\n const errors: ValidationError[] = [];\n\n if (!data || typeof data !== 'object') {\n errors.push({ path: '/', message: 'ActionExecuteRequest must be an object' });\n return { valid: false, errors };\n }\n\n const obj = data as Record<string, unknown>;\n\n if (typeof obj.actionType !== 'string' || !obj.actionType) {\n errors.push({ path: '/actionType', message: 'actionType is required and must be a string' });\n }\n\n if (obj.params === undefined || typeof obj.params !== 'object') {\n errors.push({ path: '/params', message: 'params is required and must be an object' });\n }\n\n if (obj.context === undefined || typeof obj.context !== 'object') {\n errors.push({ path: '/context', message: 'context is required and must be an object' });\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * 断言为 ActionExecuteRequest\n */\nexport function assertActionRequest(data: unknown): asserts data is ActionExecuteRequest {\n const result = validateActionRequest(data);\n if (!result.valid) {\n throw new Error(`Invalid ActionExecuteRequest: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n// ==================== Data Query 校验 ====================\n\n/**\n * 校验 DataQueryDefinition\n * @param data 待校验数据\n * @returns 校验结果\n */\nexport function validateDataQueryDefinition(data: unknown): ValidationResult {\n const valid = dataQuerySpecValidator(data);\n return createResult(valid, dataQuerySpecValidator.errors);\n}\n\n/**\n * 断言为 DataQueryDefinition\n */\nexport function assertDataQueryDefinition(data: unknown): asserts data is DataQueryDefinition {\n const result = validateDataQueryDefinition(data);\n if (!result.valid) {\n throw new Error(`Invalid DataQueryDefinition: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n/**\n * 校验 DataQueryRequest\n */\nexport function validateQueryRequest(data: unknown): ValidationResult {\n const errors: ValidationError[] = [];\n\n if (!data || typeof data !== 'object') {\n errors.push({ path: '/', message: 'DataQueryRequest must be an object' });\n return { valid: false, errors };\n }\n\n const obj = data as Record<string, unknown>;\n\n if (typeof obj.queryVersionId !== 'string' || !obj.queryVersionId) {\n errors.push({ path: '/queryVersionId', message: 'queryVersionId is required and must be a string' });\n }\n\n if (obj.params === undefined || typeof obj.params !== 'object') {\n errors.push({ path: '/params', message: 'params is required and must be an object' });\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * 断言为 DataQueryRequest\n */\nexport function assertQueryRequest(data: unknown): asserts data is DataQueryRequest {\n const result = validateQueryRequest(data);\n if (!result.valid) {\n throw new Error(`Invalid DataQueryRequest: ${result.errors.map((e) => e.message).join(', ')}`);\n }\n}\n\n// ==================== 类型保护函数 ====================\n\n/**\n * 检查是否为有效的 PageSchema\n */\nexport function isPageSchema(value: unknown): value is PageSchema {\n return validatePage(value).valid;\n}\n\n/**\n * 检查是否为有效的 ComponentMeta\n */\nexport function isComponentMeta(value: unknown): value is ComponentMeta {\n return validateComponentMeta(value).valid;\n}\n\n/**\n * 检查是否为有效的 ActionDefinition\n */\nexport function isActionDefinition(value: unknown): value is ActionDefinition {\n return validateActionDefinition(value).valid;\n}\n\n/**\n * 检查是否为有效的 DataQueryDefinition\n */\nexport function isDataQueryDefinition(value: unknown): value is DataQueryDefinition {\n return validateDataQueryDefinition(value).valid;\n}\n\n/**\n * 检查是否为有效的 ActionExecuteRequest\n */\nexport function isActionRequest(value: unknown): value is ActionExecuteRequest {\n return validateActionRequest(value).valid;\n}\n\n/**\n * 检查是否为有效的 DataQueryRequest\n */\nexport function isQueryRequest(value: unknown): value is DataQueryRequest {\n return validateQueryRequest(value).valid;\n}\n\n// ==================== 批量校验 ====================\n\n/**\n * 批量校验结果\n */\nexport interface BatchValidationResult<T> {\n /** 全部有效 */\n allValid: boolean;\n /** 有效项数量 */\n validCount: number;\n /** 无效项数量 */\n invalidCount: number;\n /** 各项结果 */\n results: Array<{\n index: number;\n valid: boolean;\n data?: T;\n errors: ValidationError[];\n }>;\n}\n\n/**\n * 批量校验 PageSchema\n */\nexport function validatePages(items: unknown[]): BatchValidationResult<PageSchema> {\n const results = items.map((item, index) => {\n const result = validatePage(item);\n return {\n index,\n valid: result.valid,\n data: result.valid ? (item as PageSchema) : undefined,\n errors: result.errors,\n };\n });\n\n const validCount = results.filter((r) => r.valid).length;\n\n return {\n allValid: validCount === items.length,\n validCount,\n invalidCount: items.length - validCount,\n results,\n };\n}\n\n/**\n * 批量校验 ComponentMeta\n */\nexport function validateComponentMetas(items: unknown[]): BatchValidationResult<ComponentMeta> {\n const results = items.map((item, index) => {\n const result = validateComponentMeta(item);\n return {\n index,\n valid: result.valid,\n data: result.valid ? (item as ComponentMeta) : undefined,\n errors: result.errors,\n };\n });\n\n const validCount = results.filter((r) => r.valid).length;\n\n return {\n allValid: validCount === items.length,\n validCount,\n invalidCount: items.length - validCount,\n results,\n };\n}\n\n// ==================== 导出 Ajv 实例(供高级用法) ====================\n\nexport { ajv };\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@djvlc/contracts-validators",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "DJV Low-code Platform - 预编译的 Ajv 校验器包",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsup src/index.ts --format cjs,esm --dts --clean",
|
|
20
|
+
"dev": "tsup src/index.ts --format cjs,esm --dts --watch",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest",
|
|
23
|
+
"test:coverage": "vitest run --coverage",
|
|
24
|
+
"lint": "eslint src/ --ext .ts",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
26
|
+
"clean": "rimraf dist"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@djvlc/contracts-types": "1.2.0",
|
|
30
|
+
"@djvlc/contracts-schemas": "1.2.0",
|
|
31
|
+
"ajv": "^8.12.0",
|
|
32
|
+
"ajv-formats": "^3.0.1"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/node": "^20.0.0",
|
|
36
|
+
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
37
|
+
"@typescript-eslint/parser": "^7.0.0",
|
|
38
|
+
"@vitest/coverage-v8": "^1.0.0",
|
|
39
|
+
"eslint": "^8.56.0",
|
|
40
|
+
"rimraf": "^5.0.0",
|
|
41
|
+
"tsup": "^8.0.0",
|
|
42
|
+
"typescript": "^5.3.0",
|
|
43
|
+
"vitest": "^1.0.0"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"lowcode",
|
|
47
|
+
"contracts",
|
|
48
|
+
"validators",
|
|
49
|
+
"ajv",
|
|
50
|
+
"djvlc"
|
|
51
|
+
],
|
|
52
|
+
"author": "DJV Team",
|
|
53
|
+
"license": "MIT",
|
|
54
|
+
"repository": {
|
|
55
|
+
"type": "git",
|
|
56
|
+
"url": "git+https://github.com/djvlc/contracts.git",
|
|
57
|
+
"directory": "packages/contracts-validators"
|
|
58
|
+
},
|
|
59
|
+
"publishConfig": {
|
|
60
|
+
"access": "public",
|
|
61
|
+
"registry": "https://registry.npmjs.org/"
|
|
62
|
+
},
|
|
63
|
+
"engines": {
|
|
64
|
+
"node": ">=18.0.0"
|
|
65
|
+
}
|
|
66
|
+
}
|