@aalis/schema-config 0.11.0 → 0.13.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 +22 -2
- package/dist/index.d.ts +35 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +145 -12
- package/dist/index.js.map +1 -1
- package/package.json +3 -6
package/README.md
CHANGED
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
# @aalis/schema-config
|
|
2
2
|
|
|
3
|
-
配置表单 Schema 词汇契约包:`ConfigSchema` / `SchemaField` / `SchemaGroup` / `SchemaArray` 及 `SchemaFieldTypes`
|
|
3
|
+
配置表单 Schema 词汇契约包:`ConfigSchema` / `SchemaField` / `SchemaGroup` / `SchemaArray` 及 `SchemaFieldTypes` 扩展点,另含对这套词汇的中立解释函数 `defaultsFrom` / `validateConfig` / `removeExtraFields`,配置危险键闸与拷贝 `isUnsafeConfigKey` / `cloneConfigObject`,以及插件因配置问题无法激活时在 `apply` 里抛出的 `configError` / `missingConfigError`(后者用于缺必填项;name 为 `ConfigError`、不带 stack,激活失败日志只有一行,不像程序崩溃)。
|
|
4
4
|
|
|
5
5
|
`@aalis/core` 把插件的 `configSchema` 当作 opaque 数据透传、不解释任何字段;表单词汇(label / options / textarea …)属呈现层,统一住在本包。插件用它给自己的 `configSchema` 做形状检查,渲染宿主(WebUI)与宿主政策(runtime 的配置同步)用它消费 schema。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
零运行时依赖:对 `@aalis/core` 只有 type-only 锚点(以 peer 依赖声明)。字段类型可由其他 api 包经 declaration merging 扩展(如 `api-llm` 注入 `'llm-ref'`)。
|
|
8
|
+
|
|
9
|
+
## 字段类型
|
|
10
|
+
|
|
11
|
+
本包内置的中立类型,以及 `validateConfig` 对取值的检查(`undefined` / `null` 视为未配置,只在 `required` 且无 `default` 时报缺):
|
|
12
|
+
|
|
13
|
+
| type | 取值 | validateConfig 检查 |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `string` / `textarea` | `string` | 类型;声明了 `pattern` 时按正则匹配 |
|
|
16
|
+
| `number` | 有限数值 | 类型;`min` / `max` / `integer` |
|
|
17
|
+
| `boolean` | `boolean` | 类型 |
|
|
18
|
+
| `select` | `string` 或 `number` | 类型(`options` 不是取值白名单) |
|
|
19
|
+
| `multiselect` | `(string \| number)[]` | 数组及元素类型;集合语义,WebUI 以勾选框编辑,不能表达重复项 |
|
|
20
|
+
| `list` | `string[]` | 数组及元素类型;有序,允许重复(如命令行参数) |
|
|
21
|
+
| `map` | `Record<string, string>` | 对象及每个值的类型(如环境变量表) |
|
|
22
|
+
|
|
23
|
+
`list` 与 `map` 的补充约定:
|
|
24
|
+
|
|
25
|
+
- **默认值**:`default` 分别写数组与对象,`defaultsFrom` 按值拷贝。runtime 的配置同步合并默认值时递归合并对象,因此顶层或分组里的 `map` 会按键补齐:默认映射中的键总会回到用户配置里,删掉也无效。需要用户可删除的预置条目时,默认值写 `{}`,由插件代码兜底。`list` 不参与合并,用户配置了就整体采用。
|
|
26
|
+
- **未知字段裁剪**:`removeExtraFields` 把 `map` 当作叶子整体保留,不按键裁剪。
|
|
27
|
+
- **缺省 UI**(WebUI 的 SchemaForm):两者都渲染为多行文本框。`list` 每行一项,空白行忽略;`map` 每行一条 `KEY=VALUE`,按第一个 `=` 切分,键去掉首尾空白,值原样保留,缺少 `=` 或键为空的行不保存。现有的数字、布尔项或值按字符串显示,编辑后写成字符串;其余无法按这套规则逐行表达的值(项或值本身含换行、`list` 含空白项、`null`、嵌套的数组或对象等)会让该字段只读显示,需在配置文件中编辑。旧版存下的空串按空列表 / 空映射显示,保存时写成 `[]` / `{}`。
|
|
8
28
|
|
|
9
29
|
## 消费方式:用宽区间,别用 caret
|
|
10
30
|
|
package/dist/index.d.ts
CHANGED
|
@@ -19,6 +19,10 @@ export interface SchemaFieldTypes {
|
|
|
19
19
|
select: true;
|
|
20
20
|
multiselect: true;
|
|
21
21
|
textarea: true;
|
|
22
|
+
/** 有序字符串列表(`string[]`):保序、允许重复;与 multiselect 的集合语义不同 */
|
|
23
|
+
list: true;
|
|
24
|
+
/** 字符串映射(`Record<string, string>`),如环境变量表 */
|
|
25
|
+
map: true;
|
|
22
26
|
}
|
|
23
27
|
export type SchemaFieldType = keyof SchemaFieldTypes & string;
|
|
24
28
|
/**
|
|
@@ -67,7 +71,7 @@ export interface SchemaArray {
|
|
|
67
71
|
/** 配置 Schema:顶层 key 可以是字段、分组或数组 */
|
|
68
72
|
export type ConfigSchema = Record<string, SchemaField | SchemaGroup | SchemaArray>;
|
|
69
73
|
/**
|
|
70
|
-
* core 基础设施配置(name / logLevel)的表单描述。
|
|
74
|
+
* core 基础设施配置(name / logLevel / slowThresholdMs)的表单描述。
|
|
71
75
|
*
|
|
72
76
|
* core 自身不持有任何 schema——这份呈现层描述由本包代管,
|
|
73
77
|
* 渲染宿主(webui-server 设置页)从这里取。
|
|
@@ -77,9 +81,8 @@ export declare const CORE_CONFIG_SCHEMA: ConfigSchema;
|
|
|
77
81
|
* 从 ConfigSchema 派生默认配置。
|
|
78
82
|
*
|
|
79
83
|
* ConfigSchema 是插件配置的**唯一声明来源**:每个字段的 `default` 就是运行时默认值,
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* 也都从这里取——一份实现,处处一致。
|
|
84
|
+
* 不存在第二份手抄的默认值对象。宿主在注册插件前用本函数派生出默认配置并深合并进配置文档,
|
|
85
|
+
* 配置回填、恢复默认、WebUI 展示也都从这里取——一份实现,处处一致。
|
|
83
86
|
*
|
|
84
87
|
* 派生规则:
|
|
85
88
|
* - SchemaField / SchemaArray:取 `default`(没写 default 的字段不产出键,
|
|
@@ -102,7 +105,7 @@ export interface SchemaIssue {
|
|
|
102
105
|
* 按 ConfigSchema 对配置做只读结构校验,返回问题清单(空数组 = 无问题)。
|
|
103
106
|
*
|
|
104
107
|
* 定位与边界:
|
|
105
|
-
* -
|
|
108
|
+
* - **只读**:不转换、不回填、不裁剪——回填是 defaultsFrom,裁剪是 removeExtraFields。
|
|
106
109
|
* 校验器出错的最大代价必须始终是"少一条警告",因此它绝不参与配置取值链路。
|
|
107
110
|
* - **只解释中立词汇**:type/required 之外的语义(含宿主经 declaration merging
|
|
108
111
|
* 注入的呈现属性,如 secret/allowCustom)一概不解读。
|
|
@@ -112,6 +115,8 @@ export interface SchemaIssue {
|
|
|
112
115
|
* - **约束键**:number 强制 min/max(含边界)与 integer,string/textarea 强制
|
|
113
116
|
* pattern(模式非法则跳过该检查);step 是纯 UI 提示不校验。约束只在类型
|
|
114
117
|
* 检查通过后评估——类型都不对时报类型错,不叠报约束错。
|
|
118
|
+
* - **list / map**:list 须为数组且每个元素是 string(保序、重复合法);map 须为
|
|
119
|
+
* 对象且每个值是 string,逐值报错的路径形如 `env.KEY`。
|
|
115
120
|
* - **宽容缺失**:undefined 与 null(YAML 裸键)视为"未配置",仅在 required 且
|
|
116
121
|
* 未声明 default 时报缺——顶层/分组的默认值在调用点已合并,数组元素的默认值
|
|
117
122
|
* 不参与合并(defaultsFrom 把 SchemaArray 当叶子),靠 default 声明本身放行。
|
|
@@ -121,8 +126,32 @@ export interface SchemaIssue {
|
|
|
121
126
|
* (存量问题与 `missing` 放行——拦新不追旧,半成品配置允许落盘)。
|
|
122
127
|
*/
|
|
123
128
|
export declare function validateConfig(schema: ConfigSchema | undefined, config: Record<string, unknown>): SchemaIssue[];
|
|
129
|
+
/**
|
|
130
|
+
* 按 schema 键集裁掉未知字段。configSchema 是插件配置的**唯一声明来源**(默认值也从它派生),
|
|
131
|
+
* 所以它的键集就是完整的白名单:不在 schema 里的字段,要么是用户手写的错别字,
|
|
132
|
+
* 要么是已废弃的旧字段,裁掉即归位。无 schema 的插件不裁(见调用方守卫)。
|
|
133
|
+
*
|
|
134
|
+
* 被裁的键写入 `removed`(带点号前缀)——静默裁剪会让「字段被吃掉」与「用户没配」不可分辨。
|
|
135
|
+
* `type: 'array'` 的值整段保留(数组元素结构由 validateConfig 解释,不在这里拆)。
|
|
136
|
+
*/
|
|
137
|
+
export declare function removeExtraFields(config: Record<string, unknown>, schema: Record<string, unknown>, removed?: string[], prefix?: string): Record<string, unknown>;
|
|
138
|
+
/**
|
|
139
|
+
* 配置错误:name 为 `ConfigError`,不带 stack。插件因配置缺失或不可用而无法激活时在 apply 里抛出。
|
|
140
|
+
*
|
|
141
|
+
* 实例照常转入 error 态,但这不是程序出错:core 的 DefaultLogger 对没有 stack 的错误只写「名称: 消息」,
|
|
142
|
+
* 激活失败日志因此只有一行,不像程序崩溃。缺必填项用 {@link missingConfigError}。
|
|
143
|
+
*/
|
|
144
|
+
export declare function configError(message: string): Error;
|
|
145
|
+
/**
|
|
146
|
+
* 缺少必填配置时的 {@link configError}:消息点名缺的字段(`note` 是放在字段名后括号里的补充说明),并说明
|
|
147
|
+
* 填入后生效——WebUI 保存或配置文件热重载会重建实例、重试激活。
|
|
148
|
+
*/
|
|
149
|
+
export declare function missingConfigError(field: string, note?: string): Error;
|
|
150
|
+
/** 配置层无合法含义、落到原型链的键(`__proto__` / `constructor` / `prototype`);宿主的配置文档按它拦 */
|
|
151
|
+
export declare function isUnsafeConfigKey(key: string): boolean;
|
|
152
|
+
export declare function cloneConfigObject(obj: Record<string, unknown>): Record<string, unknown>;
|
|
124
153
|
declare module '@aalis/core' {
|
|
125
|
-
interface
|
|
154
|
+
interface PluginMeta {
|
|
126
155
|
/** 配置表单 Schema:插件配置的唯一声明来源(默认值经 defaultsFrom 派生)。 */
|
|
127
156
|
configSchema?: ConfigSchema;
|
|
128
157
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,25 +2,31 @@
|
|
|
2
2
|
// @aalis/schema-config — 配置 Schema 词汇契约 + 词汇的中立解释
|
|
3
3
|
//
|
|
4
4
|
// 类型部分描述"配置如何呈现为表单"(label / options / textarea …);
|
|
5
|
-
// 函数部分是对这套词汇的**中立解释**:默认值派生(defaultsFrom
|
|
6
|
-
// 结构校验(validateConfig
|
|
7
|
-
// `
|
|
5
|
+
// 函数部分是对这套词汇的**中立解释**:默认值派生(defaultsFrom)、只读
|
|
6
|
+
// 结构校验(validateConfig)、按 schema 键集裁未知字段(removeExtraFields)。
|
|
7
|
+
// 三者都不属于 @aalis/core——core 只把 `PluginMeta.configSchema` 当作
|
|
8
|
+
// opaque 数据透传,不解释任何字段。另有插件因配置问题无法激活时抛的错误(configError / missingConfigError)。
|
|
8
9
|
//
|
|
9
10
|
// 消费方:
|
|
10
|
-
// -
|
|
11
|
+
// - 插件:在 `definePlugin({ configSchema })` 的定义对象里声明
|
|
11
12
|
// - 渲染宿主(webui-server/client 等):读取并渲染表单
|
|
12
13
|
// - 宿主政策(@aalis/runtime 的 config-sync):按 schema 裁剪未知字段、校验告警
|
|
13
14
|
//
|
|
14
15
|
// 本包零运行时依赖:对 @aalis/core 仅有 type-only 锚点 import(编译后擦除)。
|
|
15
16
|
// ============================================================
|
|
16
17
|
/**
|
|
17
|
-
* core 基础设施配置(name / logLevel)的表单描述。
|
|
18
|
+
* core 基础设施配置(name / logLevel / slowThresholdMs)的表单描述。
|
|
18
19
|
*
|
|
19
20
|
* core 自身不持有任何 schema——这份呈现层描述由本包代管,
|
|
20
21
|
* 渲染宿主(webui-server 设置页)从这里取。
|
|
21
22
|
*/
|
|
22
23
|
export const CORE_CONFIG_SCHEMA = {
|
|
23
|
-
name: {
|
|
24
|
+
name: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
label: '应用名称',
|
|
27
|
+
description: '应用显示名称,用于启动日志和界面展示;装有人设时界面显示人设名',
|
|
28
|
+
default: 'Aalis',
|
|
29
|
+
},
|
|
24
30
|
logLevel: {
|
|
25
31
|
type: 'select',
|
|
26
32
|
label: '日志等级',
|
|
@@ -33,14 +39,20 @@ export const CORE_CONFIG_SCHEMA = {
|
|
|
33
39
|
{ label: 'error', value: 'error' },
|
|
34
40
|
],
|
|
35
41
|
},
|
|
42
|
+
slowThresholdMs: {
|
|
43
|
+
type: 'number',
|
|
44
|
+
label: '慢操作阈值(毫秒)',
|
|
45
|
+
description: '插件激活超过它仍未完成时告警并转入后台继续(它提供的服务在激活完成前不对依赖方开放),app 启动与停机阶段的单个事件监听器超过它时告警并不再等待;0 表示不设限;重启生效',
|
|
46
|
+
default: 60000,
|
|
47
|
+
min: 0,
|
|
48
|
+
},
|
|
36
49
|
};
|
|
37
50
|
/**
|
|
38
51
|
* 从 ConfigSchema 派生默认配置。
|
|
39
52
|
*
|
|
40
53
|
* ConfigSchema 是插件配置的**唯一声明来源**:每个字段的 `default` 就是运行时默认值,
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* 也都从这里取——一份实现,处处一致。
|
|
54
|
+
* 不存在第二份手抄的默认值对象。宿主在注册插件前用本函数派生出默认配置并深合并进配置文档,
|
|
55
|
+
* 配置回填、恢复默认、WebUI 展示也都从这里取——一份实现,处处一致。
|
|
44
56
|
*
|
|
45
57
|
* 派生规则:
|
|
46
58
|
* - SchemaField / SchemaArray:取 `default`(没写 default 的字段不产出键,
|
|
@@ -52,12 +64,14 @@ export function defaultsFrom(schema) {
|
|
|
52
64
|
for (const [key, entry] of Object.entries(schema ?? {})) {
|
|
53
65
|
if (!entry || typeof entry !== 'object')
|
|
54
66
|
continue;
|
|
67
|
+
if (isUnsafeConfigKey(key))
|
|
68
|
+
continue;
|
|
55
69
|
if ('fields' in entry) {
|
|
56
70
|
out[key] = defaultsFrom(entry.fields);
|
|
57
71
|
continue;
|
|
58
72
|
}
|
|
59
73
|
if ('default' in entry)
|
|
60
|
-
out[key] = entry.default;
|
|
74
|
+
out[key] = cloneConfigValue(entry.default);
|
|
61
75
|
}
|
|
62
76
|
return out;
|
|
63
77
|
}
|
|
@@ -71,12 +85,14 @@ const NEUTRAL_FIELD_TYPES = new Set([
|
|
|
71
85
|
'select',
|
|
72
86
|
'multiselect',
|
|
73
87
|
'textarea',
|
|
88
|
+
'list',
|
|
89
|
+
'map',
|
|
74
90
|
]);
|
|
75
91
|
/**
|
|
76
92
|
* 按 ConfigSchema 对配置做只读结构校验,返回问题清单(空数组 = 无问题)。
|
|
77
93
|
*
|
|
78
94
|
* 定位与边界:
|
|
79
|
-
* -
|
|
95
|
+
* - **只读**:不转换、不回填、不裁剪——回填是 defaultsFrom,裁剪是 removeExtraFields。
|
|
80
96
|
* 校验器出错的最大代价必须始终是"少一条警告",因此它绝不参与配置取值链路。
|
|
81
97
|
* - **只解释中立词汇**:type/required 之外的语义(含宿主经 declaration merging
|
|
82
98
|
* 注入的呈现属性,如 secret/allowCustom)一概不解读。
|
|
@@ -86,6 +102,8 @@ const NEUTRAL_FIELD_TYPES = new Set([
|
|
|
86
102
|
* - **约束键**:number 强制 min/max(含边界)与 integer,string/textarea 强制
|
|
87
103
|
* pattern(模式非法则跳过该检查);step 是纯 UI 提示不校验。约束只在类型
|
|
88
104
|
* 检查通过后评估——类型都不对时报类型错,不叠报约束错。
|
|
105
|
+
* - **list / map**:list 须为数组且每个元素是 string(保序、重复合法);map 须为
|
|
106
|
+
* 对象且每个值是 string,逐值报错的路径形如 `env.KEY`。
|
|
89
107
|
* - **宽容缺失**:undefined 与 null(YAML 裸键)视为"未配置",仅在 required 且
|
|
90
108
|
* 未声明 default 时报缺——顶层/分组的默认值在调用点已合并,数组元素的默认值
|
|
91
109
|
* 不参与合并(defaultsFrom 把 SchemaArray 当叶子),靠 default 声明本身放行。
|
|
@@ -99,6 +117,58 @@ export function validateConfig(schema, config) {
|
|
|
99
117
|
validateFields(schema ?? {}, config, '', issues);
|
|
100
118
|
return issues;
|
|
101
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* 按 schema 键集裁掉未知字段。configSchema 是插件配置的**唯一声明来源**(默认值也从它派生),
|
|
122
|
+
* 所以它的键集就是完整的白名单:不在 schema 里的字段,要么是用户手写的错别字,
|
|
123
|
+
* 要么是已废弃的旧字段,裁掉即归位。无 schema 的插件不裁(见调用方守卫)。
|
|
124
|
+
*
|
|
125
|
+
* 被裁的键写入 `removed`(带点号前缀)——静默裁剪会让「字段被吃掉」与「用户没配」不可分辨。
|
|
126
|
+
* `type: 'array'` 的值整段保留(数组元素结构由 validateConfig 解释,不在这里拆)。
|
|
127
|
+
*/
|
|
128
|
+
export function removeExtraFields(config, schema, removed, prefix = '') {
|
|
129
|
+
const result = {};
|
|
130
|
+
for (const [key, value] of Object.entries(config)) {
|
|
131
|
+
if (!(key in schema)) {
|
|
132
|
+
removed?.push(prefix + key);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
const schemaDef = schema[key];
|
|
136
|
+
if (schemaDef.type === 'array') {
|
|
137
|
+
result[key] = value;
|
|
138
|
+
}
|
|
139
|
+
else if (schemaDef.fields &&
|
|
140
|
+
typeof schemaDef.fields === 'object' &&
|
|
141
|
+
value !== null &&
|
|
142
|
+
typeof value === 'object' &&
|
|
143
|
+
!Array.isArray(value)) {
|
|
144
|
+
result[key] = removeExtraFields(value, schemaDef.fields, removed, `${prefix + key}.`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
result[key] = value;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* 配置错误:name 为 `ConfigError`,不带 stack。插件因配置缺失或不可用而无法激活时在 apply 里抛出。
|
|
154
|
+
*
|
|
155
|
+
* 实例照常转入 error 态,但这不是程序出错:core 的 DefaultLogger 对没有 stack 的错误只写「名称: 消息」,
|
|
156
|
+
* 激活失败日志因此只有一行,不像程序崩溃。缺必填项用 {@link missingConfigError}。
|
|
157
|
+
*/
|
|
158
|
+
export function configError(message) {
|
|
159
|
+
const error = new Error(message);
|
|
160
|
+
error.name = 'ConfigError';
|
|
161
|
+
// 定义成自有属性而不是 delete:有的引擎把 stack 做成原型上的访问器,删实例属性去不掉
|
|
162
|
+
Object.defineProperty(error, 'stack', { value: undefined, writable: true, configurable: true });
|
|
163
|
+
return error;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* 缺少必填配置时的 {@link configError}:消息点名缺的字段(`note` 是放在字段名后括号里的补充说明),并说明
|
|
167
|
+
* 填入后生效——WebUI 保存或配置文件热重载会重建实例、重试激活。
|
|
168
|
+
*/
|
|
169
|
+
export function missingConfigError(field, note) {
|
|
170
|
+
return configError(`缺少配置项 ${field}${note ? `(${note})` : ''},在 WebUI 或配置文件中填入后生效`);
|
|
171
|
+
}
|
|
102
172
|
function validateFields(schema, config, prefix, issues) {
|
|
103
173
|
// `?? {}` 与 defaultsFrom 同款兜底:畸形 schema(array 缺 items / fields 为 null)
|
|
104
174
|
// 不许把"最多少一条警告"升级成 TypeError——校验器自身永远不能成为故障源。
|
|
@@ -134,7 +204,8 @@ function validateFields(schema, config, prefix, issues) {
|
|
|
134
204
|
continue;
|
|
135
205
|
}
|
|
136
206
|
if (value === undefined || value === null) {
|
|
137
|
-
// 声明了 default
|
|
207
|
+
// 声明了 default 的字段永远不算缺失:顶层/分组的默认值多已在调用点合并,但合并不覆盖
|
|
208
|
+
// 显式 null(YAML 裸键),这类值照样走到这里,
|
|
138
209
|
// 数组元素的默认值不参与任何合并(defaultsFrom 把 SchemaArray 当叶子),
|
|
139
210
|
// 全靠这里放行——否则 required+default 的 item 字段会误报(scheduler jobs[].platform 型)。
|
|
140
211
|
if (entry.required && !('default' in entry))
|
|
@@ -201,6 +272,38 @@ function validateFields(schema, config, prefix, issues) {
|
|
|
201
272
|
});
|
|
202
273
|
}
|
|
203
274
|
break;
|
|
275
|
+
case 'list':
|
|
276
|
+
if (!Array.isArray(value)) {
|
|
277
|
+
issues.push({ path, message: `期望数组,得到 ${describeType(value)}`, kind: 'invalid' });
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
value.forEach((item, i) => {
|
|
281
|
+
if (typeof item !== 'string') {
|
|
282
|
+
issues.push({
|
|
283
|
+
path: `${path}[${i}]`,
|
|
284
|
+
message: `期望 string 元素,得到 ${describeType(item)}`,
|
|
285
|
+
kind: 'invalid',
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
break;
|
|
291
|
+
case 'map':
|
|
292
|
+
if (typeof value !== 'object' || Array.isArray(value)) {
|
|
293
|
+
issues.push({ path, message: `期望对象(映射),得到 ${describeType(value)}`, kind: 'invalid' });
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
for (const [k, v] of Object.entries(value)) {
|
|
297
|
+
if (typeof v !== 'string') {
|
|
298
|
+
issues.push({
|
|
299
|
+
path: `${path}.${k}`,
|
|
300
|
+
message: `期望 string 值,得到 ${describeType(v)}`,
|
|
301
|
+
kind: 'invalid',
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
break;
|
|
204
307
|
}
|
|
205
308
|
}
|
|
206
309
|
}
|
|
@@ -213,4 +316,34 @@ function describeType(value) {
|
|
|
213
316
|
return String(value);
|
|
214
317
|
return typeof value;
|
|
215
318
|
}
|
|
319
|
+
// 与 packages/core/src/infrastructure/config-values.ts 同一规则(本包零运行时依赖,不能 import core)。
|
|
320
|
+
// 防漂移:test/architecture/config-copy-parity.test.ts
|
|
321
|
+
const UNSAFE_CONFIG_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
322
|
+
/** 配置层无合法含义、落到原型链的键(`__proto__` / `constructor` / `prototype`);宿主的配置文档按它拦 */
|
|
323
|
+
export function isUnsafeConfigKey(key) {
|
|
324
|
+
return UNSAFE_CONFIG_KEYS.has(key);
|
|
325
|
+
}
|
|
326
|
+
function isPlainConfigObject(value) {
|
|
327
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
328
|
+
return false;
|
|
329
|
+
const proto = Object.getPrototypeOf(value);
|
|
330
|
+
return proto === Object.prototype || proto === null;
|
|
331
|
+
}
|
|
332
|
+
function cloneConfigValue(value) {
|
|
333
|
+
if (Array.isArray(value)) {
|
|
334
|
+
return value.map(item => (isPlainConfigObject(item) ? cloneConfigObject(item) : item));
|
|
335
|
+
}
|
|
336
|
+
if (isPlainConfigObject(value))
|
|
337
|
+
return cloneConfigObject(value);
|
|
338
|
+
return value;
|
|
339
|
+
}
|
|
340
|
+
export function cloneConfigObject(obj) {
|
|
341
|
+
const out = {};
|
|
342
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
343
|
+
if (isUnsafeConfigKey(key))
|
|
344
|
+
continue;
|
|
345
|
+
out[key] = cloneConfigValue(value);
|
|
346
|
+
}
|
|
347
|
+
return out;
|
|
348
|
+
}
|
|
216
349
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kDAAkD;AAClD,EAAE;AACF,mDAAmD;AACnD,6CAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kDAAkD;AAClD,EAAE;AACF,mDAAmD;AACnD,6CAA6C;AAC7C,4DAA4D;AAC5D,2DAA2D;AAC3D,4EAA4E;AAC5E,EAAE;AACF,OAAO;AACP,mDAAmD;AACnD,wCAAwC;AACxC,4DAA4D;AAC5D,EAAE;AACF,wDAAwD;AACxD,+DAA+D;AA6E/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,iCAAiC;QAC9C,OAAO,EAAE,OAAO;KACjB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,QAAQ;QACrB,OAAO,EAAE,MAAM;QACf,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;YAClC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAChC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAChC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;SACnC;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,WAAW;QAClB,WAAW,EACT,wFAAwF;QAC1F,OAAO,EAAE,KAAK;QACd,GAAG,EAAE,CAAC;KACP;CACF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgC;IAC3D,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAClD,IAAI,iBAAiB,CAAC,GAAG,CAAC;YAAE,SAAS;QACrC,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YACtB,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,SAAS,IAAI,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAcD,gDAAgD;AAChD,8CAA8C;AAC9C,6BAA6B;AAC7B,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IACvD,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,aAAa;IACb,UAAU;IACV,MAAM;IACN,KAAK;CACN,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,cAAc,CAAC,MAAgC,EAAE,MAA+B;IAC9F,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,cAAc,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA+B,EAC/B,MAA+B,EAC/B,OAAkB,EAClB,MAAM,GAAG,EAAE;IAEX,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAA4B,CAAC;QACzD,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IACL,SAAS,CAAC,MAAM;YAChB,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;YACpC,KAAK,KAAK,IAAI;YACd,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACrB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAC7B,KAAgC,EAChC,SAAS,CAAC,MAAiC,EAC3C,OAAO,EACP,GAAG,MAAM,GAAG,GAAG,GAAG,CACnB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,GAAG,aAAa,CAAC;IAC3B,mDAAmD;IACnD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAChG,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,IAAa;IAC7D,OAAO,WAAW,CAAC,SAAS,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,cAAc,CACrB,MAA2E,EAC3E,MAA+B,EAC/B,MAAc,EACd,MAAqB;IAErB,uEAAuE;IACvE,6CAA6C;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAClD,MAAM,IAAI,GAAG,MAAM,GAAG,GAAG,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAE1B,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtF,SAAS;YACX,CAAC;YACD,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,KAAgC,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;YACnF,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClF,SAAS;YACX,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACxB,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;oBACpG,OAAO;gBACT,CAAC;gBACD,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,IAA+B,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzF,CAAC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,iDAAiD;YACjD,8BAA8B;YAC9B,mDAAmD;YACnD,yEAAyE;YACzE,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YACvG,SAAS;QACX,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAEnD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ,CAAC;YACd,KAAK,UAAU;gBACb,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACzF,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACvC,8CAA8C;oBAC9C,2BAA2B;oBAC3B,IAAI,CAAC;wBACH,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;wBAC5E,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,mBAAmB;oBACrB,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtF,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;oBACxD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACvE,CAAC;qBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;oBACxD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACvE,CAAC;gBACD,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,OAAO,KAAK,KAAK,SAAS;oBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1F,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClG,CAAC;gBACD,MAAM;YACR,KAAK,aAAa;gBAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;wBACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;4BACzD,MAAM,CAAC,IAAI,CAAC;gCACV,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG;gCACrB,OAAO,EAAE,4BAA4B,YAAY,CAAC,IAAI,CAAC,EAAE;gCACzD,IAAI,EAAE,SAAS;6BAChB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;wBACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAC7B,MAAM,CAAC,IAAI,CAAC;gCACV,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG;gCACrB,OAAO,EAAE,mBAAmB,YAAY,CAAC,IAAI,CAAC,EAAE;gCAChD,IAAI,EAAE,SAAS;6BAChB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,KAAK,KAAK;gBACR,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACxF,CAAC;qBAAM,CAAC;oBACN,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;4BAC1B,MAAM,CAAC,IAAI,CAAC;gCACV,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE;gCACpB,OAAO,EAAE,kBAAkB,YAAY,CAAC,CAAC,CAAC,EAAE;gCAC5C,IAAI,EAAE,SAAS;6BAChB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/E,OAAO,OAAO,KAAK,CAAC;AACtB,CAAC;AAED,qFAAqF;AACrF,mDAAmD;AACnD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAE9E,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACtD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,mBAAmB,CAAC,KAAK,CAAC;QAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAA4B;IAC5D,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,iBAAiB,CAAC,GAAG,CAAC;YAAE,SAAS;QACrC,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aalis/schema-config",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,17 +20,14 @@
|
|
|
20
20
|
],
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"typescript": "^5.7.0",
|
|
23
|
-
"@aalis/core": "0.
|
|
24
|
-
},
|
|
25
|
-
"aalis": {
|
|
26
|
-
"types": true
|
|
23
|
+
"@aalis/core": "0.18.0"
|
|
27
24
|
},
|
|
28
25
|
"keywords": [
|
|
29
26
|
"aalis",
|
|
30
27
|
"aalis-schema"
|
|
31
28
|
],
|
|
32
29
|
"peerDependencies": {
|
|
33
|
-
"@aalis/core": ">=0.
|
|
30
|
+
"@aalis/core": ">=0.18.0 <1.0.0"
|
|
34
31
|
},
|
|
35
32
|
"scripts": {
|
|
36
33
|
"build": "tsc",
|