@travetto/schema 8.0.0-alpha.21 → 8.0.0-alpha.22
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 +37 -38
- package/__index__.ts +13 -12
- package/package.json +3 -3
- package/src/bind-util.ts +22 -18
- package/src/data.ts +54 -37
- package/src/decorator/common.ts +3 -3
- package/src/decorator/field.ts +15 -7
- package/src/decorator/input.ts +63 -23
- package/src/decorator/method.ts +2 -2
- package/src/decorator/schema.ts +5 -4
- package/src/internal/types.ts +3 -3
- package/src/name.ts +1 -2
- package/src/service/registry-adapter.ts +69 -55
- package/src/service/registry-index.ts +19 -13
- package/src/service/types.ts +9 -9
- package/src/type-config.ts +3 -3
- package/src/types.ts +2 -2
- package/src/validate/error.ts +2 -1
- package/src/validate/messages.ts +17 -15
- package/src/validate/regex.ts +1 -2
- package/src/validate/validator.ts +42 -44
- package/support/transformer/util.ts +133 -92
- package/support/transformer.schema.ts +20 -23
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import ts from 'typescript';
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
import { DeclarationUtil, DecoratorUtil, DocUtil, TransformerHandler, type TransformerState } from '@travetto/transformer';
|
|
4
|
+
|
|
3
5
|
import { SchemaTransformUtil } from './transformer/util.ts';
|
|
4
6
|
|
|
5
7
|
const CONSTRUCTOR_PROPERTY = 'CONSTRUCTOR';
|
|
@@ -21,7 +23,6 @@ interface AutoState {
|
|
|
21
23
|
* Processes `@Schema` to register class as a valid Schema
|
|
22
24
|
*/
|
|
23
25
|
export class SchemaTransformer {
|
|
24
|
-
|
|
25
26
|
static {
|
|
26
27
|
TransformerHandler(this, this.startSchema, 'before', 'class', ['Schema']);
|
|
27
28
|
TransformerHandler(this, this.finalizeSchema, 'after', 'class', ['Schema']);
|
|
@@ -74,7 +75,8 @@ export class SchemaTransformer {
|
|
|
74
75
|
for (const item of state.getDecoratorList(node)) {
|
|
75
76
|
if (item.targets?.includes('@travetto/schema:Schema')) {
|
|
76
77
|
state[IsOptIn] ||= item.options?.includes('opt-in') ?? false;
|
|
77
|
-
const methodEnrolls =
|
|
78
|
+
const methodEnrolls =
|
|
79
|
+
item.options?.filter(option => option.startsWith('method:'))?.map(option => option.replace('method:', '')) ?? [];
|
|
78
80
|
for (const method of methodEnrolls) {
|
|
79
81
|
state[AutoEnrollMethods].add(method);
|
|
80
82
|
}
|
|
@@ -123,7 +125,7 @@ export class SchemaTransformer {
|
|
|
123
125
|
[CONSTRUCTOR_PROPERTY]: {
|
|
124
126
|
parameters: cons.parameters
|
|
125
127
|
.map((parameter, i) => SchemaTransformUtil.computeInputDecoratorParams(state, parameter, { index: i }))
|
|
126
|
-
.map(expr => state.extendObjectLiteral({}, ...expr))
|
|
128
|
+
.map(expr => state.extendObjectLiteral({}, ...expr))
|
|
127
129
|
}
|
|
128
130
|
};
|
|
129
131
|
}
|
|
@@ -138,17 +140,15 @@ export class SchemaTransformer {
|
|
|
138
140
|
if (accessors.length > 0) {
|
|
139
141
|
node = DeclarationUtil.ensureConstructor(state.factory, node);
|
|
140
142
|
|
|
141
|
-
const accessorStatements = accessors.map(accessorName =>
|
|
142
|
-
SchemaTransformUtil.createAccessorDefineProperty(state, accessorName)
|
|
143
|
-
);
|
|
143
|
+
const accessorStatements = accessors.map(accessorName => SchemaTransformUtil.createAccessorDefineProperty(state, accessorName));
|
|
144
144
|
|
|
145
145
|
const consIndex = node.members.findIndex(member => ts.isConstructorDeclaration(member));
|
|
146
146
|
const consNode = node.members[consIndex] as ts.ConstructorDeclaration;
|
|
147
147
|
const insertIndex = DeclarationUtil.getConstructorInsertIndex(consNode);
|
|
148
148
|
const newStatements = [
|
|
149
|
-
...consNode.body?.statements.slice(0, insertIndex) ?? [],
|
|
149
|
+
...(consNode.body?.statements.slice(0, insertIndex) ?? []),
|
|
150
150
|
...accessorStatements,
|
|
151
|
-
...consNode.body?.statements.slice(insertIndex) ?? []
|
|
151
|
+
...(consNode.body?.statements.slice(insertIndex) ?? [])
|
|
152
152
|
];
|
|
153
153
|
const updatedCons = state.factory.updateConstructorDeclaration(
|
|
154
154
|
consNode,
|
|
@@ -156,11 +156,7 @@ export class SchemaTransformer {
|
|
|
156
156
|
consNode.parameters,
|
|
157
157
|
state.factory.createBlock(newStatements, true)
|
|
158
158
|
);
|
|
159
|
-
newMembers = ts.factory.createNodeArray([
|
|
160
|
-
...node.members.slice(0, consIndex),
|
|
161
|
-
updatedCons,
|
|
162
|
-
...node.members.slice(consIndex + 1)
|
|
163
|
-
]);
|
|
159
|
+
newMembers = ts.factory.createNodeArray([...node.members.slice(0, consIndex), updatedCons, ...node.members.slice(consIndex + 1)]);
|
|
164
160
|
}
|
|
165
161
|
|
|
166
162
|
delete state[InSchema];
|
|
@@ -171,9 +167,7 @@ export class SchemaTransformer {
|
|
|
171
167
|
|
|
172
168
|
return state.factory.updateClassDeclaration(
|
|
173
169
|
node,
|
|
174
|
-
DecoratorUtil.spliceDecorators(node, existing, [
|
|
175
|
-
state.createDecorator(SchemaTransformUtil.SCHEMA_IMPORT, 'Schema', ...params)
|
|
176
|
-
]),
|
|
170
|
+
DecoratorUtil.spliceDecorators(node, existing, [state.createDecorator(SchemaTransformUtil.SCHEMA_IMPORT, 'Schema', ...params)]),
|
|
177
171
|
node.name,
|
|
178
172
|
node.typeParameters,
|
|
179
173
|
node.heritageClauses,
|
|
@@ -186,8 +180,13 @@ export class SchemaTransformer {
|
|
|
186
180
|
*/
|
|
187
181
|
static processSchemaMethod(state: TransformerState & AutoState, node: ts.MethodDeclaration): ts.MethodDeclaration {
|
|
188
182
|
if (
|
|
189
|
-
this.isInvisible(
|
|
190
|
-
|
|
183
|
+
this.isInvisible(
|
|
184
|
+
state,
|
|
185
|
+
node,
|
|
186
|
+
node.modifiers?.some(m => m.kind === ts.SyntaxKind.StaticKeyword)
|
|
187
|
+
) &&
|
|
188
|
+
!state[AutoEnrollMethods]?.has(node.name.getText())
|
|
189
|
+
) {
|
|
191
190
|
return node;
|
|
192
191
|
}
|
|
193
192
|
|
|
@@ -205,9 +204,7 @@ export class SchemaTransformer {
|
|
|
205
204
|
|
|
206
205
|
return state.factory.updateMethodDeclaration(
|
|
207
206
|
node,
|
|
208
|
-
DecoratorUtil.spliceDecorators(node, existing, [
|
|
209
|
-
state.createDecorator(SchemaTransformUtil.METHOD_IMPORT, 'Method', ...params)
|
|
210
|
-
]),
|
|
207
|
+
DecoratorUtil.spliceDecorators(node, existing, [state.createDecorator(SchemaTransformUtil.METHOD_IMPORT, 'Method', ...params)]),
|
|
211
208
|
node.asteriskToken,
|
|
212
209
|
node.name,
|
|
213
210
|
node.questionToken,
|
|
@@ -258,4 +255,4 @@ export class SchemaTransformer {
|
|
|
258
255
|
return SchemaTransformUtil.computeInput(state, node);
|
|
259
256
|
}
|
|
260
257
|
}
|
|
261
|
-
}
|
|
258
|
+
}
|