ormbridge 0.0.0-stage → 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/LICENSE +21 -0
- package/README.md +408 -2
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -0
- package/dist/cliRunner.d.ts +20 -0
- package/dist/cliRunner.js +343 -0
- package/dist/cliRunner.js.map +1 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.js +204 -0
- package/dist/config.js.map +1 -0
- package/dist/convert.d.ts +20 -0
- package/dist/convert.js +61 -0
- package/dist/convert.js.map +1 -0
- package/dist/emitters/django.d.ts +4 -0
- package/dist/emitters/django.js +501 -0
- package/dist/emitters/django.js.map +1 -0
- package/dist/emitters/doctrine.d.ts +20 -0
- package/dist/emitters/doctrine.js +1134 -0
- package/dist/emitters/doctrine.js.map +1 -0
- package/dist/emitters/graphene.d.ts +4 -0
- package/dist/emitters/graphene.js +431 -0
- package/dist/emitters/graphene.js.map +1 -0
- package/dist/emitters/laravel.d.ts +33 -0
- package/dist/emitters/laravel.js +1695 -0
- package/dist/emitters/laravel.js.map +1 -0
- package/dist/emitters/prisma.d.ts +21 -0
- package/dist/emitters/prisma.js +1058 -0
- package/dist/emitters/prisma.js.map +1 -0
- package/dist/emitters/typeorm.d.ts +9 -0
- package/dist/emitters/typeorm.js +833 -0
- package/dist/emitters/typeorm.js.map +1 -0
- package/dist/emitters/typescriptInterfaces.d.ts +15 -0
- package/dist/emitters/typescriptInterfaces.js +350 -0
- package/dist/emitters/typescriptInterfaces.js.map +1 -0
- package/dist/formats.d.ts +80 -0
- package/dist/formats.js +212 -0
- package/dist/formats.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/io.d.ts +48 -0
- package/dist/io.js +328 -0
- package/dist/io.js.map +1 -0
- package/dist/ir.d.ts +197 -0
- package/dist/ir.js +10 -0
- package/dist/ir.js.map +1 -0
- package/dist/naming.d.ts +11 -0
- package/dist/naming.js +88 -0
- package/dist/naming.js.map +1 -0
- package/dist/parsers/django.d.ts +14 -0
- package/dist/parsers/django.js +1161 -0
- package/dist/parsers/django.js.map +1 -0
- package/dist/parsers/doctrine.d.ts +12 -0
- package/dist/parsers/doctrine.js +1782 -0
- package/dist/parsers/doctrine.js.map +1 -0
- package/dist/parsers/laravel.d.ts +17 -0
- package/dist/parsers/laravel.js +2824 -0
- package/dist/parsers/laravel.js.map +1 -0
- package/dist/parsers/phpSyntax.d.ts +124 -0
- package/dist/parsers/phpSyntax.js +429 -0
- package/dist/parsers/phpSyntax.js.map +1 -0
- package/dist/parsers/prisma.d.ts +12 -0
- package/dist/parsers/prisma.js +964 -0
- package/dist/parsers/prisma.js.map +1 -0
- package/dist/parsers/pythonSyntax.d.ts +38 -0
- package/dist/parsers/pythonSyntax.js +120 -0
- package/dist/parsers/pythonSyntax.js.map +1 -0
- package/dist/parsers/typeorm.d.ts +12 -0
- package/dist/parsers/typeorm.js +1614 -0
- package/dist/parsers/typeorm.js.map +1 -0
- package/dist/parsers/typescriptSyntax.d.ts +57 -0
- package/dist/parsers/typescriptSyntax.js +200 -0
- package/dist/parsers/typescriptSyntax.js.map +1 -0
- package/dist/prismaOnlyConstructs.d.ts +7 -0
- package/dist/prismaOnlyConstructs.js +76 -0
- package/dist/prismaOnlyConstructs.js.map +1 -0
- package/dist/result.d.ts +20 -0
- package/dist/result.js +18 -0
- package/dist/result.js.map +1 -0
- package/dist/transforms.d.ts +13 -0
- package/dist/transforms.js +142 -0
- package/dist/transforms.js.map +1 -0
- package/package.json +83 -4
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import Parser from 'web-tree-sitter';
|
|
3
|
+
import { describeThrown, err, ok } from '../result.js';
|
|
4
|
+
let cachedParser;
|
|
5
|
+
/** Lazily loads the tree-sitter PHP grammar (WebAssembly, no native build step). */
|
|
6
|
+
export async function getPhpParser() {
|
|
7
|
+
if (cachedParser !== undefined) {
|
|
8
|
+
return ok(cachedParser);
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const requireFromHere = createRequire(import.meta.url);
|
|
12
|
+
const wasmPath = requireFromHere.resolve('tree-sitter-wasms/out/tree-sitter-php.wasm');
|
|
13
|
+
await Parser.init();
|
|
14
|
+
const phpLanguage = await Parser.Language.load(wasmPath);
|
|
15
|
+
const parser = new Parser();
|
|
16
|
+
parser.setLanguage(phpLanguage);
|
|
17
|
+
cachedParser = parser;
|
|
18
|
+
return ok(parser);
|
|
19
|
+
}
|
|
20
|
+
catch (thrown) {
|
|
21
|
+
return err('PARSER_INIT_FAILED', `Failed to initialize the tree-sitter PHP grammar. Check that the "web-tree-sitter" (0.22.x) and ` +
|
|
22
|
+
`"tree-sitter-wasms" packages are installed. Underlying error: ${describeThrown(thrown)}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** The last segment of a backslash-separated PHP name: `App\Entity\Post` becomes `Post`. */
|
|
26
|
+
export function lastNameSegment(phpName) {
|
|
27
|
+
const segments = phpName.split('\\');
|
|
28
|
+
return segments[segments.length - 1] ?? phpName;
|
|
29
|
+
}
|
|
30
|
+
/** Removes whitespace inside a name node, for example a name split over several lines. */
|
|
31
|
+
function compactName(text) {
|
|
32
|
+
return text.replace(/\s+/g, '');
|
|
33
|
+
}
|
|
34
|
+
function unquoteSingle(body) {
|
|
35
|
+
return body.replace(/\\([\\'])/g, '$1');
|
|
36
|
+
}
|
|
37
|
+
function unquoteDouble(body) {
|
|
38
|
+
return body.replace(/\\(n|t|r|\\|"|\$)/g, (_whole, escaped) => {
|
|
39
|
+
switch (escaped) {
|
|
40
|
+
case 'n':
|
|
41
|
+
return '\n';
|
|
42
|
+
case 't':
|
|
43
|
+
return '\t';
|
|
44
|
+
case 'r':
|
|
45
|
+
return '\r';
|
|
46
|
+
default:
|
|
47
|
+
return escaped;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/** Evaluates a tree-sitter expression node into the supported PhpValue subset. */
|
|
52
|
+
export function evaluateNode(node) {
|
|
53
|
+
switch (node.type) {
|
|
54
|
+
case 'string':
|
|
55
|
+
return { kind: 'string', value: unquoteSingle(node.text.slice(1, -1)) };
|
|
56
|
+
case 'encapsed_string': {
|
|
57
|
+
// Interpolated strings (variables, expressions) cannot be evaluated statically.
|
|
58
|
+
const isPlain = node.namedChildren.every((child) => child.type === 'string_content' || child.type === 'escape_sequence');
|
|
59
|
+
return isPlain
|
|
60
|
+
? { kind: 'string', value: unquoteDouble(node.text.slice(1, -1)) }
|
|
61
|
+
: { kind: 'other', text: node.text };
|
|
62
|
+
}
|
|
63
|
+
case 'integer': {
|
|
64
|
+
const parsed = Number(node.text.replace(/_/g, ''));
|
|
65
|
+
return Number.isNaN(parsed)
|
|
66
|
+
? { kind: 'other', text: node.text }
|
|
67
|
+
: { kind: 'number', value: parsed };
|
|
68
|
+
}
|
|
69
|
+
case 'float': {
|
|
70
|
+
const parsed = Number(node.text.replace(/_/g, ''));
|
|
71
|
+
return Number.isNaN(parsed)
|
|
72
|
+
? { kind: 'other', text: node.text }
|
|
73
|
+
: { kind: 'number', value: parsed };
|
|
74
|
+
}
|
|
75
|
+
case 'boolean':
|
|
76
|
+
return { kind: 'bool', value: node.text.toLowerCase() === 'true' };
|
|
77
|
+
case 'null':
|
|
78
|
+
return { kind: 'null' };
|
|
79
|
+
case 'name':
|
|
80
|
+
case 'qualified_name':
|
|
81
|
+
case 'relative_name': {
|
|
82
|
+
const text = compactName(node.text);
|
|
83
|
+
const lowered = text.toLowerCase();
|
|
84
|
+
if (lowered === 'true' || lowered === 'false') {
|
|
85
|
+
return { kind: 'bool', value: lowered === 'true' };
|
|
86
|
+
}
|
|
87
|
+
if (lowered === 'null') {
|
|
88
|
+
return { kind: 'null' };
|
|
89
|
+
}
|
|
90
|
+
return { kind: 'name', value: text };
|
|
91
|
+
}
|
|
92
|
+
case 'array_creation_expression':
|
|
93
|
+
return evaluateArray(node);
|
|
94
|
+
case 'class_constant_access_expression':
|
|
95
|
+
return evaluateConstantAccess(node);
|
|
96
|
+
case 'parenthesized_expression': {
|
|
97
|
+
const inner = node.namedChildren[0];
|
|
98
|
+
return inner === undefined
|
|
99
|
+
? { kind: 'other', text: node.text }
|
|
100
|
+
: evaluateNode(inner);
|
|
101
|
+
}
|
|
102
|
+
case 'unary_op_expression': {
|
|
103
|
+
const operand = node.childForFieldName('argument');
|
|
104
|
+
const operator = node.text.trim().charAt(0);
|
|
105
|
+
if (operand !== null && (operator === '-' || operator === '+')) {
|
|
106
|
+
const value = evaluateNode(operand);
|
|
107
|
+
if (value.kind === 'number') {
|
|
108
|
+
return {
|
|
109
|
+
kind: 'number',
|
|
110
|
+
value: operator === '-' ? -value.value : value.value,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { kind: 'other', text: node.text };
|
|
115
|
+
}
|
|
116
|
+
case 'object_creation_expression':
|
|
117
|
+
return evaluateNew(node);
|
|
118
|
+
default:
|
|
119
|
+
return { kind: 'other', text: node.text };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function evaluateArray(node) {
|
|
123
|
+
const items = [];
|
|
124
|
+
for (const element of node.namedChildren) {
|
|
125
|
+
if (element.type !== 'array_element_initializer') {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const parts = element.namedChildren.filter((child) => child.type !== 'comment');
|
|
129
|
+
const first = parts[0];
|
|
130
|
+
const second = parts[1];
|
|
131
|
+
if (first === undefined) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (first.type === 'variadic_unpacking') {
|
|
135
|
+
items.push({ value: { kind: 'other', text: element.text } });
|
|
136
|
+
}
|
|
137
|
+
else if (second === undefined) {
|
|
138
|
+
items.push({ value: evaluateNode(first) });
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
items.push({ key: evaluateNode(first), value: evaluateNode(second) });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return { kind: 'array', items };
|
|
145
|
+
}
|
|
146
|
+
function evaluateConstantAccess(node) {
|
|
147
|
+
const children = node.namedChildren;
|
|
148
|
+
const owner = children[0];
|
|
149
|
+
const member = children[children.length - 1];
|
|
150
|
+
if (owner === undefined || member === undefined || owner === member) {
|
|
151
|
+
return { kind: 'other', text: node.text };
|
|
152
|
+
}
|
|
153
|
+
const ownerName = compactName(owner.text);
|
|
154
|
+
const memberName = compactName(member.text);
|
|
155
|
+
if (memberName.toLowerCase() === 'class') {
|
|
156
|
+
return { kind: 'classRef', name: ownerName };
|
|
157
|
+
}
|
|
158
|
+
return { kind: 'constant', owner: ownerName, name: memberName };
|
|
159
|
+
}
|
|
160
|
+
/** Lists the arguments of a call-like node without evaluating them. */
|
|
161
|
+
export function argumentNodes(argumentsNode) {
|
|
162
|
+
const found = [];
|
|
163
|
+
if (argumentsNode === null) {
|
|
164
|
+
return found;
|
|
165
|
+
}
|
|
166
|
+
for (const argument of argumentsNode.namedChildren) {
|
|
167
|
+
if (argument.type !== 'argument') {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const nameNode = argument.childForFieldName('name');
|
|
171
|
+
const valueNode = argument.namedChildren.find((child) => child.id !== nameNode?.id && child.type !== 'comment');
|
|
172
|
+
if (valueNode !== undefined) {
|
|
173
|
+
found.push(nameNode === null
|
|
174
|
+
? { node: valueNode }
|
|
175
|
+
: { name: nameNode.text, node: valueNode });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return found;
|
|
179
|
+
}
|
|
180
|
+
/** Reads the arguments of a call-like node into positional and named values. */
|
|
181
|
+
export function evaluateArguments(argumentsNode) {
|
|
182
|
+
const args = [];
|
|
183
|
+
const named = {};
|
|
184
|
+
if (argumentsNode === null) {
|
|
185
|
+
return { args, named };
|
|
186
|
+
}
|
|
187
|
+
for (const argument of argumentsNode.namedChildren) {
|
|
188
|
+
if (argument.type !== 'argument') {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const nameNode = argument.childForFieldName('name');
|
|
192
|
+
const valueNode = argument.namedChildren.find((child) => child.id !== nameNode?.id && child.type !== 'comment');
|
|
193
|
+
if (valueNode === undefined) {
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
const value = evaluateNode(valueNode);
|
|
197
|
+
if (nameNode === null) {
|
|
198
|
+
args.push(value);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
named[nameNode.text] = value;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return { args, named };
|
|
205
|
+
}
|
|
206
|
+
function evaluateNew(node) {
|
|
207
|
+
const nameNode = node.namedChildren.find((child) => child.type === 'name' ||
|
|
208
|
+
child.type === 'qualified_name' ||
|
|
209
|
+
child.type === 'relative_name');
|
|
210
|
+
const argumentsNode = node.namedChildren.find((child) => child.type === 'arguments');
|
|
211
|
+
if (nameNode === undefined) {
|
|
212
|
+
return { kind: 'other', text: node.text };
|
|
213
|
+
}
|
|
214
|
+
const { args, named } = evaluateArguments(argumentsNode ?? null);
|
|
215
|
+
return { kind: 'new', className: compactName(nameNode.text), args, named };
|
|
216
|
+
}
|
|
217
|
+
/** Reads every attribute that applies to a class, class member or promoted constructor parameter. */
|
|
218
|
+
export function attributesOf(node) {
|
|
219
|
+
const attributes = [];
|
|
220
|
+
const list = node.childForFieldName('attributes');
|
|
221
|
+
if (list === null) {
|
|
222
|
+
return attributes;
|
|
223
|
+
}
|
|
224
|
+
for (const group of list.namedChildren) {
|
|
225
|
+
if (group.type !== 'attribute_group') {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
for (const attribute of group.namedChildren) {
|
|
229
|
+
if (attribute.type !== 'attribute') {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
const nameNode = attribute.namedChildren.find((child) => child.type === 'name' ||
|
|
233
|
+
child.type === 'qualified_name' ||
|
|
234
|
+
child.type === 'relative_name');
|
|
235
|
+
if (nameNode === undefined) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const { args, named } = evaluateArguments(attribute.childForFieldName('parameters'));
|
|
239
|
+
attributes.push({ rawName: compactName(nameNode.text), args, named });
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return attributes;
|
|
243
|
+
}
|
|
244
|
+
/** Reads the declared type of a property or promoted parameter, or undefined when untyped. */
|
|
245
|
+
export function typeOf(node) {
|
|
246
|
+
const typeNode = node.childForFieldName('type');
|
|
247
|
+
if (typeNode === null) {
|
|
248
|
+
return undefined;
|
|
249
|
+
}
|
|
250
|
+
const text = compactName(typeNode.text);
|
|
251
|
+
let body = text;
|
|
252
|
+
let nullable = false;
|
|
253
|
+
if (body.startsWith('?')) {
|
|
254
|
+
nullable = true;
|
|
255
|
+
body = body.slice(1);
|
|
256
|
+
}
|
|
257
|
+
const names = [];
|
|
258
|
+
for (const part of body.split('|')) {
|
|
259
|
+
const stripped = part.replace(/^\(|\)$/g, '');
|
|
260
|
+
if (stripped.toLowerCase() === 'null') {
|
|
261
|
+
nullable = true;
|
|
262
|
+
}
|
|
263
|
+
else if (stripped !== '') {
|
|
264
|
+
names.push(stripped);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return { names, nullable, text };
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Finds the class, trait and enum declarations of a file together with the
|
|
271
|
+
* namespace and imports in force at each. With `includeAnonymousClasses`, a
|
|
272
|
+
* returned anonymous class (`return new class ... { }`) is reported too, as
|
|
273
|
+
* its `object_creation_expression` node.
|
|
274
|
+
*/
|
|
275
|
+
export function collectDeclarations(root, filePath, includeAnonymousClasses = false) {
|
|
276
|
+
const declarations = [];
|
|
277
|
+
const walk = (nodes, initial) => {
|
|
278
|
+
let current = initial;
|
|
279
|
+
for (const node of nodes) {
|
|
280
|
+
switch (node.type) {
|
|
281
|
+
case 'namespace_definition': {
|
|
282
|
+
const nameNode = node.childForFieldName('name');
|
|
283
|
+
const scope = {
|
|
284
|
+
path: filePath,
|
|
285
|
+
namespace: (nameNode?.text ?? '').replace(/\s+/g, ''),
|
|
286
|
+
uses: new Map(),
|
|
287
|
+
};
|
|
288
|
+
const body = node.childForFieldName('body');
|
|
289
|
+
if (body !== null) {
|
|
290
|
+
walk(body.namedChildren, scope);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
current = scope;
|
|
294
|
+
}
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
case 'namespace_use_declaration':
|
|
298
|
+
addUses(node, current);
|
|
299
|
+
break;
|
|
300
|
+
case 'class_declaration':
|
|
301
|
+
case 'trait_declaration':
|
|
302
|
+
case 'enum_declaration':
|
|
303
|
+
declarations.push({ ctx: current, node });
|
|
304
|
+
break;
|
|
305
|
+
case 'return_statement': {
|
|
306
|
+
// `return new class extends Migration { ... };` (Laravel migrations).
|
|
307
|
+
const created = node.namedChildren.find((child) => child.type === 'object_creation_expression' &&
|
|
308
|
+
child.namedChildren.some((inner) => inner.type === 'declaration_list'));
|
|
309
|
+
if (includeAnonymousClasses && created !== undefined) {
|
|
310
|
+
declarations.push({ ctx: current, node: created });
|
|
311
|
+
}
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
default:
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
walk(root.namedChildren, { path: filePath, namespace: '', uses: new Map() });
|
|
320
|
+
return declarations;
|
|
321
|
+
}
|
|
322
|
+
function compact(text) {
|
|
323
|
+
return text.replace(/\s+/g, '').replace(/^\\/, '');
|
|
324
|
+
}
|
|
325
|
+
function addUses(declaration, ctx) {
|
|
326
|
+
if (/^use\s+(function|const)\b/i.test(declaration.text)) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
const register = (name, alias) => {
|
|
330
|
+
const fqn = compact(name);
|
|
331
|
+
const aliasName = alias?.namedChildren[0]?.text ?? lastNameSegment(fqn);
|
|
332
|
+
ctx.uses.set(aliasName.toLowerCase(), fqn);
|
|
333
|
+
};
|
|
334
|
+
const aliasOf = (clause) => clause.namedChildren.find((child) => child.type === 'namespace_aliasing_clause');
|
|
335
|
+
const group = declaration.namedChildren.find((child) => child.type === 'namespace_use_group');
|
|
336
|
+
if (group !== undefined) {
|
|
337
|
+
const prefixNode = declaration.namedChildren.find((child) => child.type === 'namespace_name');
|
|
338
|
+
const prefix = compact(prefixNode?.text ?? '');
|
|
339
|
+
for (const clause of group.namedChildren) {
|
|
340
|
+
const inner = clause.namedChildren.find((child) => child.type !== 'namespace_aliasing_clause');
|
|
341
|
+
if (inner !== undefined) {
|
|
342
|
+
register(`${prefix}\\${compact(inner.text)}`, aliasOf(clause));
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
for (const clause of declaration.namedChildren) {
|
|
348
|
+
if (clause.type !== 'namespace_use_clause') {
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
const nameNode = clause.namedChildren.find((child) => child.type !== 'namespace_aliasing_clause');
|
|
352
|
+
if (nameNode !== undefined) {
|
|
353
|
+
register(nameNode.text, aliasOf(clause));
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/** Resolves a class name as written in a file to its fully qualified name (no leading backslash). */
|
|
358
|
+
export function resolveClassName(raw, ctx) {
|
|
359
|
+
if (raw.startsWith('\\')) {
|
|
360
|
+
return raw.slice(1);
|
|
361
|
+
}
|
|
362
|
+
const segments = raw.split('\\');
|
|
363
|
+
const first = segments[0] ?? raw;
|
|
364
|
+
if (first.toLowerCase() === 'namespace') {
|
|
365
|
+
return [ctx.namespace, ...segments.slice(1)]
|
|
366
|
+
.filter((segment) => segment !== '')
|
|
367
|
+
.join('\\');
|
|
368
|
+
}
|
|
369
|
+
const imported = ctx.uses.get(first.toLowerCase());
|
|
370
|
+
if (imported !== undefined) {
|
|
371
|
+
return [imported, ...segments.slice(1)].join('\\');
|
|
372
|
+
}
|
|
373
|
+
return ctx.namespace === '' ? raw : `${ctx.namespace}\\${raw}`;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Reads a PHP enum declaration. Cases whose value cannot be read statically
|
|
377
|
+
* are reported through `warnings`. Returns undefined for a malformed node.
|
|
378
|
+
*/
|
|
379
|
+
export function readEnumDeclaration(node, ctx, warnings) {
|
|
380
|
+
const nameNode = node.childForFieldName('name');
|
|
381
|
+
const bodyNode = node.childForFieldName('body');
|
|
382
|
+
if (nameNode === null || bodyNode === null) {
|
|
383
|
+
return undefined;
|
|
384
|
+
}
|
|
385
|
+
const name = nameNode.text;
|
|
386
|
+
const fqn = ctx.namespace === '' ? name : `${ctx.namespace}\\${name}`;
|
|
387
|
+
const backingNode = node.namedChildren.find((child) => child.type === 'primitive_type' || child.type === 'named_type');
|
|
388
|
+
const backingText = backingNode?.text.toLowerCase() ?? '';
|
|
389
|
+
const backing = backingText === 'string'
|
|
390
|
+
? 'string'
|
|
391
|
+
: backingText === 'int'
|
|
392
|
+
? 'int'
|
|
393
|
+
: 'none';
|
|
394
|
+
const values = [];
|
|
395
|
+
for (const member of bodyNode.namedChildren) {
|
|
396
|
+
if (member.type !== 'enum_case') {
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
const caseName = member.childForFieldName('name');
|
|
400
|
+
const caseValue = member.childForFieldName('value');
|
|
401
|
+
if (caseName === null) {
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
if (caseValue === null) {
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
const evaluated = evaluateCaseValue(caseValue);
|
|
408
|
+
if (evaluated !== undefined && evaluated.kind === 'string') {
|
|
409
|
+
values.push({ name: caseName.text, dbValue: evaluated.value });
|
|
410
|
+
}
|
|
411
|
+
else if (backing === 'string') {
|
|
412
|
+
warnings.push(`${name}.${caseName.text}: the enum case value "${caseValue.text}" could not be read statically and was skipped.`);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
return { name, fqn, backing, values };
|
|
416
|
+
}
|
|
417
|
+
function evaluateCaseValue(node) {
|
|
418
|
+
if (node.type === 'string') {
|
|
419
|
+
return {
|
|
420
|
+
kind: 'string',
|
|
421
|
+
value: node.text.slice(1, -1).replace(/\\(['\\])/g, '$1'),
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
if (node.type === 'encapsed_string' && node.namedChildren.length <= 1) {
|
|
425
|
+
return { kind: 'string', value: node.text.slice(1, -1) };
|
|
426
|
+
}
|
|
427
|
+
return undefined;
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=phpSyntax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phpSyntax.js","sourceRoot":"","sources":["../../src/parsers/phpSyntax.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IrSchema } from '../ir.js';
|
|
2
|
+
import { type Result } from '../result.js';
|
|
3
|
+
export interface PrismaSourceFile {
|
|
4
|
+
path: string;
|
|
5
|
+
text: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PrismaParseOptions {
|
|
8
|
+
/** Django app label assigned to every parsed model. */
|
|
9
|
+
appLabel: string;
|
|
10
|
+
}
|
|
11
|
+
/** Parses a Prisma schema (hand-written tokenizer, no Prisma engine required) into the shared IR. */
|
|
12
|
+
export declare function parsePrisma(sources: PrismaSourceFile[], options: PrismaParseOptions): Result<IrSchema>;
|