@vaadin/hilla-generator-plugin-model 24.7.0-alpha9 → 24.7.0-beta3

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.
@@ -1,22 +1,8 @@
1
- import {
2
- convertReferenceSchemaToPath,
3
- convertReferenceSchemaToSpecifier,
4
- decomposeSchema,
5
- isArraySchema,
6
- isBooleanSchema,
7
- isComposedSchema,
8
- isIntegerSchema,
9
- isMapSchema,
10
- isNullableSchema,
11
- isNumberSchema,
12
- isReferenceSchema,
13
- isStringSchema
14
- } from "@vaadin/hilla-generator-core/Schema.js";
15
- import ts, {
16
- } from "typescript";
17
- import { process } from "./MetadataProcessor.js";
18
- import { createModelBuildingCallback, importBuiltInFormModel } from "./utils.js";
19
- import { hasValidationConstraints, ValidationConstraintProcessor } from "./ValidationConstraintProcessor.js";
1
+ import { convertReferenceSchemaToPath, convertReferenceSchemaToSpecifier, decomposeSchema, isArraySchema, isBooleanSchema, isComposedSchema, isIntegerSchema, isMapSchema, isNullableSchema, isNumberSchema, isReferenceSchema, isStringSchema, } from '@vaadin/hilla-generator-core/Schema.js';
2
+ import ts, {} from 'typescript';
3
+ import { process } from './MetadataProcessor.js';
4
+ import { createModelBuildingCallback, importBuiltInFormModel } from './utils.js';
5
+ import { hasValidationConstraints, ValidationConstraintProcessor } from './ValidationConstraintProcessor.js';
20
6
  const $dependencies = Symbol();
21
7
  const $processArray = Symbol();
22
8
  const $processRecord = Symbol();
@@ -27,201 +13,188 @@ const $processBoolean = Symbol();
27
13
  const $processUnknown = Symbol();
28
14
  const $originalSchema = Symbol();
29
15
  const $schema = Symbol();
30
- class ModelSchemaPartProcessor {
31
- [$dependencies];
32
- [$originalSchema];
33
- [$schema];
34
- constructor(schema, dependencies) {
35
- this[$dependencies] = dependencies;
36
- this[$originalSchema] = schema;
37
- this[$schema] = isComposedSchema(schema) ? decomposeSchema(schema)[0] : schema;
38
- }
39
- process() {
40
- const schema = this[$schema];
41
- if (isReferenceSchema(schema)) {
42
- return this[$processReference](schema);
43
- }
44
- if (isArraySchema(schema)) {
45
- return this[$processArray](schema);
46
- }
47
- if (isMapSchema(schema)) {
48
- return this[$processRecord](schema);
49
- }
50
- if (isStringSchema(schema)) {
51
- return this[$processString](schema);
52
- }
53
- if (isNumberSchema(schema) || isIntegerSchema(schema)) {
54
- return this[$processNumber](schema);
55
- }
56
- if (isBooleanSchema(schema)) {
57
- return this[$processBoolean](schema);
58
- }
59
- return this[$processUnknown](schema);
60
- }
16
+ export class ModelSchemaPartProcessor {
17
+ [$dependencies];
18
+ [$originalSchema];
19
+ [$schema];
20
+ constructor(schema, dependencies) {
21
+ this[$dependencies] = dependencies;
22
+ this[$originalSchema] = schema;
23
+ this[$schema] = isComposedSchema(schema) ? decomposeSchema(schema)[0] : schema;
24
+ }
25
+ process() {
26
+ const schema = this[$schema];
27
+ if (isReferenceSchema(schema)) {
28
+ return this[$processReference](schema);
29
+ }
30
+ if (isArraySchema(schema)) {
31
+ return this[$processArray](schema);
32
+ }
33
+ if (isMapSchema(schema)) {
34
+ return this[$processRecord](schema);
35
+ }
36
+ if (isStringSchema(schema)) {
37
+ return this[$processString](schema);
38
+ }
39
+ if (isNumberSchema(schema) || isIntegerSchema(schema)) {
40
+ return this[$processNumber](schema);
41
+ }
42
+ if (isBooleanSchema(schema)) {
43
+ return this[$processBoolean](schema);
44
+ }
45
+ return this[$processUnknown](schema);
46
+ }
61
47
  }
62
48
  function handleNullableInternalType(schema, typeNode) {
63
- return isNullableSchema(schema) ? ts.factory.createUnionTypeNode([typeNode, ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)]) : typeNode;
49
+ return isNullableSchema(schema)
50
+ ? ts.factory.createUnionTypeNode([typeNode, ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)])
51
+ : typeNode;
64
52
  }
65
53
  class ModelSchemaInternalTypeProcessor extends ModelSchemaPartProcessor {
66
- [$processArray](schema) {
67
- return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("ReadonlyArray"), [
68
- handleNullableInternalType(
69
- schema.items,
70
- new ModelSchemaInternalTypeProcessor(schema.items, this[$dependencies]).process()
71
- )
72
- ]);
73
- }
74
- [$processBoolean](_) {
75
- return ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);
76
- }
77
- [$processNumber](_) {
78
- return ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);
79
- }
80
- [$processRecord]({ additionalProperties: props }) {
81
- const valueType = typeof props === "boolean" ? ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword) : handleNullableInternalType(props, new ModelSchemaInternalTypeProcessor(props, this[$dependencies]).process());
82
- return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("Record"), [
83
- ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
84
- valueType
85
- ]);
86
- }
87
- [$processReference](schema) {
88
- const { imports, paths } = this[$dependencies];
89
- const typeName = convertReferenceSchemaToSpecifier(schema);
90
- const typePath = paths.createRelativePath(convertReferenceSchemaToPath(schema));
91
- return ts.factory.createTypeReferenceNode(
92
- imports.default.getIdentifier(typePath) ?? imports.default.add(typePath, typeName, true)
93
- );
94
- }
95
- [$processString](_) {
96
- return ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
97
- }
98
- [$processUnknown](_) {
99
- return ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);
100
- }
54
+ [$processArray](schema) {
55
+ return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('ReadonlyArray'), [
56
+ handleNullableInternalType(schema.items, new ModelSchemaInternalTypeProcessor(schema.items, this[$dependencies]).process()),
57
+ ]);
58
+ }
59
+ [$processBoolean](_) {
60
+ return ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);
61
+ }
62
+ [$processNumber](_) {
63
+ return ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);
64
+ }
65
+ [$processRecord]({ additionalProperties: props }) {
66
+ const valueType = typeof props === 'boolean'
67
+ ? ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)
68
+ : handleNullableInternalType(props, new ModelSchemaInternalTypeProcessor(props, this[$dependencies]).process());
69
+ return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('Record'), [
70
+ ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
71
+ valueType,
72
+ ]);
73
+ }
74
+ [$processReference](schema) {
75
+ const { imports, paths } = this[$dependencies];
76
+ const typeName = convertReferenceSchemaToSpecifier(schema);
77
+ const typePath = paths.createRelativePath(convertReferenceSchemaToPath(schema));
78
+ return ts.factory.createTypeReferenceNode(imports.default.getIdentifier(typePath) ?? imports.default.add(typePath, typeName, true));
79
+ }
80
+ [$processString](_) {
81
+ return ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
82
+ }
83
+ [$processUnknown](_) {
84
+ return ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);
85
+ }
101
86
  }
102
87
  class ModelSchemaIdentifierProcessor extends ModelSchemaPartProcessor {
103
- [$processArray](_) {
104
- return importBuiltInFormModel("ArrayModel", this[$dependencies]);
105
- }
106
- [$processBoolean](_) {
107
- return importBuiltInFormModel("BooleanModel", this[$dependencies]);
108
- }
109
- [$processNumber](_) {
110
- return importBuiltInFormModel("NumberModel", this[$dependencies]);
111
- }
112
- [$processRecord](_) {
113
- return importBuiltInFormModel("ObjectModel", this[$dependencies]);
114
- }
115
- [$processReference](schema) {
116
- const { imports, paths } = this[$dependencies];
117
- const name = `${convertReferenceSchemaToSpecifier(schema)}Model`;
118
- const path = paths.createRelativePath(`${convertReferenceSchemaToPath(schema)}Model`);
119
- return imports.default.getIdentifier(path) ?? imports.default.add(path, name);
120
- }
121
- [$processString](_) {
122
- return importBuiltInFormModel("StringModel", this[$dependencies]);
123
- }
124
- [$processUnknown](_) {
125
- return importBuiltInFormModel("ObjectModel", this[$dependencies]);
126
- }
88
+ [$processArray](_) {
89
+ return importBuiltInFormModel('ArrayModel', this[$dependencies]);
90
+ }
91
+ [$processBoolean](_) {
92
+ return importBuiltInFormModel('BooleanModel', this[$dependencies]);
93
+ }
94
+ [$processNumber](_) {
95
+ return importBuiltInFormModel('NumberModel', this[$dependencies]);
96
+ }
97
+ [$processRecord](_) {
98
+ return importBuiltInFormModel('ObjectModel', this[$dependencies]);
99
+ }
100
+ [$processReference](schema) {
101
+ const { imports, paths } = this[$dependencies];
102
+ const name = `${convertReferenceSchemaToSpecifier(schema)}Model`;
103
+ const path = paths.createRelativePath(`${convertReferenceSchemaToPath(schema)}Model`);
104
+ return imports.default.getIdentifier(path) ?? imports.default.add(path, name);
105
+ }
106
+ [$processString](_) {
107
+ return importBuiltInFormModel('StringModel', this[$dependencies]);
108
+ }
109
+ [$processUnknown](_) {
110
+ return importBuiltInFormModel('ObjectModel', this[$dependencies]);
111
+ }
127
112
  }
128
- class ModelSchemaTypeProcessor extends ModelSchemaPartProcessor {
129
- #id;
130
- constructor(schema, dependencies) {
131
- super(schema, dependencies);
132
- this.#id = new ModelSchemaIdentifierProcessor(schema, dependencies);
133
- }
134
- [$processArray](schema) {
135
- return ts.factory.createTypeReferenceNode(this.#id[$processArray](schema), [
136
- new ModelSchemaTypeProcessor(schema.items, this[$dependencies]).process()
137
- ]);
138
- }
139
- [$processBoolean](schema) {
140
- return ts.factory.createTypeReferenceNode(this.#id[$processBoolean](schema));
141
- }
142
- [$processNumber](schema) {
143
- return ts.factory.createTypeReferenceNode(this.#id[$processNumber](schema));
144
- }
145
- [$processRecord](schema) {
146
- return ts.factory.createTypeReferenceNode(this.#id[$processRecord](schema), [
147
- new ModelSchemaInternalTypeProcessor(schema, this[$dependencies]).process()
148
- ]);
149
- }
150
- [$processReference](schema) {
151
- return ts.factory.createTypeReferenceNode(this.#id[$processReference](schema));
152
- }
153
- [$processString](schema) {
154
- return ts.factory.createTypeReferenceNode(this.#id[$processString](schema));
155
- }
156
- [$processUnknown](schema) {
157
- return ts.factory.createTypeReferenceNode(this.#id[$processUnknown](schema));
158
- }
113
+ export class ModelSchemaTypeProcessor extends ModelSchemaPartProcessor {
114
+ #id;
115
+ constructor(schema, dependencies) {
116
+ super(schema, dependencies);
117
+ this.#id = new ModelSchemaIdentifierProcessor(schema, dependencies);
118
+ }
119
+ [$processArray](schema) {
120
+ return ts.factory.createTypeReferenceNode(this.#id[$processArray](schema), [
121
+ new ModelSchemaTypeProcessor(schema.items, this[$dependencies]).process(),
122
+ ]);
123
+ }
124
+ [$processBoolean](schema) {
125
+ return ts.factory.createTypeReferenceNode(this.#id[$processBoolean](schema));
126
+ }
127
+ [$processNumber](schema) {
128
+ return ts.factory.createTypeReferenceNode(this.#id[$processNumber](schema));
129
+ }
130
+ [$processRecord](schema) {
131
+ return ts.factory.createTypeReferenceNode(this.#id[$processRecord](schema), [
132
+ new ModelSchemaInternalTypeProcessor(schema, this[$dependencies]).process(),
133
+ ]);
134
+ }
135
+ [$processReference](schema) {
136
+ return ts.factory.createTypeReferenceNode(this.#id[$processReference](schema));
137
+ }
138
+ [$processString](schema) {
139
+ return ts.factory.createTypeReferenceNode(this.#id[$processString](schema));
140
+ }
141
+ [$processUnknown](schema) {
142
+ return ts.factory.createTypeReferenceNode(this.#id[$processUnknown](schema));
143
+ }
159
144
  }
160
- class ModelSchemaExpressionProcessor extends ModelSchemaPartProcessor {
161
- #validationConstraintProcessor;
162
- constructor(schema, dependencies) {
163
- super(schema, dependencies);
164
- this.#validationConstraintProcessor = new ValidationConstraintProcessor(
165
- (name) => importBuiltInFormModel(name, dependencies)
166
- );
167
- }
168
- process() {
169
- const originalSchema = this[$originalSchema];
170
- let result = super.process();
171
- const modelOptionsProperties = [
172
- this.#createValidatorsProperty(originalSchema),
173
- ModelSchemaExpressionProcessor.#createMetadataProperty(originalSchema)
174
- ].filter(Boolean);
175
- if (modelOptionsProperties.length > 0) {
176
- const optionsObject = ts.factory.createObjectLiteralExpression(modelOptionsProperties);
177
- result = [...result, optionsObject];
178
- }
179
- return [isNullableSchema(originalSchema) ? ts.factory.createTrue() : ts.factory.createFalse(), ...result];
180
- }
181
- [$processArray](schema) {
182
- const model = new ModelSchemaIdentifierProcessor(schema.items, this[$dependencies]).process();
183
- return [
184
- createModelBuildingCallback(
185
- model,
186
- new ModelSchemaExpressionProcessor(schema.items, this[$dependencies]).process()
187
- )
188
- ];
189
- }
190
- [$processBoolean](_) {
191
- return [];
192
- }
193
- [$processNumber](_) {
194
- return [];
195
- }
196
- [$processRecord](_) {
197
- return [];
198
- }
199
- [$processReference](_) {
200
- return [];
201
- }
202
- [$processString](_) {
203
- return [];
204
- }
205
- [$processUnknown](_) {
206
- return [];
207
- }
208
- #createValidatorsProperty(schema) {
209
- if (!hasValidationConstraints(schema)) {
210
- return null;
211
- }
212
- const constraints = schema["x-validation-constraints"].map(
213
- (constraint) => this.#validationConstraintProcessor.process(constraint)
214
- );
215
- return ts.factory.createPropertyAssignment("validators", ts.factory.createArrayLiteralExpression(constraints));
216
- }
217
- static #createMetadataProperty(schema) {
218
- const metadata = process(schema);
219
- return metadata ? ts.factory.createPropertyAssignment("meta", metadata) : null;
220
- }
145
+ export class ModelSchemaExpressionProcessor extends ModelSchemaPartProcessor {
146
+ #validationConstraintProcessor;
147
+ constructor(schema, dependencies) {
148
+ super(schema, dependencies);
149
+ this.#validationConstraintProcessor = new ValidationConstraintProcessor((name) => importBuiltInFormModel(name, dependencies));
150
+ }
151
+ process() {
152
+ const originalSchema = this[$originalSchema];
153
+ let result = super.process();
154
+ const modelOptionsProperties = [
155
+ this.#createValidatorsProperty(originalSchema),
156
+ ModelSchemaExpressionProcessor.#createMetadataProperty(originalSchema),
157
+ ].filter(Boolean);
158
+ if (modelOptionsProperties.length > 0) {
159
+ const optionsObject = ts.factory.createObjectLiteralExpression(modelOptionsProperties);
160
+ result = [...result, optionsObject];
161
+ }
162
+ return [isNullableSchema(originalSchema) ? ts.factory.createTrue() : ts.factory.createFalse(), ...result];
163
+ }
164
+ [$processArray](schema) {
165
+ const model = new ModelSchemaIdentifierProcessor(schema.items, this[$dependencies]).process();
166
+ return [
167
+ createModelBuildingCallback(model, new ModelSchemaExpressionProcessor(schema.items, this[$dependencies]).process()),
168
+ ];
169
+ }
170
+ [$processBoolean](_) {
171
+ return [];
172
+ }
173
+ [$processNumber](_) {
174
+ return [];
175
+ }
176
+ [$processRecord](_) {
177
+ return [];
178
+ }
179
+ [$processReference](_) {
180
+ return [];
181
+ }
182
+ [$processString](_) {
183
+ return [];
184
+ }
185
+ [$processUnknown](_) {
186
+ return [];
187
+ }
188
+ #createValidatorsProperty(schema) {
189
+ if (!hasValidationConstraints(schema)) {
190
+ return null;
191
+ }
192
+ const constraints = schema['x-validation-constraints'].map((constraint) => this.#validationConstraintProcessor.process(constraint));
193
+ return ts.factory.createPropertyAssignment('validators', ts.factory.createArrayLiteralExpression(constraints));
194
+ }
195
+ static #createMetadataProperty(schema) {
196
+ const metadata = process(schema);
197
+ return metadata ? ts.factory.createPropertyAssignment('meta', metadata) : null;
198
+ }
221
199
  }
222
- export {
223
- ModelSchemaExpressionProcessor,
224
- ModelSchemaPartProcessor,
225
- ModelSchemaTypeProcessor
226
- };
227
- //# sourceMappingURL=ModelSchemaProcessor.js.map
200
+ //# sourceMappingURL=ModelSchemaProcessor.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/ModelSchemaProcessor.ts"],
4
- "sourcesContent": ["import {\n type ArraySchema,\n type BooleanSchema,\n convertReferenceSchemaToPath,\n convertReferenceSchemaToSpecifier,\n decomposeSchema,\n type IntegerSchema,\n isArraySchema,\n isBooleanSchema,\n isComposedSchema,\n isIntegerSchema,\n isMapSchema,\n isNullableSchema,\n isNumberSchema,\n isReferenceSchema,\n isStringSchema,\n type MapSchema,\n type NumberSchema,\n type ReferenceSchema,\n type Schema,\n type StringSchema,\n} from '@vaadin/hilla-generator-core/Schema.js';\nimport type DependencyManager from '@vaadin/hilla-generator-utils/dependencies/DependencyManager.js';\nimport ts, {\n type Expression,\n type Identifier,\n type PropertyAssignment,\n type TypeNode,\n type TypeReferenceNode,\n} from 'typescript';\nimport { process } from './MetadataProcessor.js';\nimport { createModelBuildingCallback, importBuiltInFormModel } from './utils.js';\nimport { hasValidationConstraints, ValidationConstraintProcessor } from './ValidationConstraintProcessor.js';\n\nconst $dependencies = Symbol();\nconst $processArray = Symbol();\nconst $processRecord = Symbol();\nconst $processReference = Symbol();\nconst $processString = Symbol();\nconst $processNumber = Symbol();\nconst $processBoolean = Symbol();\nconst $processUnknown = Symbol();\nconst $originalSchema = Symbol();\nconst $schema = Symbol();\n\nexport abstract class ModelSchemaPartProcessor<T> {\n protected readonly [$dependencies]: DependencyManager;\n protected readonly [$originalSchema]: Schema;\n protected readonly [$schema]: Schema;\n\n constructor(schema: Schema, dependencies: DependencyManager) {\n this[$dependencies] = dependencies;\n this[$originalSchema] = schema;\n this[$schema] = isComposedSchema(schema) ? decomposeSchema(schema)[0] : schema;\n }\n\n process(): T {\n const schema = this[$schema];\n\n if (isReferenceSchema(schema)) {\n return this[$processReference](schema);\n }\n\n if (isArraySchema(schema)) {\n return this[$processArray](schema);\n }\n\n if (isMapSchema(schema)) {\n return this[$processRecord](schema);\n }\n\n if (isStringSchema(schema)) {\n return this[$processString](schema);\n }\n\n if (isNumberSchema(schema) || isIntegerSchema(schema)) {\n return this[$processNumber](schema);\n }\n\n if (isBooleanSchema(schema)) {\n return this[$processBoolean](schema);\n }\n\n return this[$processUnknown](schema);\n }\n\n protected abstract [$processArray](schema: ArraySchema): T;\n protected abstract [$processBoolean](schema: BooleanSchema): T;\n protected abstract [$processNumber](schema: IntegerSchema | NumberSchema): T;\n protected abstract [$processRecord](schema: MapSchema): T;\n protected abstract [$processReference](schema: ReferenceSchema): T;\n protected abstract [$processString](schema: StringSchema): T;\n protected abstract [$processUnknown](schema: Schema): T;\n}\n\nfunction handleNullableInternalType(schema: Schema, typeNode: TypeNode): TypeNode {\n return isNullableSchema(schema)\n ? ts.factory.createUnionTypeNode([typeNode, ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)])\n : typeNode;\n}\n\nclass ModelSchemaInternalTypeProcessor extends ModelSchemaPartProcessor<TypeNode> {\n protected override [$processArray](schema: ArraySchema): TypeNode {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('ReadonlyArray'), [\n handleNullableInternalType(\n schema.items,\n new ModelSchemaInternalTypeProcessor(schema.items, this[$dependencies]).process(),\n ),\n ]);\n }\n\n protected override [$processBoolean](_: BooleanSchema): TypeNode {\n return ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);\n }\n\n protected override [$processNumber](_: IntegerSchema | NumberSchema): TypeNode {\n return ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);\n }\n\n protected override [$processRecord]({ additionalProperties: props }: MapSchema): TypeNode {\n const valueType =\n typeof props === 'boolean'\n ? ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)\n : handleNullableInternalType(props, new ModelSchemaInternalTypeProcessor(props, this[$dependencies]).process());\n\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('Record'), [\n ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n valueType,\n ]);\n }\n\n protected override [$processReference](schema: ReferenceSchema): TypeNode {\n const { imports, paths } = this[$dependencies];\n const typeName = convertReferenceSchemaToSpecifier(schema);\n const typePath = paths.createRelativePath(convertReferenceSchemaToPath(schema));\n return ts.factory.createTypeReferenceNode(\n imports.default.getIdentifier(typePath) ?? imports.default.add(typePath, typeName, true),\n );\n }\n\n protected override [$processString](_: StringSchema): TypeNode {\n return ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);\n }\n\n protected override [$processUnknown](_: Schema): TypeNode {\n return ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n }\n}\n\nclass ModelSchemaIdentifierProcessor extends ModelSchemaPartProcessor<Identifier> {\n override [$processArray](_: ArraySchema): Identifier {\n return importBuiltInFormModel('ArrayModel', this[$dependencies]);\n }\n\n override [$processBoolean](_: BooleanSchema): Identifier {\n return importBuiltInFormModel('BooleanModel', this[$dependencies]);\n }\n\n override [$processNumber](_: IntegerSchema | NumberSchema): Identifier {\n return importBuiltInFormModel('NumberModel', this[$dependencies]);\n }\n\n override [$processRecord](_: MapSchema): Identifier {\n return importBuiltInFormModel('ObjectModel', this[$dependencies]);\n }\n\n override [$processReference](schema: ReferenceSchema): Identifier {\n const { imports, paths } = this[$dependencies];\n\n const name = `${convertReferenceSchemaToSpecifier(schema)}Model`;\n const path = paths.createRelativePath(`${convertReferenceSchemaToPath(schema)}Model`);\n\n return imports.default.getIdentifier(path) ?? imports.default.add(path, name);\n }\n\n override [$processString](_: StringSchema): Identifier {\n return importBuiltInFormModel('StringModel', this[$dependencies]);\n }\n\n override [$processUnknown](_: Schema): Identifier {\n return importBuiltInFormModel('ObjectModel', this[$dependencies]);\n }\n}\n\nexport class ModelSchemaTypeProcessor extends ModelSchemaPartProcessor<TypeReferenceNode> {\n readonly #id: ModelSchemaIdentifierProcessor;\n\n constructor(schema: Schema, dependencies: DependencyManager) {\n super(schema, dependencies);\n this.#id = new ModelSchemaIdentifierProcessor(schema, dependencies);\n }\n\n protected override [$processArray](schema: ArraySchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processArray](schema), [\n new ModelSchemaTypeProcessor(schema.items, this[$dependencies]).process(),\n ]);\n }\n\n protected override [$processBoolean](schema: BooleanSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processBoolean](schema));\n }\n\n protected override [$processNumber](schema: IntegerSchema | NumberSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processNumber](schema));\n }\n\n protected override [$processRecord](schema: MapSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processRecord](schema), [\n new ModelSchemaInternalTypeProcessor(schema, this[$dependencies]).process(),\n ]);\n }\n\n protected override [$processReference](schema: ReferenceSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processReference](schema));\n }\n\n protected override [$processString](schema: StringSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processString](schema));\n }\n\n protected override [$processUnknown](schema: Schema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processUnknown](schema));\n }\n}\n\nexport class ModelSchemaExpressionProcessor extends ModelSchemaPartProcessor<readonly Expression[]> {\n readonly #validationConstraintProcessor: ValidationConstraintProcessor;\n\n constructor(schema: Schema, dependencies: DependencyManager) {\n super(schema, dependencies);\n this.#validationConstraintProcessor = new ValidationConstraintProcessor((name) =>\n importBuiltInFormModel(name, dependencies),\n );\n }\n\n override process(): readonly ts.Expression[] {\n const originalSchema = this[$originalSchema];\n\n let result = super.process();\n\n const modelOptionsProperties = [\n this.#createValidatorsProperty(originalSchema),\n ModelSchemaExpressionProcessor.#createMetadataProperty(originalSchema),\n ].filter(Boolean) as PropertyAssignment[];\n\n if (modelOptionsProperties.length > 0) {\n const optionsObject = ts.factory.createObjectLiteralExpression(modelOptionsProperties);\n\n result = [...result, optionsObject];\n }\n\n return [isNullableSchema(originalSchema) ? ts.factory.createTrue() : ts.factory.createFalse(), ...result];\n }\n\n protected override [$processArray](schema: ArraySchema): readonly Expression[] {\n const model = new ModelSchemaIdentifierProcessor(schema.items, this[$dependencies]).process();\n\n return [\n createModelBuildingCallback(\n model,\n new ModelSchemaExpressionProcessor(schema.items, this[$dependencies]).process(),\n ),\n ];\n }\n\n protected override [$processBoolean](_: BooleanSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processNumber](_: IntegerSchema | NumberSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processRecord](_: MapSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processReference](_: ReferenceSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processString](_: StringSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processUnknown](_: Schema): readonly Expression[] {\n return [];\n }\n\n #createValidatorsProperty(schema: Schema): PropertyAssignment | null {\n if (!hasValidationConstraints(schema)) {\n return null;\n }\n\n const constraints = schema['x-validation-constraints'].map((constraint) =>\n this.#validationConstraintProcessor.process(constraint),\n );\n return ts.factory.createPropertyAssignment('validators', ts.factory.createArrayLiteralExpression(constraints));\n }\n\n static #createMetadataProperty(schema: Schema): PropertyAssignment | null {\n const metadata = process(schema);\n return metadata ? ts.factory.createPropertyAssignment('meta', metadata) : null;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
1
+ {"version":3,"file":"ModelSchemaProcessor.js","sourceRoot":"","sources":["src/ModelSchemaProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ArraySchema,\n type BooleanSchema,\n convertReferenceSchemaToPath,\n convertReferenceSchemaToSpecifier,\n decomposeSchema,\n type IntegerSchema,\n isArraySchema,\n isBooleanSchema,\n isComposedSchema,\n isIntegerSchema,\n isMapSchema,\n isNullableSchema,\n isNumberSchema,\n isReferenceSchema,\n isStringSchema,\n type MapSchema,\n type NumberSchema,\n type ReferenceSchema,\n type Schema,\n type StringSchema,\n} from '@vaadin/hilla-generator-core/Schema.js';\nimport type DependencyManager from '@vaadin/hilla-generator-utils/dependencies/DependencyManager.js';\nimport ts, {\n type Expression,\n type Identifier,\n type PropertyAssignment,\n type TypeNode,\n type TypeReferenceNode,\n} from 'typescript';\nimport { process } from './MetadataProcessor.js';\nimport { createModelBuildingCallback, importBuiltInFormModel } from './utils.js';\nimport { hasValidationConstraints, ValidationConstraintProcessor } from './ValidationConstraintProcessor.js';\n\nconst $dependencies = Symbol();\nconst $processArray = Symbol();\nconst $processRecord = Symbol();\nconst $processReference = Symbol();\nconst $processString = Symbol();\nconst $processNumber = Symbol();\nconst $processBoolean = Symbol();\nconst $processUnknown = Symbol();\nconst $originalSchema = Symbol();\nconst $schema = Symbol();\n\nexport abstract class ModelSchemaPartProcessor<T> {\n protected readonly [$dependencies]: DependencyManager;\n protected readonly [$originalSchema]: Schema;\n protected readonly [$schema]: Schema;\n\n constructor(schema: Schema, dependencies: DependencyManager) {\n this[$dependencies] = dependencies;\n this[$originalSchema] = schema;\n this[$schema] = isComposedSchema(schema) ? decomposeSchema(schema)[0] : schema;\n }\n\n process(): T {\n const schema = this[$schema];\n\n if (isReferenceSchema(schema)) {\n return this[$processReference](schema);\n }\n\n if (isArraySchema(schema)) {\n return this[$processArray](schema);\n }\n\n if (isMapSchema(schema)) {\n return this[$processRecord](schema);\n }\n\n if (isStringSchema(schema)) {\n return this[$processString](schema);\n }\n\n if (isNumberSchema(schema) || isIntegerSchema(schema)) {\n return this[$processNumber](schema);\n }\n\n if (isBooleanSchema(schema)) {\n return this[$processBoolean](schema);\n }\n\n return this[$processUnknown](schema);\n }\n\n protected abstract [$processArray](schema: ArraySchema): T;\n protected abstract [$processBoolean](schema: BooleanSchema): T;\n protected abstract [$processNumber](schema: IntegerSchema | NumberSchema): T;\n protected abstract [$processRecord](schema: MapSchema): T;\n protected abstract [$processReference](schema: ReferenceSchema): T;\n protected abstract [$processString](schema: StringSchema): T;\n protected abstract [$processUnknown](schema: Schema): T;\n}\n\nfunction handleNullableInternalType(schema: Schema, typeNode: TypeNode): TypeNode {\n return isNullableSchema(schema)\n ? ts.factory.createUnionTypeNode([typeNode, ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)])\n : typeNode;\n}\n\nclass ModelSchemaInternalTypeProcessor extends ModelSchemaPartProcessor<TypeNode> {\n protected override [$processArray](schema: ArraySchema): TypeNode {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('ReadonlyArray'), [\n handleNullableInternalType(\n schema.items,\n new ModelSchemaInternalTypeProcessor(schema.items, this[$dependencies]).process(),\n ),\n ]);\n }\n\n protected override [$processBoolean](_: BooleanSchema): TypeNode {\n return ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);\n }\n\n protected override [$processNumber](_: IntegerSchema | NumberSchema): TypeNode {\n return ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);\n }\n\n protected override [$processRecord]({ additionalProperties: props }: MapSchema): TypeNode {\n const valueType =\n typeof props === 'boolean'\n ? ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)\n : handleNullableInternalType(props, new ModelSchemaInternalTypeProcessor(props, this[$dependencies]).process());\n\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier('Record'), [\n ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n valueType,\n ]);\n }\n\n protected override [$processReference](schema: ReferenceSchema): TypeNode {\n const { imports, paths } = this[$dependencies];\n const typeName = convertReferenceSchemaToSpecifier(schema);\n const typePath = paths.createRelativePath(convertReferenceSchemaToPath(schema));\n return ts.factory.createTypeReferenceNode(\n imports.default.getIdentifier(typePath) ?? imports.default.add(typePath, typeName, true),\n );\n }\n\n protected override [$processString](_: StringSchema): TypeNode {\n return ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);\n }\n\n protected override [$processUnknown](_: Schema): TypeNode {\n return ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n }\n}\n\nclass ModelSchemaIdentifierProcessor extends ModelSchemaPartProcessor<Identifier> {\n override [$processArray](_: ArraySchema): Identifier {\n return importBuiltInFormModel('ArrayModel', this[$dependencies]);\n }\n\n override [$processBoolean](_: BooleanSchema): Identifier {\n return importBuiltInFormModel('BooleanModel', this[$dependencies]);\n }\n\n override [$processNumber](_: IntegerSchema | NumberSchema): Identifier {\n return importBuiltInFormModel('NumberModel', this[$dependencies]);\n }\n\n override [$processRecord](_: MapSchema): Identifier {\n return importBuiltInFormModel('ObjectModel', this[$dependencies]);\n }\n\n override [$processReference](schema: ReferenceSchema): Identifier {\n const { imports, paths } = this[$dependencies];\n\n const name = `${convertReferenceSchemaToSpecifier(schema)}Model`;\n const path = paths.createRelativePath(`${convertReferenceSchemaToPath(schema)}Model`);\n\n return imports.default.getIdentifier(path) ?? imports.default.add(path, name);\n }\n\n override [$processString](_: StringSchema): Identifier {\n return importBuiltInFormModel('StringModel', this[$dependencies]);\n }\n\n override [$processUnknown](_: Schema): Identifier {\n return importBuiltInFormModel('ObjectModel', this[$dependencies]);\n }\n}\n\nexport class ModelSchemaTypeProcessor extends ModelSchemaPartProcessor<TypeReferenceNode> {\n readonly #id: ModelSchemaIdentifierProcessor;\n\n constructor(schema: Schema, dependencies: DependencyManager) {\n super(schema, dependencies);\n this.#id = new ModelSchemaIdentifierProcessor(schema, dependencies);\n }\n\n protected override [$processArray](schema: ArraySchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processArray](schema), [\n new ModelSchemaTypeProcessor(schema.items, this[$dependencies]).process(),\n ]);\n }\n\n protected override [$processBoolean](schema: BooleanSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processBoolean](schema));\n }\n\n protected override [$processNumber](schema: IntegerSchema | NumberSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processNumber](schema));\n }\n\n protected override [$processRecord](schema: MapSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processRecord](schema), [\n new ModelSchemaInternalTypeProcessor(schema, this[$dependencies]).process(),\n ]);\n }\n\n protected override [$processReference](schema: ReferenceSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processReference](schema));\n }\n\n protected override [$processString](schema: StringSchema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processString](schema));\n }\n\n protected override [$processUnknown](schema: Schema): TypeReferenceNode {\n return ts.factory.createTypeReferenceNode(this.#id[$processUnknown](schema));\n }\n}\n\nexport class ModelSchemaExpressionProcessor extends ModelSchemaPartProcessor<readonly Expression[]> {\n readonly #validationConstraintProcessor: ValidationConstraintProcessor;\n\n constructor(schema: Schema, dependencies: DependencyManager) {\n super(schema, dependencies);\n this.#validationConstraintProcessor = new ValidationConstraintProcessor((name) =>\n importBuiltInFormModel(name, dependencies),\n );\n }\n\n override process(): readonly ts.Expression[] {\n const originalSchema = this[$originalSchema];\n\n let result = super.process();\n\n const modelOptionsProperties = [\n this.#createValidatorsProperty(originalSchema),\n ModelSchemaExpressionProcessor.#createMetadataProperty(originalSchema),\n ].filter(Boolean) as PropertyAssignment[];\n\n if (modelOptionsProperties.length > 0) {\n const optionsObject = ts.factory.createObjectLiteralExpression(modelOptionsProperties);\n\n result = [...result, optionsObject];\n }\n\n return [isNullableSchema(originalSchema) ? ts.factory.createTrue() : ts.factory.createFalse(), ...result];\n }\n\n protected override [$processArray](schema: ArraySchema): readonly Expression[] {\n const model = new ModelSchemaIdentifierProcessor(schema.items, this[$dependencies]).process();\n\n return [\n createModelBuildingCallback(\n model,\n new ModelSchemaExpressionProcessor(schema.items, this[$dependencies]).process(),\n ),\n ];\n }\n\n protected override [$processBoolean](_: BooleanSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processNumber](_: IntegerSchema | NumberSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processRecord](_: MapSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processReference](_: ReferenceSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processString](_: StringSchema): readonly Expression[] {\n return [];\n }\n\n protected override [$processUnknown](_: Schema): readonly Expression[] {\n return [];\n }\n\n #createValidatorsProperty(schema: Schema): PropertyAssignment | null {\n if (!hasValidationConstraints(schema)) {\n return null;\n }\n\n const constraints = schema['x-validation-constraints'].map((constraint) =>\n this.#validationConstraintProcessor.process(constraint),\n );\n return ts.factory.createPropertyAssignment('validators', ts.factory.createArrayLiteralExpression(constraints));\n }\n\n static #createMetadataProperty(schema: Schema): PropertyAssignment | null {\n const metadata = process(schema);\n return metadata ? ts.factory.createPropertyAssignment('meta', metadata) : null;\n }\n}\n"]}
@@ -14,4 +14,3 @@ export declare class ValidationConstraintProcessor {
14
14
  constructor(importer: ValidationConstraintImporter);
15
15
  process(constraint: ValidationConstraint): NewExpression;
16
16
  }
17
- //# sourceMappingURL=ValidationConstraintProcessor.d.ts.map
@@ -1,37 +1,29 @@
1
- import { template, transform } from "@vaadin/hilla-generator-utils/ast.js";
2
- import ts, {
3
- } from "typescript";
4
- function hasValidationConstraints(schema) {
5
- return "x-validation-constraints" in schema && schema["x-validation-constraints"].length > 0;
1
+ import { template, transform } from '@vaadin/hilla-generator-utils/ast.js';
2
+ import ts, {} from 'typescript';
3
+ export function hasValidationConstraints(schema) {
4
+ return ('x-validation-constraints' in schema &&
5
+ schema['x-validation-constraints'].length > 0);
6
6
  }
7
7
  function selector([statement]) {
8
- return statement.declarationList.declarations[0].initializer;
8
+ return statement.declarationList.declarations[0].initializer;
9
9
  }
10
- const variableStatementVar = "const a";
11
- class ValidationConstraintProcessor {
12
- #importer;
13
- constructor(importer) {
14
- this.#importer = importer;
15
- }
16
- process(constraint) {
17
- return ts.factory.createNewExpression(
18
- this.#importer(constraint.simpleName),
19
- void 0,
20
- constraint.attributes ? [ValidationConstraintProcessor.#processAttributes(constraint.attributes)] : []
21
- );
22
- }
23
- static #processAttributes(attributes) {
24
- const names = Object.keys(attributes);
25
- const tpl = JSON.stringify(names.includes("value") && names.length === 1 ? attributes.value : attributes);
26
- return template(`${variableStatementVar}=${tpl}`, selector, [
27
- transform(
28
- (node) => ts.isPropertyAssignment(node) && ts.isStringLiteral(node.name) ? ts.factory.createPropertyAssignment(node.name.text, node.initializer) : node
29
- )
30
- ]);
31
- }
10
+ const variableStatementVar = 'const a';
11
+ export class ValidationConstraintProcessor {
12
+ #importer;
13
+ constructor(importer) {
14
+ this.#importer = importer;
15
+ }
16
+ process(constraint) {
17
+ return ts.factory.createNewExpression(this.#importer(constraint.simpleName), undefined, constraint.attributes ? [ValidationConstraintProcessor.#processAttributes(constraint.attributes)] : []);
18
+ }
19
+ static #processAttributes(attributes) {
20
+ const names = Object.keys(attributes);
21
+ const tpl = JSON.stringify(names.includes('value') && names.length === 1 ? attributes.value : attributes);
22
+ return template(`${variableStatementVar}=${tpl}`, selector, [
23
+ transform((node) => ts.isPropertyAssignment(node) && ts.isStringLiteral(node.name)
24
+ ? ts.factory.createPropertyAssignment(node.name.text, node.initializer)
25
+ : node),
26
+ ]);
27
+ }
32
28
  }
33
- export {
34
- ValidationConstraintProcessor,
35
- hasValidationConstraints
36
- };
37
- //# sourceMappingURL=ValidationConstraintProcessor.js.map
29
+ //# sourceMappingURL=ValidationConstraintProcessor.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/ValidationConstraintProcessor.ts"],
4
- "sourcesContent": ["import type { NonComposedRegularSchema, Schema } from '@vaadin/hilla-generator-core/Schema.js';\nimport { template, transform } from '@vaadin/hilla-generator-utils/ast.js';\nimport ts, {\n type Expression,\n type Identifier,\n type NewExpression,\n type Statement,\n type VariableStatement,\n} from 'typescript';\n\nexport type ValidationConstrainedSchema = NonComposedRegularSchema &\n Readonly<{ 'x-validation-constraints': readonly ValidationConstraint[] }>;\n\nexport function hasValidationConstraints(schema: Schema): schema is ValidationConstrainedSchema {\n return (\n 'x-validation-constraints' in schema &&\n (schema as ValidationConstrainedSchema)['x-validation-constraints'].length > 0\n );\n}\n\nexport interface ValidationConstraint {\n simpleName: string;\n attributes?: Record<string, unknown>;\n}\n\nexport type ValidationConstraintImporter = (name: string) => Identifier;\n\nfunction selector<T extends Expression>([statement]: readonly Statement[]): T {\n return (statement as VariableStatement).declarationList.declarations[0].initializer as T;\n}\n\nconst variableStatementVar = 'const a';\n\nexport class ValidationConstraintProcessor {\n readonly #importer: ValidationConstraintImporter;\n\n constructor(importer: ValidationConstraintImporter) {\n this.#importer = importer;\n }\n\n process(constraint: ValidationConstraint): NewExpression {\n return ts.factory.createNewExpression(\n this.#importer(constraint.simpleName),\n undefined,\n constraint.attributes ? [ValidationConstraintProcessor.#processAttributes(constraint.attributes)] : [],\n );\n }\n\n static #processAttributes(attributes: Record<string, unknown>): Expression {\n const names = Object.keys(attributes);\n const tpl = JSON.stringify(names.includes('value') && names.length === 1 ? attributes.value : attributes);\n\n return template(`${variableStatementVar}=${tpl}`, selector, [\n transform((node) =>\n ts.isPropertyAssignment(node) && ts.isStringLiteral(node.name)\n ? ts.factory.createPropertyAssignment(node.name.text, node.initializer)\n : node,\n ),\n ]);\n }\n}\n"],
5
- "mappings": "AACA,SAAS,UAAU,iBAAiB;AACpC,OAAO;AAAA,OAMA;AAKA,SAAS,yBAAyB,QAAuD;AAC9F,SACE,8BAA8B,UAC7B,OAAuC,0BAA0B,EAAE,SAAS;AAEjF;AASA,SAAS,SAA+B,CAAC,SAAS,GAA4B;AAC5E,SAAQ,UAAgC,gBAAgB,aAAa,CAAC,EAAE;AAC1E;AAEA,MAAM,uBAAuB;AAEtB,MAAM,8BAA8B;AAAA,EAChC;AAAA,EAET,YAAY,UAAwC;AAClD,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,QAAQ,YAAiD;AACvD,WAAO,GAAG,QAAQ;AAAA,MAChB,KAAK,UAAU,WAAW,UAAU;AAAA,MACpC;AAAA,MACA,WAAW,aAAa,CAAC,8BAA8B,mBAAmB,WAAW,UAAU,CAAC,IAAI,CAAC;AAAA,IACvG;AAAA,EACF;AAAA,EAEA,OAAO,mBAAmB,YAAiD;AACzE,UAAM,QAAQ,OAAO,KAAK,UAAU;AACpC,UAAM,MAAM,KAAK,UAAU,MAAM,SAAS,OAAO,KAAK,MAAM,WAAW,IAAI,WAAW,QAAQ,UAAU;AAExG,WAAO,SAAS,GAAG,oBAAoB,IAAI,GAAG,IAAI,UAAU;AAAA,MAC1D;AAAA,QAAU,CAAC,SACT,GAAG,qBAAqB,IAAI,KAAK,GAAG,gBAAgB,KAAK,IAAI,IACzD,GAAG,QAAQ,yBAAyB,KAAK,KAAK,MAAM,KAAK,WAAW,IACpE;AAAA,MACN;AAAA,IACF,CAAC;AAAA,EACH;AACF;",
6
- "names": []
7
- }
1
+ {"version":3,"file":"ValidationConstraintProcessor.js","sourceRoot":"","sources":["src/ValidationConstraintProcessor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,EAAE,EAMV,MAAM,YAAY,CAAC;AAKpB,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,OAAO,CACL,0BAA0B,IAAI,MAAM;QACnC,MAAsC,CAAC,0BAA0B,CAAC,CAAC,MAAM,GAAG,CAAC,CAC/E,CAAC;AACJ,CAAC;AASD,SAAS,QAAQ,CAAuB,CAAC,SAAS,CAAuB;IACvE,OAAQ,SAA+B,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAgB,CAAC;AAC3F,CAAC;AAED,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAEvC,MAAM,OAAO,6BAA6B;IAC/B,SAAS,CAA+B;IAEjD,YAAY,QAAsC;QAChD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,UAAgC;QACtC,OAAO,EAAE,CAAC,OAAO,CAAC,mBAAmB,CACnC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EACrC,SAAS,EACT,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACvG,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,UAAmC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAE1G,OAAO,QAAQ,CAAC,GAAG,oBAAoB,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE;YAC1D,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5D,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;gBACvE,CAAC,CAAC,IAAI,CACT;SACF,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import type { NonComposedRegularSchema, Schema } from '@vaadin/hilla-generator-core/Schema.js';\nimport { template, transform } from '@vaadin/hilla-generator-utils/ast.js';\nimport ts, {\n type Expression,\n type Identifier,\n type NewExpression,\n type Statement,\n type VariableStatement,\n} from 'typescript';\n\nexport type ValidationConstrainedSchema = NonComposedRegularSchema &\n Readonly<{ 'x-validation-constraints': readonly ValidationConstraint[] }>;\n\nexport function hasValidationConstraints(schema: Schema): schema is ValidationConstrainedSchema {\n return (\n 'x-validation-constraints' in schema &&\n (schema as ValidationConstrainedSchema)['x-validation-constraints'].length > 0\n );\n}\n\nexport interface ValidationConstraint {\n simpleName: string;\n attributes?: Record<string, unknown>;\n}\n\nexport type ValidationConstraintImporter = (name: string) => Identifier;\n\nfunction selector<T extends Expression>([statement]: readonly Statement[]): T {\n return (statement as VariableStatement).declarationList.declarations[0].initializer as T;\n}\n\nconst variableStatementVar = 'const a';\n\nexport class ValidationConstraintProcessor {\n readonly #importer: ValidationConstraintImporter;\n\n constructor(importer: ValidationConstraintImporter) {\n this.#importer = importer;\n }\n\n process(constraint: ValidationConstraint): NewExpression {\n return ts.factory.createNewExpression(\n this.#importer(constraint.simpleName),\n undefined,\n constraint.attributes ? [ValidationConstraintProcessor.#processAttributes(constraint.attributes)] : [],\n );\n }\n\n static #processAttributes(attributes: Record<string, unknown>): Expression {\n const names = Object.keys(attributes);\n const tpl = JSON.stringify(names.includes('value') && names.length === 1 ? attributes.value : attributes);\n\n return template(`${variableStatementVar}=${tpl}`, selector, [\n transform((node) =>\n ts.isPropertyAssignment(node) && ts.isStringLiteral(node.name)\n ? ts.factory.createPropertyAssignment(node.name.text, node.initializer)\n : node,\n ),\n ]);\n }\n}\n"]}
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Plugin from '@vaadin/hilla-generator-core/Plugin.js';
2
- import type SharedStorage from '@vaadin/hilla-generator-core/SharedStorage.js';
2
+ import type { SharedStorage } from '@vaadin/hilla-generator-core/SharedStorage.js';
3
3
  export declare enum ModelPluginSourceType {
4
4
  Model = "model"
5
5
  }
@@ -10,4 +10,3 @@ export default class ModelPlugin extends Plugin {
10
10
  get path(): string;
11
11
  execute(storage: SharedStorage): Promise<void>;
12
12
  }
13
- //# sourceMappingURL=index.d.ts.map