@mostajs/orm-adapter 0.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/CHANGELOG.md +60 -0
- package/LICENSE +29 -0
- package/README.md +182 -0
- package/dist/adapters/native.adapter.d.ts +36 -0
- package/dist/adapters/native.adapter.d.ts.map +1 -0
- package/dist/adapters/native.adapter.js +83 -0
- package/dist/adapters/native.adapter.js.map +1 -0
- package/dist/adapters/prisma.adapter.d.ts +48 -0
- package/dist/adapters/prisma.adapter.d.ts.map +1 -0
- package/dist/adapters/prisma.adapter.js +400 -0
- package/dist/adapters/prisma.adapter.js.map +1 -0
- package/dist/core/abstract.adapter.d.ts +39 -0
- package/dist/core/abstract.adapter.d.ts.map +1 -0
- package/dist/core/abstract.adapter.js +130 -0
- package/dist/core/abstract.adapter.js.map +1 -0
- package/dist/core/errors.d.ts +21 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +37 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/registry.d.ts +25 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +68 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/types.d.ts +76 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +21 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/prisma-ast-helpers.d.ts +43 -0
- package/dist/utils/prisma-ast-helpers.d.ts.map +1 -0
- package/dist/utils/prisma-ast-helpers.js +155 -0
- package/dist/utils/prisma-ast-helpers.js.map +1 -0
- package/dist/utils/prisma-default-mapper.d.ts +29 -0
- package/dist/utils/prisma-default-mapper.d.ts.map +1 -0
- package/dist/utils/prisma-default-mapper.js +124 -0
- package/dist/utils/prisma-default-mapper.js.map +1 -0
- package/dist/utils/prisma-type-mapper.d.ts +32 -0
- package/dist/utils/prisma-type-mapper.d.ts.map +1 -0
- package/dist/utils/prisma-type-mapper.js +95 -0
- package/dist/utils/prisma-type-mapper.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
// prisma.adapter.ts
|
|
2
|
+
// Converts Prisma schema (.prisma) to EntitySchema[] for @mostajs/orm.
|
|
3
|
+
// Parser: @mrleebo/prisma-ast (pure TypeScript, no Rust binary).
|
|
4
|
+
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
5
|
+
// License: AGPL-3.0-or-later
|
|
6
|
+
import { getSchema } from '@mrleebo/prisma-ast';
|
|
7
|
+
import { AbstractAdapter } from '../core/abstract.adapter.js';
|
|
8
|
+
import { WarningCode } from '../core/types.js';
|
|
9
|
+
import { InvalidSchemaError } from '../core/errors.js';
|
|
10
|
+
import { getModels, buildEnumMap, buildModelNameSet, getFields, getBlockAttributes, hasFieldAttribute, getFieldAttribute, getDbAttribute, getArgValue, getKeyValueArg, getPositionalArgs, getFieldTypeName, isUnsupportedType, } from '../utils/prisma-ast-helpers.js';
|
|
11
|
+
import { mapPrismaScalar, extractDbMetadata } from '../utils/prisma-type-mapper.js';
|
|
12
|
+
import { mapPrismaDefault } from '../utils/prisma-default-mapper.js';
|
|
13
|
+
/**
|
|
14
|
+
* PrismaAdapter — converts .prisma files to EntitySchema[].
|
|
15
|
+
*
|
|
16
|
+
* Supports (MVP v0.2.0):
|
|
17
|
+
* - All scalar types (String, Int, BigInt, Float, Decimal, Boolean, DateTime, Json, Bytes)
|
|
18
|
+
* - Modifiers (?, [])
|
|
19
|
+
* - @id, @unique, @default, @map, @updatedAt
|
|
20
|
+
* - @@id, @@unique, @@index, @@map
|
|
21
|
+
* - @db.VarChar(N), @db.Decimal(p,s) (metadata extraction)
|
|
22
|
+
* - Enums (as FieldDef.enum)
|
|
23
|
+
* - Relations 1-1, 1-N, M-N (implicit & explicit)
|
|
24
|
+
* - Self-relations (named)
|
|
25
|
+
* - onDelete actions (Cascade, SetNull, Restrict, NoAction, SetDefault)
|
|
26
|
+
*
|
|
27
|
+
* Not yet supported (v0.3+):
|
|
28
|
+
* - Composite types (MongoDB embedded docs)
|
|
29
|
+
* - Views (preview)
|
|
30
|
+
* - Multi-schema
|
|
31
|
+
* - @@fulltext, specialized @@index(type: Gin)
|
|
32
|
+
*/
|
|
33
|
+
export class PrismaAdapter extends AbstractAdapter {
|
|
34
|
+
name = 'prisma';
|
|
35
|
+
vendor = 'prisma.io';
|
|
36
|
+
version = '0.2.0';
|
|
37
|
+
canParse(input) {
|
|
38
|
+
if (typeof input !== 'string')
|
|
39
|
+
return false;
|
|
40
|
+
// Detect presence of Prisma schema block keywords
|
|
41
|
+
return /^\s*(datasource|generator|model|enum)\s+\w+\s*\{/m.test(input);
|
|
42
|
+
}
|
|
43
|
+
async toEntitySchema(input, opts) {
|
|
44
|
+
if (typeof input !== 'string') {
|
|
45
|
+
throw new InvalidSchemaError('PrismaAdapter expects a string (.prisma file contents)');
|
|
46
|
+
}
|
|
47
|
+
let ast;
|
|
48
|
+
try {
|
|
49
|
+
ast = getSchema(input);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
throw new InvalidSchemaError(`Failed to parse .prisma: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
|
|
53
|
+
}
|
|
54
|
+
const models = getModels(ast);
|
|
55
|
+
const enumMap = buildEnumMap(ast);
|
|
56
|
+
const modelNames = buildModelNameSet(ast);
|
|
57
|
+
// Emit a warning per preview feature detected in source (best-effort)
|
|
58
|
+
this.detectPreviewFeatures(input, opts);
|
|
59
|
+
// First pass : convert each model to EntitySchema (without M-N synthesis yet)
|
|
60
|
+
const entities = models.map(m => this.modelToEntity(m, enumMap, modelNames, opts));
|
|
61
|
+
// Second pass : detect implicit M-N relations and synthesize junction entries
|
|
62
|
+
this.synthesizeImplicitM2M(entities, models, modelNames, opts);
|
|
63
|
+
return entities;
|
|
64
|
+
}
|
|
65
|
+
// ============================================================
|
|
66
|
+
// Model -> Entity conversion
|
|
67
|
+
// ============================================================
|
|
68
|
+
modelToEntity(model, enumMap, modelNames, opts) {
|
|
69
|
+
const entity = {
|
|
70
|
+
name: model.name,
|
|
71
|
+
collection: this.resolveTableName(model),
|
|
72
|
+
fields: {},
|
|
73
|
+
relations: {},
|
|
74
|
+
indexes: [],
|
|
75
|
+
timestamps: false,
|
|
76
|
+
};
|
|
77
|
+
const fields = getFields(model);
|
|
78
|
+
// ---- Field-level : classify field vs relation ----
|
|
79
|
+
for (const field of fields) {
|
|
80
|
+
if (this.isRelationField(field, modelNames, enumMap)) {
|
|
81
|
+
const rel = this.fieldToRelation(field, model.name, opts);
|
|
82
|
+
if (rel)
|
|
83
|
+
entity.relations[field.name] = rel;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const fd = this.fieldToFieldDef(field, model.name, enumMap, opts);
|
|
87
|
+
if (fd)
|
|
88
|
+
entity.fields[field.name] = fd;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// ---- Block-level : @@id, @@unique, @@index, @@map, @@schema ----
|
|
92
|
+
for (const attr of getBlockAttributes(model)) {
|
|
93
|
+
this.applyBlockAttribute(attr, entity, opts);
|
|
94
|
+
}
|
|
95
|
+
// ---- Detect timestamps convention (createdAt + updatedAt) ----
|
|
96
|
+
if (this.hasTimestampsConvention(fields)) {
|
|
97
|
+
entity.timestamps = true;
|
|
98
|
+
}
|
|
99
|
+
return entity;
|
|
100
|
+
}
|
|
101
|
+
resolveTableName(model) {
|
|
102
|
+
const mapAttr = getBlockAttributes(model).find(a => a.name === 'map');
|
|
103
|
+
if (mapAttr) {
|
|
104
|
+
const v = getArgValue(mapAttr);
|
|
105
|
+
if (typeof v === 'string')
|
|
106
|
+
return this.unquote(v);
|
|
107
|
+
}
|
|
108
|
+
return this.snakeCase(model.name);
|
|
109
|
+
}
|
|
110
|
+
// ============================================================
|
|
111
|
+
// Field classification
|
|
112
|
+
// ============================================================
|
|
113
|
+
isRelationField(field, modelNames, enumMap) {
|
|
114
|
+
// Relation = field whose type is another model (or array of a model)
|
|
115
|
+
// NOT an enum, NOT a scalar
|
|
116
|
+
if (isUnsupportedType(field))
|
|
117
|
+
return false;
|
|
118
|
+
const t = getFieldTypeName(field);
|
|
119
|
+
if (modelNames.has(t))
|
|
120
|
+
return true;
|
|
121
|
+
if (enumMap.has(t))
|
|
122
|
+
return false;
|
|
123
|
+
return false; // scalar or unknown
|
|
124
|
+
}
|
|
125
|
+
// ============================================================
|
|
126
|
+
// Field -> FieldDef
|
|
127
|
+
// ============================================================
|
|
128
|
+
fieldToFieldDef(field, entityName, enumMap, opts) {
|
|
129
|
+
const fieldName = field.name;
|
|
130
|
+
// Handle Unsupported("xxx") : not mappable
|
|
131
|
+
if (isUnsupportedType(field)) {
|
|
132
|
+
this.warn(opts, {
|
|
133
|
+
code: WarningCode.UNSUPPORTED_FEATURE,
|
|
134
|
+
message: `Unsupported type for "${fieldName}" — field ignored`,
|
|
135
|
+
entity: entityName,
|
|
136
|
+
field: fieldName,
|
|
137
|
+
});
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const prismaType = getFieldTypeName(field);
|
|
141
|
+
// Check if type is an enum
|
|
142
|
+
if (enumMap.has(prismaType)) {
|
|
143
|
+
const values = enumMap.get(prismaType);
|
|
144
|
+
const fd = {
|
|
145
|
+
type: 'string',
|
|
146
|
+
required: !field.optional && !field.array,
|
|
147
|
+
enum: values,
|
|
148
|
+
};
|
|
149
|
+
this.applyFieldAttributes(field, fd, entityName, enumMap, opts);
|
|
150
|
+
return fd;
|
|
151
|
+
}
|
|
152
|
+
// Scalar type
|
|
153
|
+
const mapping = mapPrismaScalar(prismaType, fieldName, entityName, opts, w => this.warn(opts, w));
|
|
154
|
+
if (!mapping) {
|
|
155
|
+
this.warn(opts, {
|
|
156
|
+
code: WarningCode.UNSUPPORTED_FEATURE,
|
|
157
|
+
message: `Unknown type "${prismaType}" for field "${fieldName}"`,
|
|
158
|
+
entity: entityName,
|
|
159
|
+
field: fieldName,
|
|
160
|
+
});
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const fd = {
|
|
164
|
+
type: mapping.type,
|
|
165
|
+
required: !field.optional && !field.array,
|
|
166
|
+
};
|
|
167
|
+
// Array modifier → arrayOf
|
|
168
|
+
if (field.array) {
|
|
169
|
+
fd.type = 'array';
|
|
170
|
+
fd.arrayOf = mapping.type;
|
|
171
|
+
}
|
|
172
|
+
this.applyFieldAttributes(field, fd, entityName, enumMap, opts);
|
|
173
|
+
return fd;
|
|
174
|
+
}
|
|
175
|
+
applyFieldAttributes(field, fd, entityName, enumMap, opts) {
|
|
176
|
+
// @unique
|
|
177
|
+
if (hasFieldAttribute(field, 'unique')) {
|
|
178
|
+
fd.unique = true;
|
|
179
|
+
}
|
|
180
|
+
// @default(...)
|
|
181
|
+
const defaultAttr = getFieldAttribute(field, 'default');
|
|
182
|
+
if (defaultAttr) {
|
|
183
|
+
const raw = getArgValue(defaultAttr);
|
|
184
|
+
const enumValues = enumMap.get(getFieldTypeName(field));
|
|
185
|
+
const mapped = mapPrismaDefault(raw, field.name, entityName, enumValues, opts, w => this.warn(opts, w));
|
|
186
|
+
if (mapped !== undefined)
|
|
187
|
+
fd.default = mapped;
|
|
188
|
+
}
|
|
189
|
+
// @db.VarChar(N), @db.Decimal(p,s) — extract metadata (not persisted in FieldDef,
|
|
190
|
+
// but can be attached via future meta field; for now, no-op)
|
|
191
|
+
const dbAttr = getDbAttribute(field);
|
|
192
|
+
if (dbAttr) {
|
|
193
|
+
const args = getPositionalArgs(dbAttr);
|
|
194
|
+
const meta = extractDbMetadata(dbAttr.name, args);
|
|
195
|
+
// TODO: persist meta if EntitySchema ever supports it
|
|
196
|
+
void meta;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// ============================================================
|
|
200
|
+
// Field -> RelationDef
|
|
201
|
+
// ============================================================
|
|
202
|
+
fieldToRelation(field, entityName, opts) {
|
|
203
|
+
const target = getFieldTypeName(field);
|
|
204
|
+
const isArray = !!field.array;
|
|
205
|
+
const isOptional = !!field.optional;
|
|
206
|
+
// Determine relation type :
|
|
207
|
+
// - field: Target[] -> one-to-many (or many-to-many, resolved in second pass)
|
|
208
|
+
// - field: Target -> many-to-one (child side of 1-N, or owning side of 1-1)
|
|
209
|
+
// - field: Target? -> one-to-one (nullable back-reference)
|
|
210
|
+
let type;
|
|
211
|
+
if (isArray) {
|
|
212
|
+
type = 'one-to-many'; // may be upgraded to 'many-to-many' in second pass
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
// Check if there's a @relation with fields: — indicates owning side of 1-N or 1-1
|
|
216
|
+
type = 'many-to-one';
|
|
217
|
+
}
|
|
218
|
+
const rel = {
|
|
219
|
+
target,
|
|
220
|
+
type,
|
|
221
|
+
};
|
|
222
|
+
if (!isOptional && !isArray)
|
|
223
|
+
rel.required = true;
|
|
224
|
+
if (isOptional && !isArray)
|
|
225
|
+
rel.nullable = true;
|
|
226
|
+
// Parse @relation(...)
|
|
227
|
+
const relAttr = getFieldAttribute(field, 'relation');
|
|
228
|
+
if (relAttr) {
|
|
229
|
+
const fieldsList = getKeyValueArg(relAttr, 'fields');
|
|
230
|
+
const referencesList = getKeyValueArg(relAttr, 'references');
|
|
231
|
+
const onDelete = getKeyValueArg(relAttr, 'onDelete');
|
|
232
|
+
const nameArg = getPositionalArgs(relAttr)[0];
|
|
233
|
+
if (Array.isArray(fieldsList) && fieldsList.length > 0) {
|
|
234
|
+
rel.joinColumn = String(fieldsList[0]);
|
|
235
|
+
}
|
|
236
|
+
if (Array.isArray(referencesList) && referencesList.length > 0) {
|
|
237
|
+
// references[0] = PK of target; usually 'id'. We keep for reverse-engineering.
|
|
238
|
+
}
|
|
239
|
+
if (typeof onDelete === 'string') {
|
|
240
|
+
rel.onDelete = this.mapReferentialAction(onDelete, field.name, entityName, opts);
|
|
241
|
+
}
|
|
242
|
+
if (typeof nameArg === 'string') {
|
|
243
|
+
rel.mappedBy = this.unquote(nameArg); // self-relation disambiguation name
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return rel;
|
|
247
|
+
}
|
|
248
|
+
mapReferentialAction(action, fieldName, entityName, opts) {
|
|
249
|
+
switch (action) {
|
|
250
|
+
case 'Cascade': return 'cascade';
|
|
251
|
+
case 'SetNull': return 'set-null';
|
|
252
|
+
case 'Restrict': return 'restrict';
|
|
253
|
+
case 'NoAction': return 'no-action';
|
|
254
|
+
case 'SetDefault':
|
|
255
|
+
this.warn(opts, {
|
|
256
|
+
code: WarningCode.UNSUPPORTED_FEATURE,
|
|
257
|
+
message: `onDelete: SetDefault on "${fieldName}" not portable; using set-null`,
|
|
258
|
+
entity: entityName,
|
|
259
|
+
field: fieldName,
|
|
260
|
+
});
|
|
261
|
+
return 'set-null';
|
|
262
|
+
default:
|
|
263
|
+
return 'no-action';
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// ============================================================
|
|
267
|
+
// Block-level attributes (@@id, @@unique, @@index, @@map, @@schema)
|
|
268
|
+
// ============================================================
|
|
269
|
+
applyBlockAttribute(attr, entity, opts) {
|
|
270
|
+
switch (attr.name) {
|
|
271
|
+
case 'id': {
|
|
272
|
+
// @@id([a, b]) — composite primary key. EntitySchema has no composite PK,
|
|
273
|
+
// so we emit as composite unique index.
|
|
274
|
+
const fields = getPositionalArgs(attr)[0];
|
|
275
|
+
if (Array.isArray(fields)) {
|
|
276
|
+
const index = {
|
|
277
|
+
fields: Object.fromEntries(fields.map(f => [String(f), 'asc'])),
|
|
278
|
+
unique: true,
|
|
279
|
+
};
|
|
280
|
+
entity.indexes.push(index);
|
|
281
|
+
this.warn(opts, {
|
|
282
|
+
code: WarningCode.LOSSY_CONVERSION,
|
|
283
|
+
message: `@@id composite PK on ${entity.name} mapped to unique index; implicit _id still expected`,
|
|
284
|
+
entity: entity.name,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
case 'unique': {
|
|
290
|
+
const fields = getPositionalArgs(attr)[0];
|
|
291
|
+
if (Array.isArray(fields)) {
|
|
292
|
+
entity.indexes.push({
|
|
293
|
+
fields: Object.fromEntries(fields.map(f => [String(f), 'asc'])),
|
|
294
|
+
unique: true,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
case 'index': {
|
|
300
|
+
const fields = getPositionalArgs(attr)[0];
|
|
301
|
+
if (Array.isArray(fields)) {
|
|
302
|
+
entity.indexes.push({
|
|
303
|
+
fields: Object.fromEntries(fields.map(f => [String(f), 'asc'])),
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
case 'map':
|
|
309
|
+
// Already handled in resolveTableName
|
|
310
|
+
break;
|
|
311
|
+
case 'schema':
|
|
312
|
+
this.warn(opts, {
|
|
313
|
+
code: WarningCode.PREVIEW_FEATURE,
|
|
314
|
+
message: `@@schema on ${entity.name} (multi-schema preview) not reflected in EntitySchema`,
|
|
315
|
+
entity: entity.name,
|
|
316
|
+
});
|
|
317
|
+
break;
|
|
318
|
+
case 'fulltext':
|
|
319
|
+
this.warn(opts, {
|
|
320
|
+
code: WarningCode.PREVIEW_FEATURE,
|
|
321
|
+
message: `@@fulltext on ${entity.name} mapped to regular index`,
|
|
322
|
+
entity: entity.name,
|
|
323
|
+
});
|
|
324
|
+
break;
|
|
325
|
+
case 'ignore':
|
|
326
|
+
this.warn(opts, {
|
|
327
|
+
code: WarningCode.UNSUPPORTED_FEATURE,
|
|
328
|
+
message: `@@ignore on ${entity.name} not represented in EntitySchema`,
|
|
329
|
+
entity: entity.name,
|
|
330
|
+
});
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// ============================================================
|
|
335
|
+
// Implicit M-N synthesis
|
|
336
|
+
// ============================================================
|
|
337
|
+
/**
|
|
338
|
+
* Prisma allows implicit M-N: `categories Category[]` on both sides with NO join
|
|
339
|
+
* table declared. The adapter detects these and upgrades one-to-many pairs to
|
|
340
|
+
* many-to-many, synthesizing `through` as `_${A}To${B}` (Prisma's convention).
|
|
341
|
+
*/
|
|
342
|
+
synthesizeImplicitM2M(entities, models, modelNames, opts) {
|
|
343
|
+
// For each pair of DISTINCT models where both sides reference each other with []
|
|
344
|
+
// and neither side has a joinColumn (fields:), upgrade to many-to-many.
|
|
345
|
+
for (const entity of entities) {
|
|
346
|
+
for (const [relName, rel] of Object.entries(entity.relations)) {
|
|
347
|
+
if (rel.type !== 'one-to-many')
|
|
348
|
+
continue;
|
|
349
|
+
// Skip self-relations — they are 1-N hierarchies (parent/children), not M-N
|
|
350
|
+
if (rel.target === entity.name)
|
|
351
|
+
continue;
|
|
352
|
+
const otherEntity = entities.find(e => e.name === rel.target);
|
|
353
|
+
if (!otherEntity)
|
|
354
|
+
continue;
|
|
355
|
+
// Find the reverse relation on the other side
|
|
356
|
+
const reverseRel = Object.values(otherEntity.relations).find(r => r.target === entity.name && r.type === 'one-to-many');
|
|
357
|
+
if (!reverseRel)
|
|
358
|
+
continue;
|
|
359
|
+
// If neither side has a joinColumn (fields:), it's implicit M-N
|
|
360
|
+
if (!rel.joinColumn && !reverseRel.joinColumn) {
|
|
361
|
+
rel.type = 'many-to-many';
|
|
362
|
+
reverseRel.type = 'many-to-many';
|
|
363
|
+
// Prisma convention : table name is `_${A}To${B}` sorted alphabetically
|
|
364
|
+
const [a, b] = [entity.name, otherEntity.name].sort();
|
|
365
|
+
const throughName = `_${a}To${b}`;
|
|
366
|
+
rel.through = throughName;
|
|
367
|
+
reverseRel.through = throughName;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// ============================================================
|
|
373
|
+
// Utilities
|
|
374
|
+
// ============================================================
|
|
375
|
+
hasTimestampsConvention(fields) {
|
|
376
|
+
const names = new Set(fields.map(f => f.name));
|
|
377
|
+
return names.has('createdAt') && names.has('updatedAt');
|
|
378
|
+
}
|
|
379
|
+
unquote(s) {
|
|
380
|
+
if (s.startsWith('"') && s.endsWith('"'))
|
|
381
|
+
return s.slice(1, -1);
|
|
382
|
+
return s;
|
|
383
|
+
}
|
|
384
|
+
detectPreviewFeatures(source, opts) {
|
|
385
|
+
const previews = [
|
|
386
|
+
{ pattern: /\bview\s+\w+\s*\{/i, name: 'views' },
|
|
387
|
+
{ pattern: /\btype\s+\w+\s*\{/i, name: 'composite types (Mongo)' },
|
|
388
|
+
{ pattern: /previewFeatures\s*=/i, name: 'generator previewFeatures' },
|
|
389
|
+
];
|
|
390
|
+
for (const { pattern, name } of previews) {
|
|
391
|
+
if (pattern.test(source)) {
|
|
392
|
+
this.warn(opts, {
|
|
393
|
+
code: WarningCode.PREVIEW_FEATURE,
|
|
394
|
+
message: `Detected use of ${name}; MVP may not fully support this`,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=prisma.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma.adapter.js","sourceRoot":"","sources":["../../src/adapters/prisma.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { EntitySchema, FieldDef } from '@mostajs/orm';
|
|
2
|
+
import type { IAdapter, AdapterOptions, AdapterWarning } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* AbstractAdapter provides shared logic for all adapters:
|
|
5
|
+
* - warning emission (strict vs callback mode)
|
|
6
|
+
* - case conversion (pascal / camel / snake)
|
|
7
|
+
* - EntitySchema validation
|
|
8
|
+
* - empty-entity factory
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class AbstractAdapter implements IAdapter {
|
|
11
|
+
abstract readonly name: string;
|
|
12
|
+
abstract readonly vendor: string;
|
|
13
|
+
readonly version: string;
|
|
14
|
+
abstract canParse(input: string | object): boolean;
|
|
15
|
+
abstract toEntitySchema(input: string | object, opts?: AdapterOptions): Promise<EntitySchema[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Emit a warning. In strict mode, throws; otherwise calls onWarning callback.
|
|
18
|
+
*/
|
|
19
|
+
protected warn(opts: AdapterOptions | undefined, warning: AdapterWarning): void;
|
|
20
|
+
/** Convert to snake_case (for table/collection names) */
|
|
21
|
+
protected snakeCase(str: string): string;
|
|
22
|
+
/** Convert to PascalCase (for entity names) */
|
|
23
|
+
protected pascalCase(str: string): string;
|
|
24
|
+
/** Convert to camelCase (for field names) */
|
|
25
|
+
protected camelCase(str: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Create an empty EntitySchema with sensible defaults.
|
|
28
|
+
* Use as starting point when building a schema from source.
|
|
29
|
+
*/
|
|
30
|
+
protected createEmptyEntity(name: string, collection?: string): EntitySchema;
|
|
31
|
+
/**
|
|
32
|
+
* Validate an EntitySchema structure.
|
|
33
|
+
* Returns array of error messages (empty array = valid).
|
|
34
|
+
*/
|
|
35
|
+
protected validateEntitySchema(schema: EntitySchema): string[];
|
|
36
|
+
/** Validate a single FieldDef */
|
|
37
|
+
protected validateFieldDef(key: string, field: FieldDef): string[];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=abstract.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract.adapter.d.ts","sourceRoot":"","sources":["../../src/core/abstract.adapter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAa,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG3E;;;;;;GAMG;AACH,8BAAsB,eAAgB,YAAW,QAAQ;IACvD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAW;IAEnC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAClD,QAAQ,CAAC,cAAc,CACrB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,YAAY,EAAE,CAAC;IAM1B;;OAEG;IACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAW/E,yDAAyD;IACzD,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAQxC,+CAA+C;IAC/C,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAOzC,6CAA6C;IAC7C,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASxC;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY;IAW5E;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE;IAgD9D,iCAAiC;IACjC,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE;CAanE"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// @mostajs/orm-adapter — AbstractAdapter
|
|
2
|
+
// Base class providing common helpers for all adapter implementations.
|
|
3
|
+
// Inspired by AbstractSqlDialect in @mostajs/orm.
|
|
4
|
+
// Author: Dr Hamid MADANI drmdh@msn.com
|
|
5
|
+
// License: AGPL-3.0-or-later
|
|
6
|
+
import { StrictWarningError } from './errors.js';
|
|
7
|
+
/**
|
|
8
|
+
* AbstractAdapter provides shared logic for all adapters:
|
|
9
|
+
* - warning emission (strict vs callback mode)
|
|
10
|
+
* - case conversion (pascal / camel / snake)
|
|
11
|
+
* - EntitySchema validation
|
|
12
|
+
* - empty-entity factory
|
|
13
|
+
*/
|
|
14
|
+
export class AbstractAdapter {
|
|
15
|
+
version = '0.1.0';
|
|
16
|
+
// ============================================================
|
|
17
|
+
// Warning helpers
|
|
18
|
+
// ============================================================
|
|
19
|
+
/**
|
|
20
|
+
* Emit a warning. In strict mode, throws; otherwise calls onWarning callback.
|
|
21
|
+
*/
|
|
22
|
+
warn(opts, warning) {
|
|
23
|
+
if (opts?.strict) {
|
|
24
|
+
throw new StrictWarningError(warning);
|
|
25
|
+
}
|
|
26
|
+
opts?.onWarning?.(warning);
|
|
27
|
+
}
|
|
28
|
+
// ============================================================
|
|
29
|
+
// Case conversion helpers
|
|
30
|
+
// ============================================================
|
|
31
|
+
/** Convert to snake_case (for table/collection names) */
|
|
32
|
+
snakeCase(str) {
|
|
33
|
+
return str
|
|
34
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1_$2')
|
|
35
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
|
|
36
|
+
.replace(/[\s-]+/g, '_')
|
|
37
|
+
.toLowerCase();
|
|
38
|
+
}
|
|
39
|
+
/** Convert to PascalCase (for entity names) */
|
|
40
|
+
pascalCase(str) {
|
|
41
|
+
return str
|
|
42
|
+
.replace(/[_\s-]+/g, ' ')
|
|
43
|
+
.replace(/\w+/g, w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())
|
|
44
|
+
.replace(/\s+/g, '');
|
|
45
|
+
}
|
|
46
|
+
/** Convert to camelCase (for field names) */
|
|
47
|
+
camelCase(str) {
|
|
48
|
+
const p = this.pascalCase(str);
|
|
49
|
+
return p.charAt(0).toLowerCase() + p.slice(1);
|
|
50
|
+
}
|
|
51
|
+
// ============================================================
|
|
52
|
+
// Schema helpers
|
|
53
|
+
// ============================================================
|
|
54
|
+
/**
|
|
55
|
+
* Create an empty EntitySchema with sensible defaults.
|
|
56
|
+
* Use as starting point when building a schema from source.
|
|
57
|
+
*/
|
|
58
|
+
createEmptyEntity(name, collection) {
|
|
59
|
+
return {
|
|
60
|
+
name: this.pascalCase(name),
|
|
61
|
+
collection: collection ?? this.snakeCase(name) + 's',
|
|
62
|
+
fields: {},
|
|
63
|
+
relations: {},
|
|
64
|
+
indexes: [],
|
|
65
|
+
timestamps: false,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate an EntitySchema structure.
|
|
70
|
+
* Returns array of error messages (empty array = valid).
|
|
71
|
+
*/
|
|
72
|
+
validateEntitySchema(schema) {
|
|
73
|
+
const errors = [];
|
|
74
|
+
if (!schema.name || typeof schema.name !== 'string') {
|
|
75
|
+
errors.push('name is required and must be a string');
|
|
76
|
+
}
|
|
77
|
+
else if (!/^[A-Z][a-zA-Z0-9]*$/.test(schema.name)) {
|
|
78
|
+
errors.push(`name "${schema.name}" must be PascalCase`);
|
|
79
|
+
}
|
|
80
|
+
if (!schema.collection || typeof schema.collection !== 'string') {
|
|
81
|
+
errors.push('collection is required and must be a string');
|
|
82
|
+
}
|
|
83
|
+
if (!schema.fields || typeof schema.fields !== 'object') {
|
|
84
|
+
errors.push('fields must be an object');
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
for (const [key, field] of Object.entries(schema.fields)) {
|
|
88
|
+
const fieldErrors = this.validateFieldDef(key, field);
|
|
89
|
+
errors.push(...fieldErrors);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (!schema.relations || typeof schema.relations !== 'object') {
|
|
93
|
+
errors.push('relations must be an object');
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
for (const [key, rel] of Object.entries(schema.relations)) {
|
|
97
|
+
if (!rel.target)
|
|
98
|
+
errors.push(`relation "${key}" missing target`);
|
|
99
|
+
if (!['one-to-one', 'many-to-one', 'one-to-many', 'many-to-many'].includes(rel.type)) {
|
|
100
|
+
errors.push(`relation "${key}" has invalid type: ${rel.type}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (!Array.isArray(schema.indexes)) {
|
|
105
|
+
errors.push('indexes must be an array');
|
|
106
|
+
}
|
|
107
|
+
if (typeof schema.timestamps !== 'boolean') {
|
|
108
|
+
errors.push('timestamps must be a boolean');
|
|
109
|
+
}
|
|
110
|
+
if (schema.discriminator && !schema.discriminatorValue) {
|
|
111
|
+
errors.push('discriminator requires discriminatorValue');
|
|
112
|
+
}
|
|
113
|
+
return errors;
|
|
114
|
+
}
|
|
115
|
+
/** Validate a single FieldDef */
|
|
116
|
+
validateFieldDef(key, field) {
|
|
117
|
+
const errors = [];
|
|
118
|
+
const validTypes = [
|
|
119
|
+
'string', 'text', 'number', 'boolean', 'date', 'json', 'array',
|
|
120
|
+
];
|
|
121
|
+
if (!validTypes.includes(field.type)) {
|
|
122
|
+
errors.push(`field "${key}" has invalid type: ${field.type}`);
|
|
123
|
+
}
|
|
124
|
+
if (field.type === 'array' && !field.arrayOf) {
|
|
125
|
+
errors.push(`field "${key}" is array but arrayOf is missing`);
|
|
126
|
+
}
|
|
127
|
+
return errors;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=abstract.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract.adapter.js","sourceRoot":"","sources":["../../src/core/abstract.adapter.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,uEAAuE;AACvE,kDAAkD;AAClD,wCAAwC;AACxC,6BAA6B;AAI7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,OAAgB,eAAe;IAG1B,OAAO,GAAW,OAAO,CAAC;IAQnC,+DAA+D;IAC/D,kBAAkB;IAClB,+DAA+D;IAE/D;;OAEG;IACO,IAAI,CAAC,IAAgC,EAAE,OAAuB;QACtE,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,+DAA+D;IAC/D,0BAA0B;IAC1B,+DAA+D;IAE/D,yDAAyD;IAC/C,SAAS,CAAC,GAAW;QAC7B,OAAO,GAAG;aACP,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;aACtC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;aACzC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;aACvB,WAAW,EAAE,CAAC;IACnB,CAAC;IAED,+CAA+C;IACrC,UAAU,CAAC,GAAW;QAC9B,OAAO,GAAG;aACP,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;aACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAC1E,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,6CAA6C;IACnC,SAAS,CAAC,GAAW;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,+DAA+D;IAC/D,iBAAiB;IACjB,+DAA+D;IAE/D;;;OAGG;IACO,iBAAiB,CAAC,IAAY,EAAE,UAAmB;QAC3D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAC3B,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG;YACpD,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACO,oBAAoB,CAAC,MAAoB;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,GAAG,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC,CAAC;gBACjE,IAAI,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrF,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,uBAAuB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iCAAiC;IACvB,gBAAgB,CAAC,GAAW,EAAE,KAAe;QACrD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAgB;YAC9B,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;SAC/D,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,uBAAuB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,mCAAmC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AdapterWarning } from './types.js';
|
|
2
|
+
/** Base error class for all adapter-related errors */
|
|
3
|
+
export declare class AdapterError extends Error {
|
|
4
|
+
readonly code: string;
|
|
5
|
+
constructor(message: string, code?: string);
|
|
6
|
+
}
|
|
7
|
+
/** Thrown when an input cannot be parsed by any registered adapter */
|
|
8
|
+
export declare class NoAdapterFoundError extends AdapterError {
|
|
9
|
+
constructor(message?: string);
|
|
10
|
+
}
|
|
11
|
+
/** Thrown when input is malformed or violates its own schema */
|
|
12
|
+
export declare class InvalidSchemaError extends AdapterError {
|
|
13
|
+
readonly details?: unknown | undefined;
|
|
14
|
+
constructor(message: string, details?: unknown | undefined);
|
|
15
|
+
}
|
|
16
|
+
/** Thrown in strict mode when an unsupported feature is encountered */
|
|
17
|
+
export declare class StrictWarningError extends AdapterError {
|
|
18
|
+
readonly warning: AdapterWarning;
|
|
19
|
+
constructor(warning: AdapterWarning);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,sDAAsD;AACtD,qBAAa,YAAa,SAAQ,KAAK;aACQ,IAAI,EAAE,MAAM;gBAA7C,OAAO,EAAE,MAAM,EAAkB,IAAI,GAAE,MAAwB;CAI5E;AAED,sEAAsE;AACtE,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,SAAyC;CAI7D;AAED,gEAAgE;AAChE,qBAAa,kBAAmB,SAAQ,YAAY;aACL,OAAO,CAAC,EAAE,OAAO;gBAAlD,OAAO,EAAE,MAAM,EAAkB,OAAO,CAAC,EAAE,OAAO,YAAA;CAI/D;AAED,uEAAuE;AACvE,qBAAa,kBAAmB,SAAQ,YAAY;aACtB,OAAO,EAAE,cAAc;gBAAvB,OAAO,EAAE,cAAc;CAIpD"}
|