@descryy/adapter-kotlin 0.4.1 → 0.5.1
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/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +86 -14
- package/dist/adapter.js.map +1 -1
- package/dist/client-base.d.ts +114 -0
- package/dist/client-base.d.ts.map +1 -0
- package/dist/client-base.js +102 -0
- package/dist/client-base.js.map +1 -0
- package/dist/client.d.ts +23 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +207 -13
- package/dist/client.js.map +1 -1
- package/dist/external.d.ts +149 -0
- package/dist/external.d.ts.map +1 -0
- package/dist/external.js +226 -0
- package/dist/external.js.map +1 -0
- package/dist/extract.d.ts +34 -0
- package/dist/extract.d.ts.map +1 -1
- package/dist/extract.js +476 -47
- package/dist/extract.js.map +1 -1
- package/dist/jpa-reads.d.ts +26 -0
- package/dist/jpa-reads.d.ts.map +1 -0
- package/dist/jpa-reads.js +35 -0
- package/dist/jpa-reads.js.map +1 -0
- package/dist/jpa.d.ts +147 -0
- package/dist/jpa.d.ts.map +1 -0
- package/dist/jpa.js +415 -0
- package/dist/jpa.js.map +1 -0
- package/dist/parse.d.ts +44 -0
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +106 -9
- package/dist/parse.js.map +1 -1
- package/dist/retrofit.d.ts +12 -0
- package/dist/retrofit.d.ts.map +1 -1
- package/dist/retrofit.js +53 -0
- package/dist/retrofit.js.map +1 -1
- package/dist/routes.d.ts +15 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js.map +1 -1
- package/dist/serialization.d.ts +47 -0
- package/dist/serialization.d.ts.map +1 -0
- package/dist/serialization.js +55 -0
- package/dist/serialization.js.map +1 -0
- package/dist/shape-reach.d.ts +97 -0
- package/dist/shape-reach.d.ts.map +1 -0
- package/dist/shape-reach.js +156 -0
- package/dist/shape-reach.js.map +1 -0
- package/dist/spring.d.ts.map +1 -1
- package/dist/spring.js +28 -6
- package/dist/spring.js.map +1 -1
- package/package.json +7 -7
package/dist/jpa.js
ADDED
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ORM framework extractor for Kotlin — JPA/Hibernate, read from source.
|
|
3
|
+
*
|
|
4
|
+
* **A `MODEL` is a framework claim, earned here** (DEC-127), and the rules are
|
|
5
|
+
* `adapter-java/src/jpa.ts`'s, ported onto Kotlin's own grammar rather than
|
|
6
|
+
* re-derived: admission is one annotation (`@Entity`), provenance is the
|
|
7
|
+
* import table, and a stated nullability this reader cannot evaluate is listed
|
|
8
|
+
* rather than guessed. Two adapters disagreeing on one golden pattern is the
|
|
9
|
+
* failure mode the conformance harness exists to prevent, and the two JVM
|
|
10
|
+
* adapters read the *same* mapping — so where Kotlin and Java can answer
|
|
11
|
+
* alike, they answer alike.
|
|
12
|
+
*
|
|
13
|
+
* ## Three grammar facts that decide this design
|
|
14
|
+
*
|
|
15
|
+
* **1.** A Kotlin property is declared in two places, not one: a
|
|
16
|
+
* `class_parameter` in the `primary_constructor` carrying `val`/`var`
|
|
17
|
+
* (`binding_pattern_kind`), and a `property_declaration` in the `class_body`.
|
|
18
|
+
* A constructor parameter *without* `val`/`var` is not a property and is not a
|
|
19
|
+
* column — the distinction is one keyword and there is no second signal for it.
|
|
20
|
+
*
|
|
21
|
+
* **2.** Nullability is in the type, as `nullable_type` wrapping the
|
|
22
|
+
* `user_type`. That is a stated fact, and one Java has no spelling for. It is
|
|
23
|
+
* **not** a NOT NULL claim: a non-null `String` is still `java.lang.String` on
|
|
24
|
+
* the JVM and Hibernate defaults its column nullable, exactly as for Java. A
|
|
25
|
+
* non-null `Long`/`Int`/`Boolean`/… *does* compile to a JVM primitive, which
|
|
26
|
+
* is precisely `adapter-java`'s `primitive-type` rule in Kotlin's spelling and
|
|
27
|
+
* is read as such. Claiming more than that from Kotlin's null-safety would put
|
|
28
|
+
* the two JVM adapters into disagreement on identical mappings.
|
|
29
|
+
*
|
|
30
|
+
* **3.** An annotation may carry a `use_site_target` (`@field:Column`,
|
|
31
|
+
* `@get:Id`) as a sibling of the `user_type`, so the name is read past it.
|
|
32
|
+
* Kotlin JPA codebases write these constantly; a reader matching on the
|
|
33
|
+
* annotation node's text would see none of them.
|
|
34
|
+
*
|
|
35
|
+
* ## The two-property declaration-site test, and why gates and not comments
|
|
36
|
+
*
|
|
37
|
+
* An R3 claim resting on a declaration rather than a checker has to answer
|
|
38
|
+
* two questions: (a) is the physical shape **stated**, and (b) is the declared
|
|
39
|
+
* set **complete**? (a) holds — every persistent property is a `val`/`var`
|
|
40
|
+
* with a written type or it is not readable at all. (b) holds only for the
|
|
41
|
+
* constructs this reader classifies, and a framework guarantee covers nothing
|
|
42
|
+
* else, so the four shapes that break completeness are **gated** rather than
|
|
43
|
+
* noted: see {@link Refusal}. `adapter-swift`'s lane established the rule; the
|
|
44
|
+
* cost of not holding it is a table reported with three of its thirty columns
|
|
45
|
+
* that reads as complete.
|
|
46
|
+
*/
|
|
47
|
+
const JPA_PACKAGES = ["jakarta.persistence", "javax.persistence"];
|
|
48
|
+
/**
|
|
49
|
+
* Spring Data MongoDB's own mapping package, kept separate from
|
|
50
|
+
* {@link JPA_PACKAGES} for `adapter-java`'s reason: a unit can import one
|
|
51
|
+
* framework without the other, and merging would let a JPA-only file's
|
|
52
|
+
* `@Document`-shaped lookalike through on JPA's provenance.
|
|
53
|
+
*/
|
|
54
|
+
const MONGO_PACKAGES = ["org.springframework.data.mongodb"];
|
|
55
|
+
/**
|
|
56
|
+
* Kotlin types that compile to a JVM primitive **when non-null**. `Long` is
|
|
57
|
+
* `long`; `Long?` boxes to `java.lang.Long`. This is `adapter-java`'s
|
|
58
|
+
* `primitive` field, derived from Kotlin's own type rather than from a
|
|
59
|
+
* keyword.
|
|
60
|
+
*/
|
|
61
|
+
const JVM_PRIMITIVES = new Set(["Byte", "Short", "Int", "Long", "Float", "Double", "Boolean", "Char"]);
|
|
62
|
+
const namedChildren = (node) => {
|
|
63
|
+
const out = [];
|
|
64
|
+
for (let i = 0; i < node.namedChildCount; i += 1) {
|
|
65
|
+
const child = node.namedChild(i);
|
|
66
|
+
if (child !== null)
|
|
67
|
+
out.push(child);
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
70
|
+
};
|
|
71
|
+
const firstOfType = (node, type) => namedChildren(node).find((child) => child.type === type);
|
|
72
|
+
const lineOf = (node) => node.startPosition.row + 1;
|
|
73
|
+
/** A plain string literal's content, or `undefined` for anything else (interpolation included). */
|
|
74
|
+
function stringValueOf(node) {
|
|
75
|
+
if (node === undefined || node.type !== "string_literal")
|
|
76
|
+
return undefined;
|
|
77
|
+
let content = "";
|
|
78
|
+
for (const child of namedChildren(node)) {
|
|
79
|
+
if (child.type !== "string_content")
|
|
80
|
+
return undefined;
|
|
81
|
+
content += child.text;
|
|
82
|
+
}
|
|
83
|
+
return content;
|
|
84
|
+
}
|
|
85
|
+
/** Every annotation on a declaration's own `modifiers` block. */
|
|
86
|
+
function annotationsOf(node) {
|
|
87
|
+
const block = firstOfType(node, "modifiers");
|
|
88
|
+
if (block === undefined)
|
|
89
|
+
return [];
|
|
90
|
+
const out = [];
|
|
91
|
+
for (const child of namedChildren(block)) {
|
|
92
|
+
if (child.type !== "annotation")
|
|
93
|
+
continue;
|
|
94
|
+
// `use_site_target` sits before the type, so both lookups skip past it.
|
|
95
|
+
const invocation = firstOfType(child, "constructor_invocation");
|
|
96
|
+
const userType = invocation === undefined ? firstOfType(child, "user_type") : firstOfType(invocation, "user_type");
|
|
97
|
+
const name = userType === undefined ? undefined : firstOfType(userType, "type_identifier")?.text;
|
|
98
|
+
if (name === undefined)
|
|
99
|
+
continue;
|
|
100
|
+
const rawArguments = [];
|
|
101
|
+
const stringValues = [];
|
|
102
|
+
const valueArgs = invocation === undefined ? undefined : firstOfType(invocation, "value_arguments");
|
|
103
|
+
for (const va of valueArgs === undefined ? [] : namedChildren(valueArgs)) {
|
|
104
|
+
if (va.type !== "value_argument")
|
|
105
|
+
continue;
|
|
106
|
+
rawArguments.push(va.text);
|
|
107
|
+
const parts = namedChildren(va);
|
|
108
|
+
const isNamed = parts.length === 2 && parts[0]?.type === "simple_identifier";
|
|
109
|
+
const argName = isNamed ? parts[0]?.text : undefined;
|
|
110
|
+
const value = stringValueOf(isNamed ? parts[1] : parts[0]);
|
|
111
|
+
if (value === undefined)
|
|
112
|
+
continue;
|
|
113
|
+
if (argName === undefined || argName === "name" || argName === "collection")
|
|
114
|
+
stringValues.push(value);
|
|
115
|
+
}
|
|
116
|
+
out.push({ name, rawArguments, stringValues });
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
function typeOf(node) {
|
|
121
|
+
if (node === undefined)
|
|
122
|
+
return { name: undefined, nullable: false };
|
|
123
|
+
if (node.type === "nullable_type") {
|
|
124
|
+
const inner = typeOf(namedChildren(node).find((c) => c.type !== "type_modifiers"));
|
|
125
|
+
return { name: inner.name, nullable: true };
|
|
126
|
+
}
|
|
127
|
+
if (node.type === "user_type")
|
|
128
|
+
return { name: firstOfType(node, "type_identifier")?.text, nullable: false };
|
|
129
|
+
if (node.type === "function_type" || node.type === "parenthesized_type")
|
|
130
|
+
return { name: node.type, nullable: false };
|
|
131
|
+
return { name: undefined, nullable: false };
|
|
132
|
+
}
|
|
133
|
+
const TYPE_NODES = new Set(["user_type", "nullable_type", "function_type", "parenthesized_type"]);
|
|
134
|
+
function propertyFrom(name, typeNode, owner, extras) {
|
|
135
|
+
const annotations = annotationsOf(owner);
|
|
136
|
+
const column = annotations.find((a) => a.name === "Column");
|
|
137
|
+
const { name: writtenType, nullable } = typeOf(typeNode);
|
|
138
|
+
return {
|
|
139
|
+
name,
|
|
140
|
+
annotations: annotations.map((a) => a.name),
|
|
141
|
+
columnNullable: column === undefined ? undefined : declaredNullable(column),
|
|
142
|
+
writtenType,
|
|
143
|
+
nullableType: nullable,
|
|
144
|
+
...extras,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* `nullable = false` read from the raw argument text, the same treatment
|
|
149
|
+
* `adapter-java` gives it: a boolean is not a string literal, so it does not
|
|
150
|
+
* reach the literal list, and the parse does not special-case a framework's
|
|
151
|
+
* vocabulary.
|
|
152
|
+
*/
|
|
153
|
+
function declaredNullable(column) {
|
|
154
|
+
for (const raw of column.rawArguments) {
|
|
155
|
+
const match = /^\s*nullable\s*=\s*(.+?)\s*$/s.exec(raw);
|
|
156
|
+
if (match === null)
|
|
157
|
+
continue;
|
|
158
|
+
const value = match[1];
|
|
159
|
+
if (value === "false")
|
|
160
|
+
return false;
|
|
161
|
+
if (value === "true")
|
|
162
|
+
return true;
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
/** Properties declared in the primary constructor — `val`/`var` only. */
|
|
168
|
+
function constructorProperties(decl) {
|
|
169
|
+
const ctor = firstOfType(decl, "primary_constructor");
|
|
170
|
+
if (ctor === undefined)
|
|
171
|
+
return [];
|
|
172
|
+
const out = [];
|
|
173
|
+
for (const param of namedChildren(ctor)) {
|
|
174
|
+
if (param.type !== "class_parameter")
|
|
175
|
+
continue;
|
|
176
|
+
// No `val`/`var` means this is a constructor argument, not a property,
|
|
177
|
+
// and JPA persists no such thing.
|
|
178
|
+
if (firstOfType(param, "binding_pattern_kind") === undefined)
|
|
179
|
+
continue;
|
|
180
|
+
const name = firstOfType(param, "simple_identifier")?.text;
|
|
181
|
+
if (name === undefined)
|
|
182
|
+
continue;
|
|
183
|
+
const typeNode = namedChildren(param).find((c) => TYPE_NODES.has(c.type));
|
|
184
|
+
out.push(propertyFrom(name, typeNode, param, { hasAccessor: false, delegated: false }));
|
|
185
|
+
}
|
|
186
|
+
return out;
|
|
187
|
+
}
|
|
188
|
+
/** Properties declared in the class body. A `companion_object`'s own are not this class's. */
|
|
189
|
+
function bodyProperties(decl) {
|
|
190
|
+
const body = namedChildren(decl).find((c) => c.type === "class_body" || c.type === "enum_class_body");
|
|
191
|
+
if (body === undefined)
|
|
192
|
+
return [];
|
|
193
|
+
const out = [];
|
|
194
|
+
for (const child of namedChildren(body)) {
|
|
195
|
+
if (child.type !== "property_declaration")
|
|
196
|
+
continue;
|
|
197
|
+
const variable = firstOfType(child, "variable_declaration");
|
|
198
|
+
if (variable === undefined)
|
|
199
|
+
continue;
|
|
200
|
+
const name = firstOfType(variable, "simple_identifier")?.text;
|
|
201
|
+
if (name === undefined)
|
|
202
|
+
continue;
|
|
203
|
+
const typeNode = namedChildren(variable).find((c) => TYPE_NODES.has(c.type));
|
|
204
|
+
const kids = namedChildren(child);
|
|
205
|
+
out.push(propertyFrom(name, typeNode, child, {
|
|
206
|
+
hasAccessor: kids.some((c) => c.type === "getter" || c.type === "setter"),
|
|
207
|
+
delegated: kids.some((c) => c.type === "property_delegate"),
|
|
208
|
+
}));
|
|
209
|
+
}
|
|
210
|
+
return out;
|
|
211
|
+
}
|
|
212
|
+
/** The mapped table or collection, or `null` when only a naming strategy would say. */
|
|
213
|
+
function tableOf(annotations) {
|
|
214
|
+
const table = annotations.find((a) => a.name === "Table") ?? annotations.find((a) => a.name === "Document");
|
|
215
|
+
if (table === undefined)
|
|
216
|
+
return null;
|
|
217
|
+
return table.stringValues[0] ?? null;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Does this unit import a persistence framework? Provenance rule, ported
|
|
221
|
+
* unchanged: a class annotated `@Entity`/`@Document` in a file importing no
|
|
222
|
+
* persistence package is not an entity of it — both names are common enough
|
|
223
|
+
* to have lookalikes elsewhere.
|
|
224
|
+
*/
|
|
225
|
+
function importsPersistenceFramework(imports) {
|
|
226
|
+
const packages = [...JPA_PACKAGES, ...MONGO_PACKAGES];
|
|
227
|
+
return imports.some((each) => each.isWildcard ? packages.includes(each.path) : packages.some((pkg) => each.path.startsWith(`${pkg}.`)));
|
|
228
|
+
}
|
|
229
|
+
const CLASS_NODES = new Set(["class_declaration", "object_declaration"]);
|
|
230
|
+
/**
|
|
231
|
+
* Every persistence-annotated declaration in this file, read while the tree is
|
|
232
|
+
* alive. `adapter.ts` deletes the tree immediately after `readKotlinFile`, so
|
|
233
|
+
* this runs there and everything downstream works from the result.
|
|
234
|
+
*/
|
|
235
|
+
export function readJpaDeclarations(root, imports) {
|
|
236
|
+
if (!importsPersistenceFramework(imports))
|
|
237
|
+
return [];
|
|
238
|
+
const out = [];
|
|
239
|
+
const walk = (node, owners) => {
|
|
240
|
+
for (const child of namedChildren(node)) {
|
|
241
|
+
if (!CLASS_NODES.has(child.type)) {
|
|
242
|
+
if (child.namedChildCount > 0)
|
|
243
|
+
walk(child, owners);
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
const name = firstOfType(child, "type_identifier")?.text;
|
|
247
|
+
if (name === undefined)
|
|
248
|
+
continue;
|
|
249
|
+
const annotations = annotationsOf(child);
|
|
250
|
+
// The one invoked supertype. Kotlin forbids invoking an interface, so
|
|
251
|
+
// "invoked" is not a prior here the way `parse.ts` treats it for
|
|
252
|
+
// `INHERITS`/`IMPLEMENTS` — it is the answer.
|
|
253
|
+
let superclass;
|
|
254
|
+
for (const spec of namedChildren(child)) {
|
|
255
|
+
if (spec.type !== "delegation_specifier")
|
|
256
|
+
continue;
|
|
257
|
+
const invocation = firstOfType(spec, "constructor_invocation");
|
|
258
|
+
if (invocation === undefined)
|
|
259
|
+
continue;
|
|
260
|
+
superclass = firstOfType(firstOfType(invocation, "user_type") ?? invocation, "type_identifier")?.text;
|
|
261
|
+
}
|
|
262
|
+
out.push({
|
|
263
|
+
name,
|
|
264
|
+
owners,
|
|
265
|
+
annotations: annotations.map((a) => a.name),
|
|
266
|
+
table: tableOf(annotations),
|
|
267
|
+
properties: [...constructorProperties(child), ...bodyProperties(child)],
|
|
268
|
+
superclass,
|
|
269
|
+
startLine: lineOf(child),
|
|
270
|
+
endLine: child.endPosition.row + 1,
|
|
271
|
+
});
|
|
272
|
+
const body = namedChildren(child).find((c) => c.type === "class_body" || c.type === "enum_class_body");
|
|
273
|
+
if (body !== undefined)
|
|
274
|
+
walk(body, [...owners, name]);
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
walk(root, []);
|
|
278
|
+
return out;
|
|
279
|
+
}
|
|
280
|
+
const has = (decl, name) => decl.annotations.includes(name);
|
|
281
|
+
const isEntity = (decl) => (has(decl, "Entity") || has(decl, "Document")) && !has(decl, "Embeddable") && !has(decl, "MappedSuperclass");
|
|
282
|
+
/**
|
|
283
|
+
* The columns an entity inherits, deepest ancestor first, or a refusal.
|
|
284
|
+
* `@MappedSuperclass` ancestors contribute; a plain open class contributes
|
|
285
|
+
* nothing itself but may extend one that does; an `@Entity` ancestor is a JPA
|
|
286
|
+
* inheritance strategy this cannot read (E2); an unresolvable one leaves the
|
|
287
|
+
* set unprovable (E1).
|
|
288
|
+
*/
|
|
289
|
+
function inherited(decl, unit, resolve) {
|
|
290
|
+
const chain = [];
|
|
291
|
+
const seen = new Set([`${unit.packageName}::${[...decl.owners, decl.name].join(".")}`]);
|
|
292
|
+
let current = { declaration: decl, unit };
|
|
293
|
+
for (;;) {
|
|
294
|
+
const written = current.declaration.superclass;
|
|
295
|
+
if (written === undefined)
|
|
296
|
+
return { fields: chain };
|
|
297
|
+
const parent = resolve(written, current.unit);
|
|
298
|
+
if (parent === undefined) {
|
|
299
|
+
return {
|
|
300
|
+
refusal: `the superclass \`${written}\` is not declared in this batch, so the columns it contributes ` +
|
|
301
|
+
"cannot be enumerated and the column set cannot be shown complete. The shape is withheld " +
|
|
302
|
+
"rather than reported as a complete list that is missing rows.",
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
const key = `${parent.unit.packageName}::${[...parent.declaration.owners, parent.declaration.name].join(".")}`;
|
|
306
|
+
if (seen.has(key))
|
|
307
|
+
return { fields: chain };
|
|
308
|
+
seen.add(key);
|
|
309
|
+
if (has(parent.declaration, "Entity") || has(parent.declaration, "Document")) {
|
|
310
|
+
return {
|
|
311
|
+
refusal: `the superclass \`${written}\` is itself an @Entity, so a JPA inheritance strategy ` +
|
|
312
|
+
"(single-table, joined, table-per-class) decides where each column lives and no source file " +
|
|
313
|
+
"here states which. Refused rather than guessed.",
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
// Deepest ancestor first, so the base id leads the list. Deterministic.
|
|
317
|
+
if (has(parent.declaration, "MappedSuperclass"))
|
|
318
|
+
chain.unshift(...parent.declaration.properties);
|
|
319
|
+
current = parent;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/** Every JPA entity this unit declares, plus every shape it refused and why. */
|
|
323
|
+
export function jpaModels(unit, resolve) {
|
|
324
|
+
const models = [];
|
|
325
|
+
const refusals = [];
|
|
326
|
+
for (const decl of unit.jpaDeclarations) {
|
|
327
|
+
if (!isEntity(decl))
|
|
328
|
+
continue;
|
|
329
|
+
// E4 — a discriminator column is a real column declared by no property.
|
|
330
|
+
const strategy = decl.annotations.find((a) => a === "Inheritance" || a === "DiscriminatorColumn");
|
|
331
|
+
if (strategy !== undefined) {
|
|
332
|
+
refusals.push({
|
|
333
|
+
className: decl.name,
|
|
334
|
+
reason: `@${strategy} puts a discriminator column on this table that no property declares, so the ` +
|
|
335
|
+
"properties are not the complete column set. The shape is withheld.",
|
|
336
|
+
});
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
const up = inherited(decl, unit, resolve);
|
|
340
|
+
if ("refusal" in up) {
|
|
341
|
+
refusals.push({ className: decl.name, reason: up.refusal });
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
// A subclass's own declaration wins over an inherited one.
|
|
345
|
+
const own = new Set(decl.properties.map((p) => p.name));
|
|
346
|
+
const all = [...up.fields.filter((p) => !own.has(p.name)), ...decl.properties];
|
|
347
|
+
// E3 — an embeddable's columns flatten into this table and this reader
|
|
348
|
+
// enumerates none of them. Checked over the WHOLE set, inherited included.
|
|
349
|
+
const embedded = all.find((p) => p.annotations.includes("Embedded") || p.annotations.includes("EmbeddedId"));
|
|
350
|
+
if (embedded !== undefined) {
|
|
351
|
+
refusals.push({
|
|
352
|
+
className: decl.name,
|
|
353
|
+
reason: `\`${embedded.name}\` is @Embedded, so the embeddable's own columns flatten into this table. ` +
|
|
354
|
+
"This reader enumerates one property where the table carries several, which would read as a " +
|
|
355
|
+
"complete column set and is not. The shape is withheld.",
|
|
356
|
+
});
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
const fields = [];
|
|
360
|
+
const undecided = [];
|
|
361
|
+
for (const property of all) {
|
|
362
|
+
if (property.annotations.includes("Transient"))
|
|
363
|
+
continue;
|
|
364
|
+
// Not decidable, and listed rather than guessed or dropped.
|
|
365
|
+
if (property.columnNullable === null) {
|
|
366
|
+
undecided.push(property.name);
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
if (property.delegated || property.hasAccessor || property.writtenType === undefined) {
|
|
370
|
+
undecided.push(property.name);
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
let nullable;
|
|
374
|
+
let nullableFrom;
|
|
375
|
+
if (property.columnNullable !== undefined) {
|
|
376
|
+
nullable = property.columnNullable;
|
|
377
|
+
nullableFrom = "declared";
|
|
378
|
+
}
|
|
379
|
+
else if (property.annotations.includes("Id") || property.annotations.includes("NotNull")) {
|
|
380
|
+
nullable = false;
|
|
381
|
+
nullableFrom = "annotation";
|
|
382
|
+
}
|
|
383
|
+
else if (!property.nullableType && JVM_PRIMITIVES.has(property.writtenType)) {
|
|
384
|
+
// Non-null `Long` is JVM `long` and cannot hold null; `Long?` boxes.
|
|
385
|
+
// Java's rule 4, in Kotlin's spelling.
|
|
386
|
+
nullable = false;
|
|
387
|
+
nullableFrom = "primitive-type";
|
|
388
|
+
}
|
|
389
|
+
else if (property.nullableType) {
|
|
390
|
+
// Stated nullable. Same boolean the framework default would give, and
|
|
391
|
+
// a different fact: the source says so.
|
|
392
|
+
nullable = true;
|
|
393
|
+
nullableFrom = "declared-type";
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
nullable = true;
|
|
397
|
+
nullableFrom = "framework-default";
|
|
398
|
+
}
|
|
399
|
+
fields.push({ name: property.name, nullable, nullableFrom });
|
|
400
|
+
}
|
|
401
|
+
// A MODEL with nothing readable would claim a table it cannot describe.
|
|
402
|
+
if (fields.length === 0 && undecided.length === 0)
|
|
403
|
+
continue;
|
|
404
|
+
models.push({
|
|
405
|
+
className: decl.name,
|
|
406
|
+
owners: decl.owners,
|
|
407
|
+
table: decl.table,
|
|
408
|
+
fields,
|
|
409
|
+
line: decl.startLine,
|
|
410
|
+
undecided,
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
return { models, refusals };
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=jpa.js.map
|
package/dist/jpa.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jpa.js","sourceRoot":"","sources":["../src/jpa.ts"],"names":[],"mappings":"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"}
|
package/dist/parse.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ import { type Node } from "@descryy/adapter-treesitter";
|
|
|
27
27
|
import { type KotlinRoute, type KotlinRouteRefusal } from "./routes.ts";
|
|
28
28
|
import { type KotlinClientCall, type KotlinClientRefusal } from "./client.ts";
|
|
29
29
|
import { type KotlinRetrofitEndpoint, type KotlinRetrofitRefusal } from "./retrofit.ts";
|
|
30
|
+
import { type KotlinJpaDeclaration } from "./jpa.ts";
|
|
30
31
|
/** `import a.b.C`, or the package half of `import a.b.*`. */
|
|
31
32
|
export interface KotlinImport {
|
|
32
33
|
readonly path: string;
|
|
@@ -52,6 +53,12 @@ export interface KotlinSupertype {
|
|
|
52
53
|
export interface KotlinDecl {
|
|
53
54
|
readonly kind: DeclKind;
|
|
54
55
|
readonly name: string;
|
|
56
|
+
/** Annotation NAMES on the declaration — `Entity`, `Table`. */
|
|
57
|
+
readonly annotations: readonly string[];
|
|
58
|
+
/** The same annotations as raw source text, so a reader can see their arguments.
|
|
59
|
+
* Raw rather than parsed: annotation syntax is open-ended and the language
|
|
60
|
+
* reader has no business knowing what any particular one MEANS. */
|
|
61
|
+
readonly annotationTexts: readonly string[];
|
|
55
62
|
/** Enclosing type path for a nested declaration, outermost first. */
|
|
56
63
|
readonly owners: readonly string[];
|
|
57
64
|
readonly supertypes: readonly KotlinSupertype[];
|
|
@@ -82,15 +89,45 @@ export interface KotlinFunc {
|
|
|
82
89
|
readonly owners: readonly string[];
|
|
83
90
|
readonly isTest: boolean;
|
|
84
91
|
readonly testStyle: TestStyle | undefined;
|
|
92
|
+
/** A Jetpack Compose UI element — `@Composable` returning `Unit`. See `composableOf`. */
|
|
93
|
+
readonly isComposable: boolean;
|
|
85
94
|
readonly startLine: number;
|
|
86
95
|
readonly endLine: number;
|
|
87
96
|
readonly refs: readonly KotlinRef[];
|
|
97
|
+
/**
|
|
98
|
+
* `order.totalAmount` — a property READ through a receiver whose type a
|
|
99
|
+
* binding states.
|
|
100
|
+
*
|
|
101
|
+
* Kept apart from {@link refs}, which carries calls and type references and
|
|
102
|
+
* feeds CALLS/USES_TYPE resolution. Only a receiver with a WRITTEN type is
|
|
103
|
+
* recorded: Kotlin infers aggressively, and a type this reader would have to
|
|
104
|
+
* infer from a callee's signature is a disclosed gap rather than a guess.
|
|
105
|
+
*/
|
|
106
|
+
readonly fieldReads: readonly {
|
|
107
|
+
readonly receiverType: string;
|
|
108
|
+
readonly field: string;
|
|
109
|
+
readonly line: number;
|
|
110
|
+
}[];
|
|
88
111
|
}
|
|
89
112
|
export interface KotlinProperty {
|
|
90
113
|
readonly name: string;
|
|
91
114
|
readonly owners: readonly string[];
|
|
92
115
|
/** The written type, when annotated. Kotlin infers aggressively, so often absent. */
|
|
93
116
|
readonly type: string | undefined;
|
|
117
|
+
/**
|
|
118
|
+
* Did the written type end in `?`.
|
|
119
|
+
*
|
|
120
|
+
* Kotlin states nullability IN THE TYPE and the compiler enforces it, so this
|
|
121
|
+
* is a declaration rather than an inference — the one place Kotlin is
|
|
122
|
+
* strictly better evidence than Java, where the same fact needs `@Column`,
|
|
123
|
+
* `@Id` and primitive-vs-boxed to be read together.
|
|
124
|
+
*
|
|
125
|
+
* `undefined` when no type was written at all, which is not the same as
|
|
126
|
+
* "written and not nullable".
|
|
127
|
+
*/
|
|
128
|
+
readonly nullable: boolean | undefined;
|
|
129
|
+
/** Annotations on the property, as raw source text — `@Id`, `@Column(nullable = true)`. */
|
|
130
|
+
readonly annotationTexts: readonly string[];
|
|
94
131
|
readonly line: number;
|
|
95
132
|
}
|
|
96
133
|
export interface KotlinFile {
|
|
@@ -132,6 +169,13 @@ export interface KotlinFile {
|
|
|
132
169
|
/** Retrofit's declarative client endpoints — see `retrofit.ts`. */
|
|
133
170
|
readonly retrofitEndpoints: readonly KotlinRetrofitEndpoint[];
|
|
134
171
|
readonly retrofitRefusals: readonly KotlinRetrofitRefusal[];
|
|
172
|
+
/**
|
|
173
|
+
* Persistence-annotated declarations — see `jpa.ts`. Read here rather than
|
|
174
|
+
* in `extract.ts` because `adapter.ts` deletes the tree the moment this
|
|
175
|
+
* function returns, and the shape a `MODEL` carries is written in
|
|
176
|
+
* annotations and types that `KotlinDecl`/`KotlinProperty` do not keep.
|
|
177
|
+
*/
|
|
178
|
+
readonly jpaDeclarations: readonly KotlinJpaDeclaration[];
|
|
135
179
|
}
|
|
136
180
|
/** Parse one Kotlin file into the structures `extract.ts` consumes. */
|
|
137
181
|
export declare function readKotlinFile(file: string, tree: {
|
package/dist/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAExD,OAAO,EAAkB,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EAAuB,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEnG,OAAO,EAAyB,KAAK,sBAAsB,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|