ormbridge 0.0.0-stage → 0.3.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.
Files changed (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +459 -2
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +20 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/cliRunner.d.ts +20 -0
  7. package/dist/cliRunner.js +363 -0
  8. package/dist/cliRunner.js.map +1 -0
  9. package/dist/config.d.ts +44 -0
  10. package/dist/config.js +220 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/convert.d.ts +20 -0
  13. package/dist/convert.js +61 -0
  14. package/dist/convert.js.map +1 -0
  15. package/dist/emitters/django.d.ts +4 -0
  16. package/dist/emitters/django.js +501 -0
  17. package/dist/emitters/django.js.map +1 -0
  18. package/dist/emitters/doctrine.d.ts +20 -0
  19. package/dist/emitters/doctrine.js +1134 -0
  20. package/dist/emitters/doctrine.js.map +1 -0
  21. package/dist/emitters/gorm.d.ts +38 -0
  22. package/dist/emitters/gorm.js +1507 -0
  23. package/dist/emitters/gorm.js.map +1 -0
  24. package/dist/emitters/graphene.d.ts +4 -0
  25. package/dist/emitters/graphene.js +431 -0
  26. package/dist/emitters/graphene.js.map +1 -0
  27. package/dist/emitters/laravel.d.ts +33 -0
  28. package/dist/emitters/laravel.js +1695 -0
  29. package/dist/emitters/laravel.js.map +1 -0
  30. package/dist/emitters/prisma.d.ts +21 -0
  31. package/dist/emitters/prisma.js +1058 -0
  32. package/dist/emitters/prisma.js.map +1 -0
  33. package/dist/emitters/typeorm.d.ts +9 -0
  34. package/dist/emitters/typeorm.js +838 -0
  35. package/dist/emitters/typeorm.js.map +1 -0
  36. package/dist/emitters/typescriptInterfaces.d.ts +15 -0
  37. package/dist/emitters/typescriptInterfaces.js +350 -0
  38. package/dist/emitters/typescriptInterfaces.js.map +1 -0
  39. package/dist/formats.d.ts +82 -0
  40. package/dist/formats.js +238 -0
  41. package/dist/formats.js.map +1 -0
  42. package/dist/index.d.ts +37 -0
  43. package/dist/index.js +20 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/io.d.ts +48 -0
  46. package/dist/io.js +343 -0
  47. package/dist/io.js.map +1 -0
  48. package/dist/ir.d.ts +197 -0
  49. package/dist/ir.js +10 -0
  50. package/dist/ir.js.map +1 -0
  51. package/dist/naming.d.ts +11 -0
  52. package/dist/naming.js +88 -0
  53. package/dist/naming.js.map +1 -0
  54. package/dist/parsers/django.d.ts +14 -0
  55. package/dist/parsers/django.js +1161 -0
  56. package/dist/parsers/django.js.map +1 -0
  57. package/dist/parsers/doctrine.d.ts +12 -0
  58. package/dist/parsers/doctrine.js +1984 -0
  59. package/dist/parsers/doctrine.js.map +1 -0
  60. package/dist/parsers/goSyntax.d.ts +105 -0
  61. package/dist/parsers/goSyntax.js +435 -0
  62. package/dist/parsers/goSyntax.js.map +1 -0
  63. package/dist/parsers/gorm.d.ts +16 -0
  64. package/dist/parsers/gorm.js +1857 -0
  65. package/dist/parsers/gorm.js.map +1 -0
  66. package/dist/parsers/laravel.d.ts +17 -0
  67. package/dist/parsers/laravel.js +2824 -0
  68. package/dist/parsers/laravel.js.map +1 -0
  69. package/dist/parsers/phpSyntax.d.ts +124 -0
  70. package/dist/parsers/phpSyntax.js +429 -0
  71. package/dist/parsers/phpSyntax.js.map +1 -0
  72. package/dist/parsers/prisma.d.ts +12 -0
  73. package/dist/parsers/prisma.js +964 -0
  74. package/dist/parsers/prisma.js.map +1 -0
  75. package/dist/parsers/pythonSyntax.d.ts +38 -0
  76. package/dist/parsers/pythonSyntax.js +120 -0
  77. package/dist/parsers/pythonSyntax.js.map +1 -0
  78. package/dist/parsers/typeorm.d.ts +12 -0
  79. package/dist/parsers/typeorm.js +1614 -0
  80. package/dist/parsers/typeorm.js.map +1 -0
  81. package/dist/parsers/typescriptSyntax.d.ts +57 -0
  82. package/dist/parsers/typescriptSyntax.js +200 -0
  83. package/dist/parsers/typescriptSyntax.js.map +1 -0
  84. package/dist/prismaOnlyConstructs.d.ts +7 -0
  85. package/dist/prismaOnlyConstructs.js +76 -0
  86. package/dist/prismaOnlyConstructs.js.map +1 -0
  87. package/dist/result.d.ts +20 -0
  88. package/dist/result.js +18 -0
  89. package/dist/result.js.map +1 -0
  90. package/dist/transforms.d.ts +13 -0
  91. package/dist/transforms.js +142 -0
  92. package/dist/transforms.js.map +1 -0
  93. package/package.json +83 -4
@@ -0,0 +1,435 @@
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 Go grammar (WebAssembly, no native build step). */
6
+ export async function getGoParser() {
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-go.wasm');
13
+ await Parser.init();
14
+ const goLanguage = await Parser.Language.load(wasmPath);
15
+ const parser = new Parser();
16
+ parser.setLanguage(goLanguage);
17
+ cachedParser = parser;
18
+ return ok(parser);
19
+ }
20
+ catch (thrown) {
21
+ return err('PARSER_INIT_FAILED', `Failed to initialize the tree-sitter Go 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
+ // ---------------------------------------------------------------------------
26
+ // Literals and struct tags
27
+ // ---------------------------------------------------------------------------
28
+ /** Decodes a Go string literal (raw or interpreted) into its value. */
29
+ export function unquoteGoString(literalText) {
30
+ if (literalText.startsWith('`')) {
31
+ return literalText.slice(1, -1);
32
+ }
33
+ return literalText
34
+ .slice(1, -1)
35
+ .replace(/\\(n|t|r|\\|"|')/g, (_whole, escaped) => {
36
+ switch (escaped) {
37
+ case 'n':
38
+ return '\n';
39
+ case 't':
40
+ return '\t';
41
+ case 'r':
42
+ return '\r';
43
+ default:
44
+ return escaped;
45
+ }
46
+ });
47
+ }
48
+ /**
49
+ * Reads the value of one key from a struct tag the way `reflect.StructTag.Lookup`
50
+ * does: the tag is a space-separated list of `key:"quoted value"` pairs.
51
+ */
52
+ export function lookupStructTag(tag, key) {
53
+ let rest = tag;
54
+ for (;;) {
55
+ rest = rest.replace(/^\s+/, '');
56
+ if (rest === '') {
57
+ return undefined;
58
+ }
59
+ const keyMatch = rest.match(/^([^\s:"]+):"/);
60
+ if (keyMatch === null) {
61
+ return undefined;
62
+ }
63
+ const name = keyMatch[1] ?? '';
64
+ // Find the closing quote, skipping escaped characters.
65
+ let index = keyMatch[0].length;
66
+ while (index < rest.length && rest.charAt(index) !== '"') {
67
+ index += rest.charAt(index) === '\\' ? 2 : 1;
68
+ }
69
+ if (index >= rest.length) {
70
+ return undefined;
71
+ }
72
+ const quoted = rest.slice(name.length + 1, index + 1);
73
+ if (name === key) {
74
+ return unquoteGoString(quoted);
75
+ }
76
+ rest = rest.slice(index + 1);
77
+ }
78
+ }
79
+ // ---------------------------------------------------------------------------
80
+ // Types
81
+ // ---------------------------------------------------------------------------
82
+ /** The name a Go import gets when it has no alias: the last path element, minus version markers. */
83
+ export function defaultImportName(importPath) {
84
+ const segments = importPath.split('/');
85
+ let last = segments[segments.length - 1] ?? importPath;
86
+ if (/^v\d+$/.test(last) && segments.length > 1) {
87
+ last = segments[segments.length - 2] ?? last;
88
+ }
89
+ return last.replace(/\.v\d+$/, '').replace(/^go[.-]/, '');
90
+ }
91
+ function readImports(root) {
92
+ const imports = new Map();
93
+ for (const spec of root.descendantsOfType('import_spec')) {
94
+ const pathNode = spec.childForFieldName('path');
95
+ if (pathNode === null) {
96
+ continue;
97
+ }
98
+ const importPath = unquoteGoString(pathNode.text);
99
+ const aliasNode = spec.childForFieldName('name');
100
+ const alias = aliasNode === null ? defaultImportName(importPath) : aliasNode.text;
101
+ if (alias !== '.' && alias !== '_') {
102
+ imports.set(alias, importPath);
103
+ }
104
+ }
105
+ return imports;
106
+ }
107
+ function readType(node, imports) {
108
+ switch (node.type) {
109
+ case 'type_identifier':
110
+ return { kind: 'name', name: node.text, args: [] };
111
+ case 'qualified_type': {
112
+ const qualifier = node.childForFieldName('package')?.text ?? '';
113
+ const importPath = imports.get(qualifier);
114
+ return {
115
+ kind: 'name',
116
+ name: node.childForFieldName('name')?.text ?? node.text,
117
+ qualifier,
118
+ ...(importPath === undefined ? {} : { importPath }),
119
+ args: [],
120
+ };
121
+ }
122
+ case 'generic_type': {
123
+ const base = node.childForFieldName('type');
124
+ const argumentsNode = node.childForFieldName('type_arguments');
125
+ if (base === null) {
126
+ return { kind: 'other', text: node.text };
127
+ }
128
+ const baseType = readType(base, imports);
129
+ if (baseType.kind !== 'name') {
130
+ return { kind: 'other', text: node.text };
131
+ }
132
+ const args = argumentsNode === null
133
+ ? []
134
+ : argumentsNode.namedChildren.map((argument) => readType(argument, imports));
135
+ return { ...baseType, args };
136
+ }
137
+ case 'type_elem': {
138
+ const inner = node.namedChildren[0];
139
+ return inner === undefined
140
+ ? { kind: 'other', text: node.text }
141
+ : readType(inner, imports);
142
+ }
143
+ case 'pointer_type': {
144
+ const inner = node.namedChildren[0];
145
+ return inner === undefined
146
+ ? { kind: 'other', text: node.text }
147
+ : { kind: 'pointer', elem: readType(inner, imports) };
148
+ }
149
+ case 'parenthesized_type': {
150
+ const inner = node.namedChildren[0];
151
+ return inner === undefined
152
+ ? { kind: 'other', text: node.text }
153
+ : readType(inner, imports);
154
+ }
155
+ case 'slice_type':
156
+ case 'array_type':
157
+ case 'implicit_length_array_type': {
158
+ const element = node.childForFieldName('element');
159
+ return element === null
160
+ ? { kind: 'other', text: node.text }
161
+ : {
162
+ kind: node.type === 'slice_type' ? 'slice' : 'array',
163
+ elem: readType(element, imports),
164
+ };
165
+ }
166
+ case 'map_type': {
167
+ const key = node.childForFieldName('key');
168
+ const value = node.childForFieldName('value');
169
+ return key === null || value === null
170
+ ? { kind: 'other', text: node.text }
171
+ : {
172
+ kind: 'map',
173
+ key: readType(key, imports),
174
+ value: readType(value, imports),
175
+ };
176
+ }
177
+ case 'struct_type':
178
+ return { kind: 'struct' };
179
+ default:
180
+ return { kind: 'other', text: node.text };
181
+ }
182
+ }
183
+ /** The type as written in source, for messages. */
184
+ export function describeGoType(type) {
185
+ switch (type.kind) {
186
+ case 'name': {
187
+ const qualified = type.qualifier === undefined || type.qualifier === ''
188
+ ? type.name
189
+ : `${type.qualifier}.${type.name}`;
190
+ return type.args.length === 0
191
+ ? qualified
192
+ : `${qualified}[${type.args.map(describeGoType).join(', ')}]`;
193
+ }
194
+ case 'pointer':
195
+ return `*${describeGoType(type.elem)}`;
196
+ case 'slice':
197
+ return `[]${describeGoType(type.elem)}`;
198
+ case 'array':
199
+ return `[...]${describeGoType(type.elem)}`;
200
+ case 'map':
201
+ return `map[${describeGoType(type.key)}]${describeGoType(type.value)}`;
202
+ case 'struct':
203
+ return 'struct{...}';
204
+ default:
205
+ return type.text;
206
+ }
207
+ }
208
+ // ---------------------------------------------------------------------------
209
+ // Declarations
210
+ // ---------------------------------------------------------------------------
211
+ function readStructFields(body, imports) {
212
+ const fields = [];
213
+ const list = body.namedChildren.find((child) => child.type === 'field_declaration_list');
214
+ for (const declaration of list?.namedChildren ?? []) {
215
+ if (declaration.type !== 'field_declaration') {
216
+ continue;
217
+ }
218
+ const typeNode = declaration.childForFieldName('type');
219
+ if (typeNode === null) {
220
+ continue;
221
+ }
222
+ let type = readType(typeNode, imports);
223
+ const tagNode = declaration.childForFieldName('tag');
224
+ const tag = tagNode === null ? undefined : unquoteGoString(tagNode.text);
225
+ const names = declaration.childrenForFieldName('name');
226
+ if (names.length === 0) {
227
+ // Embedded field: `Base`, `*Base` or `gorm.Model`. The pointer is a token, not part of the type node.
228
+ if (declaration.children[0]?.type === '*') {
229
+ type = { kind: 'pointer', elem: type };
230
+ }
231
+ fields.push({ type, ...(tag === undefined ? {} : { tag }) });
232
+ continue;
233
+ }
234
+ for (const name of names) {
235
+ fields.push({
236
+ name: name.text,
237
+ type,
238
+ ...(tag === undefined ? {} : { tag }),
239
+ });
240
+ }
241
+ }
242
+ return fields;
243
+ }
244
+ /** The type name of a method receiver: `u *User` and `User` both give "User". */
245
+ function receiverName(method, imports) {
246
+ const receiver = method.childForFieldName('receiver');
247
+ const typeNode = receiver?.namedChildren[0]?.childForFieldName('type');
248
+ if (typeNode === null || typeNode === undefined) {
249
+ return undefined;
250
+ }
251
+ let type = readType(typeNode, imports);
252
+ if (type.kind === 'pointer') {
253
+ type = type.elem;
254
+ }
255
+ return type.kind === 'name' ? type.name : undefined;
256
+ }
257
+ function readMethod(node, imports) {
258
+ const name = node.childForFieldName('name')?.text;
259
+ const receiver = receiverName(node, imports);
260
+ if (name === undefined || receiver === undefined) {
261
+ return undefined;
262
+ }
263
+ const method = { receiver, name };
264
+ const statements = node.childForFieldName('body')?.namedChildren ?? [];
265
+ const only = statements[0];
266
+ if (statements.length === 1 && only?.type === 'return_statement') {
267
+ const values = only.namedChildren[0]?.namedChildren ?? [];
268
+ const value = values[0];
269
+ if (values.length === 1 && value !== undefined) {
270
+ if (value.type === 'interpreted_string_literal' ||
271
+ value.type === 'raw_string_literal') {
272
+ method.returns = { kind: 'string', value: unquoteGoString(value.text) };
273
+ }
274
+ else if (value.type === 'identifier') {
275
+ method.returns = { kind: 'identifier', name: value.text };
276
+ }
277
+ }
278
+ }
279
+ return method;
280
+ }
281
+ /** Evaluates the small subset of constant expressions that enum definitions use. */
282
+ function evaluateConst(node, iota) {
283
+ switch (node.type) {
284
+ case 'interpreted_string_literal':
285
+ case 'raw_string_literal':
286
+ return { kind: 'string', value: unquoteGoString(node.text) };
287
+ case 'int_literal': {
288
+ const text = node.text.replace(/_/g, '');
289
+ const parsed = /^0[0-7]+$/.test(text)
290
+ ? parseInt(text, 8)
291
+ : Number(text);
292
+ return Number.isNaN(parsed) ? undefined : { kind: 'int', value: parsed };
293
+ }
294
+ case 'iota':
295
+ return { kind: 'int', value: iota };
296
+ case 'parenthesized_expression': {
297
+ const inner = node.namedChildren[0];
298
+ return inner === undefined ? undefined : evaluateConst(inner, iota);
299
+ }
300
+ case 'unary_expression': {
301
+ const operand = node.childForFieldName('operand');
302
+ const value = operand === null ? undefined : evaluateConst(operand, iota);
303
+ if (value?.kind !== 'int') {
304
+ return value;
305
+ }
306
+ return node.text.startsWith('-')
307
+ ? { kind: 'int', value: -value.value }
308
+ : value;
309
+ }
310
+ case 'call_expression': {
311
+ // A conversion such as `Status("draft")`: the value is the argument.
312
+ const argument = node.childForFieldName('arguments')?.namedChildren[0];
313
+ return argument === undefined ? undefined : evaluateConst(argument, iota);
314
+ }
315
+ case 'binary_expression': {
316
+ const left = node.childForFieldName('left');
317
+ const right = node.childForFieldName('right');
318
+ const operator = node.childForFieldName('operator')?.text;
319
+ const leftValue = left === null ? undefined : evaluateConst(left, iota);
320
+ const rightValue = right === null ? undefined : evaluateConst(right, iota);
321
+ if (leftValue?.kind === 'int' && rightValue?.kind === 'int') {
322
+ const a = leftValue.value;
323
+ const b = rightValue.value;
324
+ switch (operator) {
325
+ case '+':
326
+ return { kind: 'int', value: a + b };
327
+ case '-':
328
+ return { kind: 'int', value: a - b };
329
+ case '*':
330
+ return { kind: 'int', value: a * b };
331
+ case '<<':
332
+ return { kind: 'int', value: a * 2 ** b };
333
+ case '>>':
334
+ return { kind: 'int', value: Math.floor(a / 2 ** b) };
335
+ default:
336
+ return undefined;
337
+ }
338
+ }
339
+ if (operator === '+' &&
340
+ leftValue?.kind === 'string' &&
341
+ rightValue?.kind === 'string') {
342
+ return { kind: 'string', value: leftValue.value + rightValue.value };
343
+ }
344
+ return undefined;
345
+ }
346
+ default:
347
+ return undefined;
348
+ }
349
+ }
350
+ /** Reads one `const (...)` block, repeating the previous initializer and type for bare names like Go does. */
351
+ function readConstDeclaration(node) {
352
+ const consts = [];
353
+ let inheritedType;
354
+ let inheritedValues = [];
355
+ let iota = 0;
356
+ for (const spec of node.namedChildren) {
357
+ if (spec.type !== 'const_spec') {
358
+ continue;
359
+ }
360
+ const names = spec.childrenForFieldName('name');
361
+ const typeNode = spec.childForFieldName('type');
362
+ const valueList = spec.childForFieldName('value');
363
+ if (valueList !== null) {
364
+ inheritedValues = valueList.namedChildren;
365
+ inheritedType = typeNode?.text;
366
+ }
367
+ else if (typeNode !== null) {
368
+ inheritedType = typeNode.text;
369
+ }
370
+ names.forEach((nameNode, index) => {
371
+ const valueNode = inheritedValues[index];
372
+ const value = valueNode === undefined ? undefined : evaluateConst(valueNode, iota);
373
+ consts.push({
374
+ name: nameNode.text,
375
+ ...(inheritedType === undefined ? {} : { typeName: inheritedType }),
376
+ ...(value === undefined ? {} : { value }),
377
+ });
378
+ });
379
+ iota += 1;
380
+ }
381
+ return consts;
382
+ }
383
+ /** Reads the declarations of one Go file that are relevant to GORM: structs, named types, constants and methods. */
384
+ export function readGoFile(root, path) {
385
+ const imports = readImports(root);
386
+ const file = {
387
+ path,
388
+ structs: [],
389
+ namedTypes: [],
390
+ consts: [],
391
+ methods: [],
392
+ hasErrors: root.hasError,
393
+ };
394
+ for (const node of root.namedChildren) {
395
+ if (node.type === 'type_declaration') {
396
+ for (const spec of node.namedChildren) {
397
+ if (spec.type !== 'type_spec' && spec.type !== 'type_alias') {
398
+ continue;
399
+ }
400
+ const name = spec.childForFieldName('name')?.text;
401
+ const typeNode = spec.childForFieldName('type');
402
+ // Generic type declarations cannot be mapped to a single table.
403
+ if (name === undefined ||
404
+ typeNode === null ||
405
+ spec.childForFieldName('type_parameters') !== null) {
406
+ continue;
407
+ }
408
+ if (typeNode.type === 'struct_type') {
409
+ file.structs.push({
410
+ name,
411
+ fields: readStructFields(typeNode, imports),
412
+ path,
413
+ });
414
+ }
415
+ else {
416
+ file.namedTypes.push({
417
+ name,
418
+ underlying: readType(typeNode, imports),
419
+ });
420
+ }
421
+ }
422
+ }
423
+ else if (node.type === 'const_declaration') {
424
+ file.consts.push(...readConstDeclaration(node));
425
+ }
426
+ else if (node.type === 'method_declaration') {
427
+ const method = readMethod(node, imports);
428
+ if (method !== undefined) {
429
+ file.methods.push(method);
430
+ }
431
+ }
432
+ }
433
+ return file;
434
+ }
435
+ //# sourceMappingURL=goSyntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goSyntax.js","sourceRoot":"","sources":["../../src/parsers/goSyntax.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { IrSchema } from '../ir.js';
2
+ import { type Result } from '../result.js';
3
+ export interface GormSourceFile {
4
+ path: string;
5
+ text: string;
6
+ }
7
+ export interface GormParseOptions {
8
+ /** App label stored on each model (GORM itself has no equivalent). */
9
+ appLabel: string;
10
+ }
11
+ /** GORM's default column name for a Go field name: `PublicID` becomes `public_id`. */
12
+ export declare function gormColumnName(goName: string): string;
13
+ /** GORM's default table name for a struct: `PostTag` becomes `post_tags`. */
14
+ export declare function gormTableName(structName: string): string;
15
+ /** Parses GORM model structs (Go source with `gorm:"..."` tags) into the shared IR using tree-sitter. */
16
+ export declare function parseGorm(sources: GormSourceFile[], options: GormParseOptions): Promise<Result<IrSchema>>;