ajsc 7.0.0 → 7.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 +119 -0
- package/README.md +94 -0
- package/dist/converter/BaseConverter.d.ts +36 -4
- package/dist/converter/BaseConverter.js.map +1 -1
- package/dist/converter/index.d.ts +25 -0
- package/dist/converter/index.js +24 -0
- package/dist/converter/index.js.map +1 -1
- package/dist/converter/inlineEmission.d.ts +42 -0
- package/dist/converter/inlineEmission.js +49 -0
- package/dist/converter/inlineEmission.js.map +1 -0
- package/dist/converter/naming.js +9 -2
- package/dist/converter/naming.js.map +1 -1
- package/dist/kotlin/KotlinConverter.d.ts +22 -0
- package/dist/kotlin/KotlinConverter.js +3 -0
- package/dist/kotlin/KotlinConverter.js.map +1 -1
- package/dist/kotlin/index.d.ts +11 -0
- package/dist/kotlin/index.js +11 -0
- package/dist/kotlin/index.js.map +1 -1
- package/dist/kotlin/objectEmitter.d.ts +6 -0
- package/dist/kotlin/objectEmitter.js +31 -3
- package/dist/kotlin/objectEmitter.js.map +1 -1
- package/dist/swift/SwiftConverter.d.ts +23 -0
- package/dist/swift/SwiftConverter.js +3 -0
- package/dist/swift/SwiftConverter.js.map +1 -1
- package/dist/swift/index.d.ts +11 -0
- package/dist/swift/index.js +11 -0
- package/dist/swift/index.js.map +1 -1
- package/dist/swift/structEmitter.d.ts +5 -0
- package/dist/swift/structEmitter.js +29 -5
- package/dist/swift/structEmitter.js.map +1 -1
- package/dist/typescript/TypescriptConverter.js +2 -0
- package/dist/typescript/TypescriptConverter.js.map +1 -1
- package/dist/typescript/index.d.ts +10 -0
- package/dist/typescript/index.js +10 -0
- package/dist/typescript/index.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to ajsc are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project follows [Semantic Versioning](https://semver.org/).
|
|
4
|
+
|
|
5
|
+
## [7.1.0] — 2026-04-25
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **`inlineTypes` opt for Kotlin and Swift converters.** When `inlineTypes: true`, nested object types are emitted as nested `data class` (Kotlin) or `struct` (Swift) declarations inside their parent's body, rather than as top-level siblings. For codegen pipelines that emit multiple schemas into one namespace, this eliminates the cross-call name-collision class structurally — each parent's `Address` is name-scoped (`Body.Address` vs `Response.Address`), so no shared `nameRegistry` plumbing is required. Default: `false` (extract to top-level — the v7.0 behavior).
|
|
10
|
+
- Top-level enums and discriminated unions remain extracted regardless of `inlineTypes` — they have their own dedup story and don't benefit from nesting.
|
|
11
|
+
- The TypeScript converter has had `inlineTypes` since v6 (anonymous inline literals — a different language mechanism); the Kotlin/Swift addition uses the same opt name for the same consumer-facing intent.
|
|
12
|
+
- New `nested-emission` cross-language fixture covering the inline pattern across TypeScript, Kotlin, and Swift (19th fixture, brings the golden corpus to 57 files).
|
|
13
|
+
- **`generateInlineNestedDecl` and `InlineNestedCollector`** exported from `ajsc/converter` for downstream language authors implementing similar nested-decl semantics.
|
|
14
|
+
|
|
15
|
+
### Internal
|
|
16
|
+
|
|
17
|
+
- New shared module `src/converter/inlineEmission.ts` consolidates the per-parent collector type, the `getReferencedType` replacement, and the multi-line indent helper that previously existed (in identical form) inside both `kotlin/objectEmitter.ts` and `swift/structEmitter.ts`. Each language emitter now passes a small language-specific `formatNestedDecl(c, name, body, ir)` callback — the only part that genuinely differs.
|
|
18
|
+
- Test count: 473 → 500 (per-language inline-types coverage + sibling-parent dedup pinning + the cross-language nested-emission fixture).
|
|
19
|
+
- Existing TS / Kotlin / Swift goldens are byte-identical between v7.0.0 and v7.1.0 (the new opt defaults to `false`).
|
|
20
|
+
|
|
21
|
+
## [7.0.0] — 2026-04-24
|
|
22
|
+
|
|
23
|
+
This release adds first-class **Kotlin** and **Swift** language targets, restores the root subpath import that v6 dropped, and ships several behavioral fixes to the TypeScript converter that consumers depending on the older buggy output may need to migrate.
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- **Kotlin converter** (`ajsc/kotlin`, or `emitKotlin` from `ajsc`).
|
|
28
|
+
- Emits idiomatic `data class` declarations.
|
|
29
|
+
- Default `serializer: "kotlinx"` adds `@Serializable`, `@SerialName`, `@Contextual`. Pass `serializer: "none"` for plain types.
|
|
30
|
+
- Discriminated `oneOf`/`anyOf` unions emit as `sealed interface` with `@JsonClassDiscriminator`.
|
|
31
|
+
- JVM stdlib type mapping for date-time (`java.time.Instant`), uuid (`java.util.UUID`), uri (`java.net.URI`), date / time.
|
|
32
|
+
- `Pair<A,B>` / `Triple<A,B,C>` for 2- and 3-element tuples.
|
|
33
|
+
- `packageName` option emits a `package …` line at the top of the output.
|
|
34
|
+
- **Swift converter** (`ajsc/swift`, or `emitSwift` from `ajsc`).
|
|
35
|
+
- Emits `struct` declarations with `: Codable` conformance by default.
|
|
36
|
+
- Foundation stdlib mapping (`Date`, `UUID`, `URL`).
|
|
37
|
+
- Discriminated unions emit as `enum` with associated values, including a hand-written `init(from:)` and `encode(to:)` that dispatch by the schema's discriminator field.
|
|
38
|
+
- `CodingKeys` blocks generated when JSON keys differ from Swift property names.
|
|
39
|
+
- Acronym preservation in enum case names: `case US` rather than `case uS = "US"`.
|
|
40
|
+
- `accessLevel` option (`"public"` default, `"internal"` available).
|
|
41
|
+
- **Top-level emit functions** at the package root: `emitTypescript`, `emitKotlin`, `emitSwift`, plus the shared `EmitResult` type.
|
|
42
|
+
- **`nameRegistry` and `namePrefix` opts** on `BaseConverterOpts`. Pass a shared `Set<string>` across multiple emit calls so types extracted from sibling schemas don't collide when concatenated into a single Kotlin `object` or Swift `enum` namespace. `namePrefix` prepends a per-slot prefix to extracted (nested) type names — `BodyAddress` vs `ResponseAddress` rather than `Address` vs `Address2`. See README "Emitting multiple schemas into one namespace" for the recommended pattern. Most useful for Kotlin and Swift; harmless for TypeScript.
|
|
43
|
+
- **`ajsc/converter` subpath** for downstream extension authors. Exports `BaseConverter`, `Emitter`, `walkIR`, `LanguageProfile`, `BaseConverterContext`, `RefTypeEntry`, and `BaseConverterOpts`.
|
|
44
|
+
- **`rootTypeName` option** on every converter — overrides the schema-derived root name without modifying the schema.
|
|
45
|
+
- **Introspection fields** on every converter: `rootTypeName: string`, `extractedTypeNames: string[]`, `imports: string[]`. Codegen pipelines can reference emitted type names without parsing the `code` string.
|
|
46
|
+
- **Architecture documentation** at `docs/architecture/README.md` — data flow, layered class hierarchy, `LanguageProfile` pattern, per-language module structure, and the steps to add a new language target.
|
|
47
|
+
- **Cross-language fixture corpus** of 18 schemas with 54 golden output files (TS + Kotlin + Swift) under `src/integrations/fixtures/`.
|
|
48
|
+
- **JSON Schema 2020-12 `prefixItems`** treated as equivalent to legacy array-form `items`.
|
|
49
|
+
- **Schema-level `default`** now propagated to Kotlin/Swift property declarations for primitive defaults (`val foo: String = "x"`, `let foo: Int64 = 0`).
|
|
50
|
+
- **Format `int32`** is now honored: emits `Int` (Kotlin) and `Int32` (Swift) where previously these always emitted `Long` / `Int64`.
|
|
51
|
+
- **Root-level enum schemas** (`{ type: "string", enum: [...] }`) now emit as `enum class` (Kotlin) and `public enum: String, Codable` (Swift), instead of empty data classes/structs.
|
|
52
|
+
|
|
53
|
+
### Changed (breaking — TypeScript output)
|
|
54
|
+
|
|
55
|
+
- **`$ref: "#"` recursion in TypeScript** now emits direct self-reference. A schema like `{ "title": "Tree", "properties": { "children": { "type": "array", "items": { "$ref": "#" } } } }` now produces:
|
|
56
|
+
```ts
|
|
57
|
+
export type Tree = { children?: Array<Tree>; };
|
|
58
|
+
```
|
|
59
|
+
instead of the previous bifurcated form (`Child` extracted with `Array<any>` recursion). Consumers depending on the old `Child` extracted type by name will need to update.
|
|
60
|
+
- **`anyOf` merge** preserves the parent's `required` flag. A required schema field that gets anyOf-merged is now non-optional in output. Example:
|
|
61
|
+
```ts
|
|
62
|
+
// before: actor?: Actor
|
|
63
|
+
// after: actor: Actor
|
|
64
|
+
```
|
|
65
|
+
- **`oneOf` variant naming in TypeScript** uses discriminator-derived names. A schema with two oneOf variants `{ kind: "wrapper" }` / `{ kind: "scalar" }` now emits `WrapperOuter` / `ScalarOuter` rather than collision-suffixed `Outer` / `OuterType`. Kotlin and Swift have always produced discriminator-derived names; this brings TypeScript into alignment.
|
|
66
|
+
|
|
67
|
+
### Changed (breaking — extension API)
|
|
68
|
+
|
|
69
|
+
- **`./converter` subpath public surface refactored.** Most consumers won't notice — only authors who subclassed `BaseConverter` to override hook methods.
|
|
70
|
+
- 9 separate `protected` hook methods (`shouldEraseDiscriminator`, `processOneOfAsDiscriminatedUnion`, `getDiscriminatedVariantParentName`, `shouldPopulateDiscriminatorInfo`, `detectSelfReferenceToRoot`, etc.) consolidated into a single `protected readonly languageProfile: LanguageProfile` field. See `docs/architecture/README.md` for the migration pattern.
|
|
71
|
+
- `RefTypes` is now `RefTypeEntry[]` (array of named records) instead of a tuple-of-tuples. Access changes from `entry[2].code` → `entry.code`, `[_s, name, { code }]` destructure → `{ name, code }`.
|
|
72
|
+
- Several previously-protected helper methods (`findDiscriminatorProperty`, `collectUnionPropertyNames`, `stripDiscriminatorField`, `getConstStringValue`, `findAvailableName`) are now public (with `@internal` JSDoc) so they can be referenced by helper-module Context interfaces.
|
|
73
|
+
- **`BaseConverterContext` interface** introduced as the surface helper modules operate on. `BaseConverter implements BaseConverterContext`. Helper modules in `src/converter/` (`registry.ts`, `naming.ts`, `mergeUnions.ts`, `discriminatedUnions.ts`, `walk.ts`) take a `BaseConverterContext` rather than the abstract class, decoupling helpers from the class hierarchy.
|
|
74
|
+
- **Per-language `<Lang>ConverterContext` interfaces** (`KotlinConverterContext`, `SwiftConverterContext`) extend `BaseConverterContext` with language-specific state and methods. The Kotlin and Swift converter classes `implements` their respective Context interface; helper modules in `src/kotlin/` and `src/swift/` take the interface. Replaces the prior `_x` accessor wrapper pattern with a single declarative interface.
|
|
75
|
+
|
|
76
|
+
### Changed (non-breaking)
|
|
77
|
+
|
|
78
|
+
- **Swift discriminated-enum emission** uses consistent 4-space indentation throughout (previously had 4/8-space mismatches in `init(from:)` / `encode(to:)` blocks).
|
|
79
|
+
- **Kotlin module structure** split into focused files: `typeMapper.ts`, `objectEmitter.ts`, `sealedUnion.ts`, `enums.ts`, `unsupported.ts`, `annotations.ts`. Pure internal refactor; no public API change.
|
|
80
|
+
- **Swift module structure** split into focused files: `typeMapper.ts`, `structEmitter.ts`, `discriminatedEnum.ts`, `enums.ts`, `unsupported.ts`. Pure internal refactor.
|
|
81
|
+
- **`BaseConverter` split** into focused files: `walk.ts`, `naming.ts`, `registry.ts`, `mergeUnions.ts`, `discriminatedUnions.ts`. Pure internal refactor.
|
|
82
|
+
|
|
83
|
+
### Fixed
|
|
84
|
+
|
|
85
|
+
- **Kotlin `init` reserved word** — was missing from `KOTLIN_RESERVED`; properties named `init` now correctly emit as `init_`.
|
|
86
|
+
- **Swift acronym case names** — `case US` instead of `case uS = "US"` for all-uppercase enum values.
|
|
87
|
+
- **Schema `default`** is no longer silently dropped in Kotlin and Swift output for primitive defaults.
|
|
88
|
+
|
|
89
|
+
### Removed
|
|
90
|
+
|
|
91
|
+
- The `dart` keyword from `package.json` keywords (no Dart converter is available; misleading for npm discoverability).
|
|
92
|
+
|
|
93
|
+
### Internal
|
|
94
|
+
|
|
95
|
+
- 90+ commits since v6.0.0. Test count grew from 188 → 473.
|
|
96
|
+
- New regression-net pattern: vitest snapshots of the kitchen-sink schema (`_baseline-snapshot.test.ts.snap`) catch any drift in TS converter output across refactors. Used throughout this release as the gate for the `BaseConverter` refactor.
|
|
97
|
+
- Cross-language golden fixtures (18 schemas × 3 languages = 54 goldens) protect against drift.
|
|
98
|
+
- Cross-call integration tests (`src/__tests__/cross-call-name-registry.test.ts`, `src/__tests__/multi-call-integration.test.ts`) lock in the orchestration pattern for downstream codegen pipelines.
|
|
99
|
+
|
|
100
|
+
### Known follow-ups (deferred to a future release)
|
|
101
|
+
|
|
102
|
+
These were surfaced during v7 development but intentionally not implemented to keep the release scope focused. Real, agreed-on next steps:
|
|
103
|
+
|
|
104
|
+
- **`EmitSession` API**: an emit-session object that bundles `nameRegistry` plus `refTypes` across multiple calls so identical schema shapes (e.g., the same `address` structure in both `body` and `response`) emit as a single declaration referenced from both slots. The current `nameRegistry` fix avoids compile errors but emits structurally-identical types twice (`BodyAddress`, `ResponseAddress`). A session API would dedupe at the structural level.
|
|
105
|
+
- **Smart `namePrefix`**: prefix extracted names only when they would collide, instead of unconditionally. Today, `namePrefix: "Body"` produces `BodyAddress`, `BodyContact`, `BodySettings` even when only `Address` actually collides with another slot. A two-pass approach (collect names, detect overlaps, prefix the conflicting ones) would give more ergonomic output.
|
|
106
|
+
- **Cross-call collision fallback**: when `nameRegistry` is set without `namePrefix`, prefer numeric suffix (`Address2`) over postfix-list (`AddressType`) fallbacks. The postfix list was designed for single-call path-escalation; in cross-call mode, postfix names become semantically misleading.
|
|
107
|
+
- **`additionalItems` support**: tuple-form `items: [...]` plus `additionalItems: { ... }` is currently silently dropped.
|
|
108
|
+
- **Schema `examples` lifting**: currently dropped (no clean target idiom across all three languages).
|
|
109
|
+
- **`@internal` accessor consolidation**: `BaseConverter` exposes several public-with-`@internal` methods (`findDiscriminatorProperty`, `collectUnionPropertyNames`, etc.) for the `BaseConverterContext` interface. They work but the `@internal` JSDoc isn't enforced. A `Symbol`-keyed accessor pattern or a separate "internal" module would prevent downstream code from depending on them.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## [6.0.0] — earlier
|
|
114
|
+
|
|
115
|
+
Reorganized `src` by feature and switched to subpath exports. The previous root barrel (`import { TypescriptConverter } from "ajsc"`) stopped resolving in v6. (v7 restores the root entry; see [Migrating from v6 to v7](./README.md#migrating-from-v6-to-v7).)
|
|
116
|
+
|
|
117
|
+
## [5.x] — earlier
|
|
118
|
+
|
|
119
|
+
Earlier releases. See `git log` for detail.
|
package/README.md
CHANGED
|
@@ -173,6 +173,7 @@ All three converters accept `BaseConverterOpts` plus language-specific options.
|
|
|
173
173
|
|--------|------|---------|-------------|
|
|
174
174
|
| `serializer` | `"kotlinx" \| "none"` | `"kotlinx"` | Emit `@Serializable`/`@SerialName`/`@Contextual` annotations and matching imports. `"none"` emits plain types. |
|
|
175
175
|
| `packageName` | `string` | `undefined` | If set, emit `package <name>` at the top of the output. |
|
|
176
|
+
| `inlineTypes` | `boolean` | `false` | If true, nested object types emit as nested `data class` declarations inside their parent's body block instead of extracting to top-level siblings. Top-level enums and discriminated unions remain extracted. See "Emitting multiple schemas into one namespace" for the motivation. |
|
|
176
177
|
|
|
177
178
|
### Swift (`SwiftConverterOpts`)
|
|
178
179
|
|
|
@@ -180,6 +181,7 @@ All three converters accept `BaseConverterOpts` plus language-specific options.
|
|
|
180
181
|
|--------|------|---------|-------------|
|
|
181
182
|
| `serializer` | `"codable" \| "none"` | `"codable"` | Emit `: Codable` conformance, `CodingKeys` enums, and discriminated-union `init(from:)`/`encode(to:)` plumbing. `"none"` emits plain types. |
|
|
182
183
|
| `accessLevel` | `"public" \| "internal"` | `"public"` | Access modifier on emitted types and members. |
|
|
184
|
+
| `inlineTypes` | `boolean` | `false` | If true, nested object types emit as nested `struct` declarations inside their parent's body block instead of extracting to top-level siblings. Top-level enums and discriminated `enum`s remain extracted. See "Emitting multiple schemas into one namespace" for the motivation. |
|
|
183
185
|
|
|
184
186
|
---
|
|
185
187
|
|
|
@@ -231,6 +233,98 @@ Schema-level `default` values are emitted inline for primitive types in Kotlin/S
|
|
|
231
233
|
|
|
232
234
|
---
|
|
233
235
|
|
|
236
|
+
## Emitting multiple schemas into one namespace
|
|
237
|
+
|
|
238
|
+
Codegen pipelines that emit several sibling schemas into a shared output (e.g., wrapping an endpoint's `pathParams`, `query`, `body`, `response`, and error types under a single Kotlin `object` or Swift `enum`) need to avoid duplicate-name collisions across the emit calls. Each emit call has its own private name-tracking state by default, so two slots with a nested `address: { type: "object" }` would each emit a `data class Address(...)` — a duplicate-class compile error in the merged output.
|
|
239
|
+
|
|
240
|
+
There are two ways to fix this: nest extracted types inside the parent (recommended for Kotlin/Swift), or share a name registry across calls. Pick whichever output shape your pipeline wants.
|
|
241
|
+
|
|
242
|
+
### Recommended: `inlineTypes: true` (Kotlin / Swift)
|
|
243
|
+
|
|
244
|
+
Set `inlineTypes: true` per emit call. Each parent's nested object types are emitted as nested `data class` (Kotlin) or `struct` (Swift) declarations inside the parent's body block, scoped to its namespace. Cross-call collisions disappear structurally — no shared registry plumbing required.
|
|
245
|
+
|
|
246
|
+
```ts
|
|
247
|
+
import { emitKotlin } from "ajsc";
|
|
248
|
+
|
|
249
|
+
const body = emitKotlin(bodySchema, { inlineTypes: true, rootTypeName: "Body" });
|
|
250
|
+
const response = emitKotlin(responseSchema, { inlineTypes: true, rootTypeName: "Response" });
|
|
251
|
+
|
|
252
|
+
// body.code:
|
|
253
|
+
// data class Body(val address: Address, ...) {
|
|
254
|
+
// data class Address(val street: String, ...)
|
|
255
|
+
// }
|
|
256
|
+
// response.code:
|
|
257
|
+
// data class Response(val address: Address, ...) {
|
|
258
|
+
// data class Address(val street: String, ...)
|
|
259
|
+
// }
|
|
260
|
+
//
|
|
261
|
+
// Concatenated under one `object Endpoint { ... }` — no name collisions:
|
|
262
|
+
// Body.Address and Response.Address are different scoped names.
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
`inlineTypes: true` only nests plain object types. Top-level enums and discriminated unions (sealed interface in Kotlin, enum w/ associated values in Swift) remain at the same level as the parent — they have their own dedup story (canonical-key for enums; self-contained namespace for discriminated unions) and don't benefit from nesting.
|
|
266
|
+
|
|
267
|
+
The TypeScript converter has had `inlineTypes` since v6 — it produces anonymous inline type literals (a different language mechanism, same `inlineTypes` option name).
|
|
268
|
+
|
|
269
|
+
### Alternative: shared `nameRegistry` + per-slot `namePrefix`
|
|
270
|
+
|
|
271
|
+
Use this when you specifically want flat top-level output (cleaner imports, simpler navigation in IDE outline panels).
|
|
272
|
+
|
|
273
|
+
Pass a shared `nameRegistry: Set<string>` across calls. The converter uses it as its declaration registry and mutates it as new types are emitted. Pair with `namePrefix` for clean per-slot names:
|
|
274
|
+
|
|
275
|
+
```ts
|
|
276
|
+
import { emitKotlin } from "ajsc";
|
|
277
|
+
|
|
278
|
+
const registry = new Set<string>();
|
|
279
|
+
|
|
280
|
+
const body = emitKotlin(bodySchema, {
|
|
281
|
+
nameRegistry: registry,
|
|
282
|
+
namePrefix: "Body",
|
|
283
|
+
rootTypeName: "Body",
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
const response = emitKotlin(responseSchema, {
|
|
287
|
+
nameRegistry: registry,
|
|
288
|
+
namePrefix: "Response",
|
|
289
|
+
rootTypeName: "Response",
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// body.code: `data class Body(...)` + `data class BodyAddress(...)`
|
|
293
|
+
// response.code: `data class Response(...)` + `data class ResponseAddress(...)`
|
|
294
|
+
// Concatenated under one `object Endpoint { ... }` — no name collisions.
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Without `namePrefix`
|
|
298
|
+
|
|
299
|
+
You can pass `nameRegistry` alone — collisions still resolve correctly via the standard fallback path. But the resulting names are awkward:
|
|
300
|
+
|
|
301
|
+
```ts
|
|
302
|
+
const registry = new Set<string>();
|
|
303
|
+
emitKotlin(bodySchema, { nameRegistry: registry, rootTypeName: "Body" });
|
|
304
|
+
emitKotlin(responseSchema, { nameRegistry: registry, rootTypeName: "Response" });
|
|
305
|
+
|
|
306
|
+
// body emits: `data class Address(...)` ← bare name (first-come-first-served)
|
|
307
|
+
// response emits: `data class AddressType(...)` ← postfix fallback (semantically wrong)
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
`AddressType` is a literal type name in the emitted Kotlin/Swift — but it's not a "type of address," it's just another `Address`. The fallback exists because path-collision escalation was designed for single-call use; in cross-call scenarios where every slot's path looks the same, the fallback fires immediately. **Recommendation: always pair `nameRegistry` with a per-slot `namePrefix`.** That's the pattern shown above and the one the integration tests assert against.
|
|
311
|
+
|
|
312
|
+
### Notes
|
|
313
|
+
|
|
314
|
+
`namePrefix` does **not** affect the root type name (use `rootTypeName` for that). It only applies to extracted nested types, and it's applied unconditionally — every nested type gets the prefix, not just colliding ones. That can produce slightly verbose names for unique types (e.g. `BodyContact` even when no other slot has a `Contact`), but it's predictable and avoids the alternative's two-pass complexity.
|
|
315
|
+
|
|
316
|
+
Both `nameRegistry` and `namePrefix` work for all three languages. They're most useful for Kotlin and Swift, which require named declarations for non-primitive types. TypeScript supports them too but rarely needs them — most codegen pipelines use `inlineTypes: true` to flatten nested types instead.
|
|
317
|
+
|
|
318
|
+
### Choosing between `inlineTypes` and `nameRegistry`
|
|
319
|
+
|
|
320
|
+
| If you want… | Use |
|
|
321
|
+
|--------------------------------------------------|----------------------------------------------|
|
|
322
|
+
| Flat top-level decls (`Body`, `BodyAddress`, …) | `nameRegistry` + `namePrefix` |
|
|
323
|
+
| Nested decls inside each parent (idiomatic K/S) | `inlineTypes: true` |
|
|
324
|
+
| TypeScript anonymous inline literals | `inlineTypes: true` (TS-specific mechanism) |
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
234
328
|
## Working with the IR directly
|
|
235
329
|
|
|
236
330
|
If you need the intermediate representation (e.g., to write a custom emitter), use `JSONSchemaConverter`:
|
|
@@ -19,10 +19,12 @@ export interface LanguageProfile {
|
|
|
19
19
|
/** Language identifier emitted as `language` on the converter. */
|
|
20
20
|
language: string;
|
|
21
21
|
/**
|
|
22
|
-
* When true, `getReferencedType` short-circuits IR nodes whose name
|
|
23
|
-
* back to a self-reference
|
|
24
|
-
*
|
|
25
|
-
*
|
|
22
|
+
* When true, `getReferencedType` short-circuits IR nodes whose `name` matches
|
|
23
|
+
* the root name back to a direct self-reference (so e.g. a `Tree` schema with
|
|
24
|
+
* `children: Array<{$ref: "#"}>` emits as `children: Array<Tree>` rather than
|
|
25
|
+
* extracting a duplicate `Child` type). Default: true. All current languages
|
|
26
|
+
* use the default; this hook exists for hypothetical future targets that want
|
|
27
|
+
* a different recursion shape.
|
|
26
28
|
*/
|
|
27
29
|
detectSelfReferenceToRoot?: boolean;
|
|
28
30
|
/**
|
|
@@ -157,6 +159,36 @@ export interface BaseConverterOpts {
|
|
|
157
159
|
* - `"fallback"` — emit a language-specific fallback type (added in later tasks)
|
|
158
160
|
*/
|
|
159
161
|
unsupportedUnions?: "throw" | "fallback";
|
|
162
|
+
/**
|
|
163
|
+
* Shared registry of declaration names already emitted. When provided,
|
|
164
|
+
* the converter uses this Set as its `usedDeclarationNames` and mutates
|
|
165
|
+
* it as new types are emitted. Pass the same Set across multiple emit
|
|
166
|
+
* calls to avoid duplicate-name compile errors when the resulting code
|
|
167
|
+
* blocks are concatenated into one Kotlin/Swift namespace.
|
|
168
|
+
*
|
|
169
|
+
* Names that collide across calls fall through the standard collision-
|
|
170
|
+
* resolution path (parent path escalation, postfix list, then a numeric
|
|
171
|
+
* suffix). Pair with {@link namePrefix} for cleaner per-slot names.
|
|
172
|
+
*
|
|
173
|
+
* Most useful for Kotlin and Swift, which require named declarations for
|
|
174
|
+
* all non-primitive types. Harmless for TypeScript, which can use
|
|
175
|
+
* `inlineTypes: true` to flatten nested types instead.
|
|
176
|
+
*/
|
|
177
|
+
nameRegistry?: Set<string>;
|
|
178
|
+
/**
|
|
179
|
+
* Optional synthetic component prepended to every extracted (nested)
|
|
180
|
+
* type name during ref-type naming. With `namePrefix: "Body"`, a nested
|
|
181
|
+
* `address` field extracts as `BodyAddress` instead of `Address`.
|
|
182
|
+
*
|
|
183
|
+
* Useful when emitting multiple sibling schemas that share an output
|
|
184
|
+
* namespace — pair with {@link nameRegistry} and a per-slot
|
|
185
|
+
* {@link rootTypeName} to avoid all cross-call collisions.
|
|
186
|
+
*
|
|
187
|
+
* Does not affect the root type name (use `rootTypeName` for that).
|
|
188
|
+
* The prefix is sanitized via PascalCase, so non-identifier characters
|
|
189
|
+
* are stripped.
|
|
190
|
+
*/
|
|
191
|
+
namePrefix?: string;
|
|
160
192
|
}
|
|
161
193
|
export declare abstract class BaseConverter implements Partial<ILanguageConverter>, BaseConverterContext {
|
|
162
194
|
abstract readonly code: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseConverter.js","sourceRoot":"","sources":["../../src/converter/BaseConverter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mCAAmC,EACnC,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseConverter.js","sourceRoot":"","sources":["../../src/converter/BaseConverter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ajsc/converter` — extension API for adding new language targets.
|
|
3
|
+
*
|
|
4
|
+
* This subpath exposes the abstract {@link BaseConverter} class, the
|
|
5
|
+
* {@link LanguageProfile} pattern that consolidates per-language behavior,
|
|
6
|
+
* the {@link RefTypeEntry} registry shape, the indent-aware Emitter helper
|
|
7
|
+
* (importable from `./Emitter.js`), the {@link walkIR} tree-walking helper,
|
|
8
|
+
* and the {@link generateInlineNestedDecl} helper used by language emitters
|
|
9
|
+
* to implement `inlineTypes`-style nested-class output.
|
|
10
|
+
*
|
|
11
|
+
* Most consumers do NOT need this subpath — use the function-style emitters
|
|
12
|
+
* (`emitTypescript` / `emitKotlin` / `emitSwift` from `ajsc`) or the
|
|
13
|
+
* class-based subpaths (`ajsc/typescript`, `ajsc/kotlin`, `ajsc/swift`).
|
|
14
|
+
*
|
|
15
|
+
* Reach for `ajsc/converter` only when building a new language target. See
|
|
16
|
+
* `docs/architecture/README.md` § "How to add a new language" for the
|
|
17
|
+
* step-by-step pattern.
|
|
18
|
+
*
|
|
19
|
+
* Note: several public helpers carry an `@internal` JSDoc tag — they are
|
|
20
|
+
* public for cross-module visibility (the `BaseConverterContext` interface
|
|
21
|
+
* requires them), but they are NOT part of the npm package's public surface.
|
|
22
|
+
* Treat `@internal`-tagged symbols as protected.
|
|
23
|
+
*/
|
|
1
24
|
export { BaseConverter, walkIR } from "./BaseConverter.js";
|
|
2
25
|
export type { BaseConverterOpts, RefTypeNamingConfig, RefTypeEntry, GenerateTypeUtils, LanguageProfile, } from "./BaseConverter.js";
|
|
26
|
+
export { generateInlineNestedDecl, indentLines } from "./inlineEmission.js";
|
|
27
|
+
export type { InlineNestedCollector } from "./inlineEmission.js";
|
package/dist/converter/index.js
CHANGED
|
@@ -1,2 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ajsc/converter` — extension API for adding new language targets.
|
|
3
|
+
*
|
|
4
|
+
* This subpath exposes the abstract {@link BaseConverter} class, the
|
|
5
|
+
* {@link LanguageProfile} pattern that consolidates per-language behavior,
|
|
6
|
+
* the {@link RefTypeEntry} registry shape, the indent-aware Emitter helper
|
|
7
|
+
* (importable from `./Emitter.js`), the {@link walkIR} tree-walking helper,
|
|
8
|
+
* and the {@link generateInlineNestedDecl} helper used by language emitters
|
|
9
|
+
* to implement `inlineTypes`-style nested-class output.
|
|
10
|
+
*
|
|
11
|
+
* Most consumers do NOT need this subpath — use the function-style emitters
|
|
12
|
+
* (`emitTypescript` / `emitKotlin` / `emitSwift` from `ajsc`) or the
|
|
13
|
+
* class-based subpaths (`ajsc/typescript`, `ajsc/kotlin`, `ajsc/swift`).
|
|
14
|
+
*
|
|
15
|
+
* Reach for `ajsc/converter` only when building a new language target. See
|
|
16
|
+
* `docs/architecture/README.md` § "How to add a new language" for the
|
|
17
|
+
* step-by-step pattern.
|
|
18
|
+
*
|
|
19
|
+
* Note: several public helpers carry an `@internal` JSDoc tag — they are
|
|
20
|
+
* public for cross-module visibility (the `BaseConverterContext` interface
|
|
21
|
+
* requires them), but they are NOT part of the npm package's public surface.
|
|
22
|
+
* Treat `@internal`-tagged symbols as protected.
|
|
23
|
+
*/
|
|
1
24
|
export { BaseConverter, walkIR } from "./BaseConverter.js";
|
|
25
|
+
export { generateInlineNestedDecl, indentLines } from "./inlineEmission.js";
|
|
2
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/converter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/converter/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ3D,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { BaseConverterContext, GenerateTypeUtils } from "./BaseConverter.js";
|
|
2
|
+
import type { IRNode } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Per-parent collector used by language emitters under `inlineTypes: true` to
|
|
5
|
+
* accumulate nested type declarations destined for the parent's body block.
|
|
6
|
+
*
|
|
7
|
+
* Each invocation of `generate<Lang>ObjectType` allocates its own collector,
|
|
8
|
+
* so grandchildren nest into the child's body — preserving the schema's
|
|
9
|
+
* containment structure rather than flattening to the outermost parent.
|
|
10
|
+
*
|
|
11
|
+
* - `decls`: fully-formatted nested type declaration strings, in emission order.
|
|
12
|
+
* - `bySignature`: within-parent dedup map (signature → already-assigned name).
|
|
13
|
+
* Two properties of the same parent referencing the same shape share one
|
|
14
|
+
* nested decl; two properties of *different* parents do not (each parent's
|
|
15
|
+
* nested decls are scoped to its own namespace).
|
|
16
|
+
*/
|
|
17
|
+
export interface InlineNestedCollector {
|
|
18
|
+
decls: string[];
|
|
19
|
+
bySignature: Map<string, string>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Inline-mode replacement for `getReferencedType`. Returns the name to use in
|
|
23
|
+
* place of an extracted top-level reference, side-effecting `collector` with a
|
|
24
|
+
* fully-formatted nested type declaration when this signature is first seen.
|
|
25
|
+
*
|
|
26
|
+
* Language-specific decl assembly is delegated to `formatDecl` (e.g. Kotlin's
|
|
27
|
+
* `[@Serializable\n]data class ${name}${body}` vs Swift's `${access} struct
|
|
28
|
+
* ${name}: Codable ${body}`). The recursive emit step is delegated to
|
|
29
|
+
* `recurseObjectType` — typically the language's `generate<Lang>ObjectType`
|
|
30
|
+
* function. We pass it our parent's collector-aware utils as a defensive
|
|
31
|
+
* default; the recursive call sees `c.inlineTypes === true` and will still
|
|
32
|
+
* allocate its own collector internally for *its* nested types.
|
|
33
|
+
*
|
|
34
|
+
* Side effect to be aware of: `defaultResolveRefTypeName` reserves the chosen
|
|
35
|
+
* name in `c.usedDeclarationNames`. That reservation is what prevents nested
|
|
36
|
+
* names from colliding with top-level enum / discriminated-union names emitted
|
|
37
|
+
* elsewhere in the same converter run, and it's why a shared `nameRegistry`
|
|
38
|
+
* across emit calls flows through to nested-decl naming.
|
|
39
|
+
*/
|
|
40
|
+
export declare function generateInlineNestedDecl<C extends BaseConverterContext>(c: C, ir: IRNode, collector: InlineNestedCollector, formatDecl: (c: C, name: string, body: string, ir: IRNode) => string, recurseObjectType: (c: C, ir: IRNode, utils: GenerateTypeUtils) => string): string | undefined;
|
|
41
|
+
/** Indents each non-empty line of `text` by `n` spaces. */
|
|
42
|
+
export declare function indentLines(text: string, n: number): string;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { defaultResolveRefTypeName } from "./naming.js";
|
|
2
|
+
/**
|
|
3
|
+
* Inline-mode replacement for `getReferencedType`. Returns the name to use in
|
|
4
|
+
* place of an extracted top-level reference, side-effecting `collector` with a
|
|
5
|
+
* fully-formatted nested type declaration when this signature is first seen.
|
|
6
|
+
*
|
|
7
|
+
* Language-specific decl assembly is delegated to `formatDecl` (e.g. Kotlin's
|
|
8
|
+
* `[@Serializable\n]data class ${name}${body}` vs Swift's `${access} struct
|
|
9
|
+
* ${name}: Codable ${body}`). The recursive emit step is delegated to
|
|
10
|
+
* `recurseObjectType` — typically the language's `generate<Lang>ObjectType`
|
|
11
|
+
* function. We pass it our parent's collector-aware utils as a defensive
|
|
12
|
+
* default; the recursive call sees `c.inlineTypes === true` and will still
|
|
13
|
+
* allocate its own collector internally for *its* nested types.
|
|
14
|
+
*
|
|
15
|
+
* Side effect to be aware of: `defaultResolveRefTypeName` reserves the chosen
|
|
16
|
+
* name in `c.usedDeclarationNames`. That reservation is what prevents nested
|
|
17
|
+
* names from colliding with top-level enum / discriminated-union names emitted
|
|
18
|
+
* elsewhere in the same converter run, and it's why a shared `nameRegistry`
|
|
19
|
+
* across emit calls flows through to nested-decl naming.
|
|
20
|
+
*/
|
|
21
|
+
export function generateInlineNestedDecl(c, ir, collector, formatDecl, recurseObjectType) {
|
|
22
|
+
if (!ir.signature)
|
|
23
|
+
return undefined;
|
|
24
|
+
if ((c.languageProfile.detectSelfReferenceToRoot ?? true) &&
|
|
25
|
+
ir.name &&
|
|
26
|
+
ir.name === c.rootName) {
|
|
27
|
+
return c.rootName;
|
|
28
|
+
}
|
|
29
|
+
const cached = collector.bySignature.get(ir.signature);
|
|
30
|
+
if (cached)
|
|
31
|
+
return cached;
|
|
32
|
+
const name = defaultResolveRefTypeName(c, ir, ir.signature);
|
|
33
|
+
collector.bySignature.set(ir.signature, name);
|
|
34
|
+
const childUtils = {
|
|
35
|
+
getReferencedType: (node) => generateInlineNestedDecl(c, node, collector, formatDecl, recurseObjectType),
|
|
36
|
+
};
|
|
37
|
+
const body = recurseObjectType(c, ir, childUtils);
|
|
38
|
+
collector.decls.push(formatDecl(c, name, body, ir));
|
|
39
|
+
return name;
|
|
40
|
+
}
|
|
41
|
+
/** Indents each non-empty line of `text` by `n` spaces. */
|
|
42
|
+
export function indentLines(text, n) {
|
|
43
|
+
const pad = " ".repeat(n);
|
|
44
|
+
return text
|
|
45
|
+
.split("\n")
|
|
46
|
+
.map((line) => (line.length ? pad + line : line))
|
|
47
|
+
.join("\n");
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=inlineEmission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlineEmission.js","sourceRoot":"","sources":["../../src/converter/inlineEmission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAuBxD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,wBAAwB,CACtC,CAAI,EACJ,EAAU,EACV,SAAgC,EAChC,UAAoE,EACpE,iBAAyE;IAEzE,IAAI,CAAC,EAAE,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAEpC,IACE,CAAC,CAAC,CAAC,eAAe,CAAC,yBAAyB,IAAI,IAAI,CAAC;QACrD,EAAE,CAAC,IAAI;QACP,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EACtB,CAAC;QACD,OAAO,CAAC,CAAC,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,IAAI,GAAG,yBAAyB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5D,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAsB;QACpC,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAC1B,wBAAwB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,CAAC;KAC9E,CAAC;IACF,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IAElD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,CAAS;IACjD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAChD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
package/dist/converter/naming.js
CHANGED
|
@@ -73,9 +73,16 @@ export function getUniqueRefTypeName(c, signature, nodePath) {
|
|
|
73
73
|
let pathsSegmentsToInclude = 1;
|
|
74
74
|
let name = "";
|
|
75
75
|
let postFixIndexToTry = 0;
|
|
76
|
+
// Optional caller-supplied prefix prepended to every proposed name. Useful
|
|
77
|
+
// for cross-call disambiguation when emitting multiple schemas into one
|
|
78
|
+
// namespace (see BaseConverterOpts.namePrefix). PascalCased so non-identifier
|
|
79
|
+
// characters in the source value are sanitized.
|
|
80
|
+
const prefix = c.baseOpts?.namePrefix
|
|
81
|
+
? toPascalCase(c.baseOpts.namePrefix)
|
|
82
|
+
: "";
|
|
76
83
|
while (!name) {
|
|
77
|
-
|
|
78
|
-
|
|
84
|
+
const pathSegment = path.slice(-pathsSegmentsToInclude).map(toPascalCase).join("");
|
|
85
|
+
let proposedName = prefix + pathSegment + postFixes[postFixIndexToTry];
|
|
79
86
|
if (config.stripLeadingAnySymbol && proposedName[0] === "*") {
|
|
80
87
|
proposedName = proposedName.slice(1);
|
|
81
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/converter/naming.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/converter/naming.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,25 @@ import { KotlinBaseConverter } from "./KotlinBaseConverter.js";
|
|
|
5
5
|
export interface KotlinConverterOpts extends BaseConverterOpts {
|
|
6
6
|
serializer?: "kotlinx" | "none";
|
|
7
7
|
packageName?: string;
|
|
8
|
+
/**
|
|
9
|
+
* When true, nested object types are emitted as nested `data class`
|
|
10
|
+
* declarations inside their parent's body block, scoped to the parent's
|
|
11
|
+
* namespace:
|
|
12
|
+
*
|
|
13
|
+
* data class Body(val address: Address, ...) {
|
|
14
|
+
* data class Address(val street: String, ...)
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* rather than as top-level sibling declarations. Useful when emitting
|
|
18
|
+
* multiple sibling schemas into one outer Kotlin `object` namespace —
|
|
19
|
+
* each parent's `Address` is name-scoped (`Body.Address` vs
|
|
20
|
+
* `Response.Address`), eliminating cross-call collisions structurally.
|
|
21
|
+
*
|
|
22
|
+
* Default: `false` (extract to top-level siblings — the historical
|
|
23
|
+
* behavior). Top-level enums and discriminated unions remain extracted
|
|
24
|
+
* even when `inlineTypes` is `true`.
|
|
25
|
+
*/
|
|
26
|
+
inlineTypes?: boolean;
|
|
8
27
|
}
|
|
9
28
|
/**
|
|
10
29
|
* The state-and-method surface that helper modules in `src/kotlin/` need to
|
|
@@ -15,6 +34,7 @@ export interface KotlinConverterOpts extends BaseConverterOpts {
|
|
|
15
34
|
*/
|
|
16
35
|
export interface KotlinConverterContext extends BaseConverterContext {
|
|
17
36
|
readonly isKotlinx: boolean;
|
|
37
|
+
readonly inlineTypes: boolean;
|
|
18
38
|
readonly importsSet: Set<string>;
|
|
19
39
|
readonly contextualNodes: WeakSet<IRNode>;
|
|
20
40
|
readonly docFormatNodes: WeakMap<IRNode, string>;
|
|
@@ -37,6 +57,8 @@ export declare class KotlinConverter extends KotlinBaseConverter implements ILan
|
|
|
37
57
|
/** @internal Mutated by KotlinConverter helper modules; not part of the public API. */
|
|
38
58
|
isKotlinx: boolean;
|
|
39
59
|
/** @internal */
|
|
60
|
+
inlineTypes: boolean;
|
|
61
|
+
/** @internal */
|
|
40
62
|
enumDecls: Map<string, {
|
|
41
63
|
name: string;
|
|
42
64
|
values: string[];
|
|
@@ -21,7 +21,10 @@ export class KotlinConverter extends KotlinBaseConverter {
|
|
|
21
21
|
/** @internal */
|
|
22
22
|
this.sealedDecls = [];
|
|
23
23
|
this.baseOpts = opts;
|
|
24
|
+
if (opts?.nameRegistry)
|
|
25
|
+
this.usedDeclarationNames = opts.nameRegistry;
|
|
24
26
|
this.isKotlinx = (opts?.serializer ?? "kotlinx") === "kotlinx";
|
|
27
|
+
this.inlineTypes = opts?.inlineTypes ?? false;
|
|
25
28
|
this.languageProfile = {
|
|
26
29
|
language: "kotlin",
|
|
27
30
|
processOneOfAsDiscriminatedUnion: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KotlinConverter.js","sourceRoot":"","sources":["../../src/kotlin/KotlinConverter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAQnE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"KotlinConverter.js","sourceRoot":"","sources":["../../src/kotlin/KotlinConverter.ts"],"names":[],"mappings":"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"}
|
package/dist/kotlin/index.d.ts
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ajsc/kotlin` — class-based Kotlin converter and identifier utilities.
|
|
3
|
+
*
|
|
4
|
+
* Most consumers should prefer the function-style `emitKotlin` exported from
|
|
5
|
+
* the package root (`ajsc`). Use this subpath when you need direct access to
|
|
6
|
+
* the {@link KotlinConverter} class for subclassing, or to the identifier
|
|
7
|
+
* sanitization helpers (`sanitizeKotlinIdentifier`, `KOTLIN_RESERVED`) when
|
|
8
|
+
* building tooling around Kotlin output.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link ../docs/architecture/README.md} for the layered design.
|
|
11
|
+
*/
|
|
1
12
|
export * from "./KotlinBaseConverter.js";
|
|
2
13
|
export * from "./KotlinConverter.js";
|
package/dist/kotlin/index.js
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ajsc/kotlin` — class-based Kotlin converter and identifier utilities.
|
|
3
|
+
*
|
|
4
|
+
* Most consumers should prefer the function-style `emitKotlin` exported from
|
|
5
|
+
* the package root (`ajsc`). Use this subpath when you need direct access to
|
|
6
|
+
* the {@link KotlinConverter} class for subclassing, or to the identifier
|
|
7
|
+
* sanitization helpers (`sanitizeKotlinIdentifier`, `KOTLIN_RESERVED`) when
|
|
8
|
+
* building tooling around Kotlin output.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link ../docs/architecture/README.md} for the layered design.
|
|
11
|
+
*/
|
|
1
12
|
export * from "./KotlinBaseConverter.js";
|
|
2
13
|
export * from "./KotlinConverter.js";
|
|
3
14
|
//# sourceMappingURL=index.js.map
|
package/dist/kotlin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/kotlin/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/kotlin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
|
|
@@ -8,5 +8,11 @@ export declare function isPropertyNullable(prop: IRNode): boolean;
|
|
|
8
8
|
* KDoc comments for unmodelled `additionalProperties`, per-property
|
|
9
9
|
* `@SerialName`/`@Contextual` annotations, and nullable/default-value suffixes
|
|
10
10
|
* driven by `required` and union-includes-null analysis.
|
|
11
|
+
*
|
|
12
|
+
* When `c.inlineTypes` is true, nested object types extracted from this node's
|
|
13
|
+
* properties are emitted as nested `data class` declarations inside this
|
|
14
|
+
* node's body block — `(\n ...,\n) {\n data class Inner(...)\n}` — instead
|
|
15
|
+
* of being registered as top-level siblings. The shared
|
|
16
|
+
* {@link generateInlineNestedDecl} helper drives the per-parent collector.
|
|
11
17
|
*/
|
|
12
18
|
export declare function generateKotlinObjectType(c: KotlinConverterContext, ir: IRNode, utils: GenerateTypeUtils): string;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { formatPrimitiveDefault } from "../converter/formatDefault.js";
|
|
2
|
+
import { generateInlineNestedDecl, indentLines, } from "../converter/inlineEmission.js";
|
|
2
3
|
import { sanitizeKotlinIdentifier } from "./KotlinBaseConverter.js";
|
|
3
4
|
import { generateKotlinType } from "./typeMapper.js";
|
|
4
|
-
import { serialNameAnnotation, contextualAnnotation, KOTLIN_ANNOTATION_IMPORTS } from "./annotations.js";
|
|
5
|
+
import { serialNameAnnotation, contextualAnnotation, serializableAnnotation, KOTLIN_ANNOTATION_IMPORTS, } from "./annotations.js";
|
|
5
6
|
/** Returns true if the property is optional or its type union includes null. */
|
|
6
7
|
export function isPropertyNullable(prop) {
|
|
7
8
|
if (!prop.required)
|
|
@@ -11,11 +12,25 @@ export function isPropertyNullable(prop) {
|
|
|
11
12
|
}
|
|
12
13
|
return false;
|
|
13
14
|
}
|
|
15
|
+
/** Language-specific decl assembly for Kotlin nested data classes. */
|
|
16
|
+
function formatKotlinNestedDecl(c, name, body, ir) {
|
|
17
|
+
const annPrefix = c.isKotlinx ? serializableAnnotation() + "\n" : "";
|
|
18
|
+
if (c.isKotlinx)
|
|
19
|
+
c.importsSet.add(KOTLIN_ANNOTATION_IMPORTS.serializable);
|
|
20
|
+
const docPrefix = ir.title || ir.description ? `/** ${ir.title || ir.description} */\n` : "";
|
|
21
|
+
return `${docPrefix}${annPrefix}data class ${name}${body}`;
|
|
22
|
+
}
|
|
14
23
|
/**
|
|
15
24
|
* Emits a Kotlin data-class constructor body for an object IR node, including
|
|
16
25
|
* KDoc comments for unmodelled `additionalProperties`, per-property
|
|
17
26
|
* `@SerialName`/`@Contextual` annotations, and nullable/default-value suffixes
|
|
18
27
|
* driven by `required` and union-includes-null analysis.
|
|
28
|
+
*
|
|
29
|
+
* When `c.inlineTypes` is true, nested object types extracted from this node's
|
|
30
|
+
* properties are emitted as nested `data class` declarations inside this
|
|
31
|
+
* node's body block — `(\n ...,\n) {\n data class Inner(...)\n}` — instead
|
|
32
|
+
* of being registered as top-level siblings. The shared
|
|
33
|
+
* {@link generateInlineNestedDecl} helper drives the per-parent collector.
|
|
19
34
|
*/
|
|
20
35
|
export function generateKotlinObjectType(c, ir, utils) {
|
|
21
36
|
// Record additionalProperties doc note for the declaration emission step
|
|
@@ -36,13 +51,21 @@ export function generateKotlinObjectType(c, ir, utils) {
|
|
|
36
51
|
if (!ir.properties || Object.keys(ir.properties).length === 0) {
|
|
37
52
|
return "()";
|
|
38
53
|
}
|
|
54
|
+
const collector = c.inlineTypes
|
|
55
|
+
? { decls: [], bySignature: new Map() }
|
|
56
|
+
: null;
|
|
57
|
+
const effectiveUtils = collector
|
|
58
|
+
? {
|
|
59
|
+
getReferencedType: (node) => generateInlineNestedDecl(c, node, collector, formatKotlinNestedDecl, generateKotlinObjectType),
|
|
60
|
+
}
|
|
61
|
+
: utils;
|
|
39
62
|
const lines = Object.entries(ir.properties).map(([key, prop]) => {
|
|
40
63
|
const name = sanitizeKotlinIdentifier(key);
|
|
41
64
|
if (name !== key && c.isKotlinx) {
|
|
42
65
|
c.propertySerialNames.set(prop, key);
|
|
43
66
|
c.importsSet.add(KOTLIN_ANNOTATION_IMPORTS.serialName);
|
|
44
67
|
}
|
|
45
|
-
const type = generateKotlinType(c, prop,
|
|
68
|
+
const type = generateKotlinType(c, prop, effectiveUtils);
|
|
46
69
|
const nullable = isPropertyNullable(prop);
|
|
47
70
|
const def = formatPrimitiveDefault(prop.defaultValue);
|
|
48
71
|
// Optional (not required) → ? = <default|null>. Required-but-nullable → ? (no default unless schema-provided).
|
|
@@ -69,6 +92,11 @@ export function generateKotlinObjectType(c, ir, utils) {
|
|
|
69
92
|
const annPrefix = annotations.length > 0 ? annotations.join("\n") + "\n" : "";
|
|
70
93
|
return `${annPrefix} val ${name}: ${type}${suffix}`;
|
|
71
94
|
});
|
|
72
|
-
|
|
95
|
+
const paramBody = `(\n${lines.join(",\n")},\n)`;
|
|
96
|
+
if (!collector || collector.decls.length === 0) {
|
|
97
|
+
return paramBody;
|
|
98
|
+
}
|
|
99
|
+
const indented = collector.decls.map((d) => indentLines(d, 2)).join("\n\n");
|
|
100
|
+
return `${paramBody} {\n${indented}\n}`;
|
|
73
101
|
}
|
|
74
102
|
//# sourceMappingURL=objectEmitter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectEmitter.js","sourceRoot":"","sources":["../../src/kotlin/objectEmitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"objectEmitter.js","sourceRoot":"","sources":["../../src/kotlin/objectEmitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,26 @@ import { SwiftBaseConverter } from "./SwiftBaseConverter.js";
|
|
|
5
5
|
export interface SwiftConverterOpts extends BaseConverterOpts {
|
|
6
6
|
serializer?: "codable" | "none";
|
|
7
7
|
accessLevel?: "public" | "internal";
|
|
8
|
+
/**
|
|
9
|
+
* When true, nested object types are emitted as nested `struct`
|
|
10
|
+
* declarations inside their parent's body, scoped to the parent's
|
|
11
|
+
* namespace:
|
|
12
|
+
*
|
|
13
|
+
* public struct Body: Codable {
|
|
14
|
+
* public let address: Address
|
|
15
|
+
* public struct Address: Codable { public let street: String }
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* rather than as top-level sibling declarations. Useful when emitting
|
|
19
|
+
* multiple sibling schemas into one outer Swift `enum` namespace —
|
|
20
|
+
* each parent's `Address` is name-scoped (`Body.Address` vs
|
|
21
|
+
* `Response.Address`), eliminating cross-call collisions structurally.
|
|
22
|
+
*
|
|
23
|
+
* Default: `false` (extract to top-level siblings — the historical
|
|
24
|
+
* behavior). Top-level enums and discriminated enums remain extracted
|
|
25
|
+
* even when `inlineTypes` is `true`.
|
|
26
|
+
*/
|
|
27
|
+
inlineTypes?: boolean;
|
|
8
28
|
}
|
|
9
29
|
/**
|
|
10
30
|
* The state-and-method surface that helper modules in `src/swift/` need to
|
|
@@ -16,6 +36,7 @@ export interface SwiftConverterOpts extends BaseConverterOpts {
|
|
|
16
36
|
export interface SwiftConverterContext extends BaseConverterContext {
|
|
17
37
|
readonly isCodable: boolean;
|
|
18
38
|
readonly accessLevel: "public" | "internal";
|
|
39
|
+
readonly inlineTypes: boolean;
|
|
19
40
|
needsAnyCodable: boolean;
|
|
20
41
|
readonly importsSet: Set<string>;
|
|
21
42
|
readonly docFormatNodes: WeakMap<IRNode, string>;
|
|
@@ -39,6 +60,8 @@ export declare class SwiftConverter extends SwiftBaseConverter implements ILangu
|
|
|
39
60
|
/** @internal */
|
|
40
61
|
accessLevel: "public" | "internal";
|
|
41
62
|
/** @internal */
|
|
63
|
+
inlineTypes: boolean;
|
|
64
|
+
/** @internal */
|
|
42
65
|
enumDecls: Map<string, {
|
|
43
66
|
name: string;
|
|
44
67
|
values: string[];
|
|
@@ -17,8 +17,11 @@ export class SwiftConverter extends SwiftBaseConverter {
|
|
|
17
17
|
/** @internal */
|
|
18
18
|
this.needsAnyCodable = false;
|
|
19
19
|
this.baseOpts = opts;
|
|
20
|
+
if (opts?.nameRegistry)
|
|
21
|
+
this.usedDeclarationNames = opts.nameRegistry;
|
|
20
22
|
this.isCodable = (opts?.serializer ?? "codable") === "codable";
|
|
21
23
|
this.accessLevel = opts?.accessLevel ?? "public";
|
|
24
|
+
this.inlineTypes = opts?.inlineTypes ?? false;
|
|
22
25
|
this.languageProfile = {
|
|
23
26
|
language: "swift",
|
|
24
27
|
processOneOfAsDiscriminatedUnion: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwiftConverter.js","sourceRoot":"","sources":["../../src/swift/SwiftConverter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAQnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"SwiftConverter.js","sourceRoot":"","sources":["../../src/swift/SwiftConverter.ts"],"names":[],"mappings":"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"}
|
package/dist/swift/index.d.ts
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ajsc/swift` — class-based Swift converter and identifier utilities.
|
|
3
|
+
*
|
|
4
|
+
* Most consumers should prefer the function-style `emitSwift` exported from
|
|
5
|
+
* the package root (`ajsc`). Use this subpath when you need direct access to
|
|
6
|
+
* the {@link SwiftConverter} class for subclassing, or to the identifier
|
|
7
|
+
* sanitization helpers (`sanitizeSwiftIdentifier`, `SWIFT_RESERVED`) when
|
|
8
|
+
* building tooling around Swift output.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link ../docs/architecture/README.md} for the layered design.
|
|
11
|
+
*/
|
|
1
12
|
export * from "./SwiftBaseConverter.js";
|
|
2
13
|
export * from "./SwiftConverter.js";
|
package/dist/swift/index.js
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ajsc/swift` — class-based Swift converter and identifier utilities.
|
|
3
|
+
*
|
|
4
|
+
* Most consumers should prefer the function-style `emitSwift` exported from
|
|
5
|
+
* the package root (`ajsc`). Use this subpath when you need direct access to
|
|
6
|
+
* the {@link SwiftConverter} class for subclassing, or to the identifier
|
|
7
|
+
* sanitization helpers (`sanitizeSwiftIdentifier`, `SWIFT_RESERVED`) when
|
|
8
|
+
* building tooling around Swift output.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link ../docs/architecture/README.md} for the layered design.
|
|
11
|
+
*/
|
|
1
12
|
export * from "./SwiftBaseConverter.js";
|
|
2
13
|
export * from "./SwiftConverter.js";
|
|
3
14
|
//# sourceMappingURL=index.js.map
|
package/dist/swift/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swift/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swift/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC"}
|
|
@@ -8,5 +8,10 @@ export declare function isPropertyNullable(prop: IRNode): boolean;
|
|
|
8
8
|
* declarations, doc comments for formatted strings, and a `CodingKeys` block
|
|
9
9
|
* when codable conformance requires JSON-key remapping (kebab/snake renames
|
|
10
10
|
* or backticked reserved words).
|
|
11
|
+
*
|
|
12
|
+
* When `c.inlineTypes` is true, nested object types extracted from this node's
|
|
13
|
+
* properties are emitted as nested `struct` declarations inside this node's
|
|
14
|
+
* body block instead of being registered as top-level siblings. The shared
|
|
15
|
+
* {@link generateInlineNestedDecl} helper drives the per-parent collector.
|
|
11
16
|
*/
|
|
12
17
|
export declare function generateSwiftObjectType(c: SwiftConverterContext, ir: IRNode, utils: GenerateTypeUtils): string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { formatPrimitiveDefault } from "../converter/formatDefault.js";
|
|
2
|
+
import { generateInlineNestedDecl, indentLines, } from "../converter/inlineEmission.js";
|
|
2
3
|
import { sanitizeSwiftIdentifier } from "./SwiftBaseConverter.js";
|
|
3
4
|
import { generateSwiftType } from "./typeMapper.js";
|
|
4
5
|
/** Returns true if the property is optional or its type union includes null. */
|
|
@@ -9,11 +10,22 @@ export function isPropertyNullable(prop) {
|
|
|
9
10
|
return true;
|
|
10
11
|
return false;
|
|
11
12
|
}
|
|
13
|
+
/** Language-specific decl assembly for Swift nested structs. */
|
|
14
|
+
function formatSwiftNestedDecl(c, name, body, ir) {
|
|
15
|
+
const conformance = c.isCodable ? ": Codable" : "";
|
|
16
|
+
const docPrefix = ir.title || ir.description ? `/// ${ir.title || ir.description}\n` : "";
|
|
17
|
+
return `${docPrefix}${c.accessLevel} struct ${name}${conformance} ${body}`;
|
|
18
|
+
}
|
|
12
19
|
/**
|
|
13
20
|
* Emits a Swift struct body for an object IR node, including the property
|
|
14
21
|
* declarations, doc comments for formatted strings, and a `CodingKeys` block
|
|
15
22
|
* when codable conformance requires JSON-key remapping (kebab/snake renames
|
|
16
23
|
* or backticked reserved words).
|
|
24
|
+
*
|
|
25
|
+
* When `c.inlineTypes` is true, nested object types extracted from this node's
|
|
26
|
+
* properties are emitted as nested `struct` declarations inside this node's
|
|
27
|
+
* body block instead of being registered as top-level siblings. The shared
|
|
28
|
+
* {@link generateInlineNestedDecl} helper drives the per-parent collector.
|
|
17
29
|
*/
|
|
18
30
|
export function generateSwiftObjectType(c, ir, utils) {
|
|
19
31
|
if (ir.additionalProperties && typeof ir.additionalProperties !== "boolean") {
|
|
@@ -31,11 +43,19 @@ export function generateSwiftObjectType(c, ir, utils) {
|
|
|
31
43
|
if (!ir.properties || Object.keys(ir.properties).length === 0) {
|
|
32
44
|
return "{}";
|
|
33
45
|
}
|
|
46
|
+
const collector = c.inlineTypes
|
|
47
|
+
? { decls: [], bySignature: new Map() }
|
|
48
|
+
: null;
|
|
49
|
+
const effectiveUtils = collector
|
|
50
|
+
? {
|
|
51
|
+
getReferencedType: (node) => generateInlineNestedDecl(c, node, collector, formatSwiftNestedDecl, generateSwiftObjectType),
|
|
52
|
+
}
|
|
53
|
+
: utils;
|
|
34
54
|
const propInfos = [];
|
|
35
55
|
const lines = [];
|
|
36
56
|
for (const [key, prop] of Object.entries(ir.properties)) {
|
|
37
57
|
const swiftName = sanitizeSwiftIdentifier(key);
|
|
38
|
-
const type = generateSwiftType(c, prop,
|
|
58
|
+
const type = generateSwiftType(c, prop, effectiveUtils);
|
|
39
59
|
const nullable = isPropertyNullable(prop);
|
|
40
60
|
const def = formatPrimitiveDefault(prop.defaultValue);
|
|
41
61
|
let suffix;
|
|
@@ -49,13 +69,9 @@ export function generateSwiftObjectType(c, ir, utils) {
|
|
|
49
69
|
lines.push(` /// ${c.docFormatNodes.get(prop)}`);
|
|
50
70
|
}
|
|
51
71
|
lines.push(` ${c.accessLevel} let ${swiftName}: ${type}${suffix}`);
|
|
52
|
-
// Need a CodingKey if the swift name differs from the JSON key (kebab/snake renames)
|
|
53
|
-
// OR if the swift name uses backticks (reserved word)
|
|
54
72
|
const needsCodingKey = swiftName !== key || swiftName.startsWith("`");
|
|
55
73
|
propInfos.push({ jsonKey: key, swiftName, needsCodingKey });
|
|
56
74
|
}
|
|
57
|
-
// CodingKeys block under codable when any prop needs mapping.
|
|
58
|
-
// Swift requires ALL properties be listed when CodingKeys is present.
|
|
59
75
|
if (c.isCodable && propInfos.some((p) => p.needsCodingKey)) {
|
|
60
76
|
const cases = propInfos.map(({ jsonKey, swiftName }) => {
|
|
61
77
|
return ` case ${swiftName} = "${jsonKey}"`;
|
|
@@ -65,6 +81,14 @@ export function generateSwiftObjectType(c, ir, utils) {
|
|
|
65
81
|
lines.push(...cases);
|
|
66
82
|
lines.push(" }");
|
|
67
83
|
}
|
|
84
|
+
if (collector && collector.decls.length > 0) {
|
|
85
|
+
lines.push("");
|
|
86
|
+
for (let i = 0; i < collector.decls.length; i++) {
|
|
87
|
+
lines.push(indentLines(collector.decls[i], 2));
|
|
88
|
+
if (i < collector.decls.length - 1)
|
|
89
|
+
lines.push("");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
68
92
|
return `{\n${lines.join("\n")}\n}`;
|
|
69
93
|
}
|
|
70
94
|
//# sourceMappingURL=structEmitter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structEmitter.js","sourceRoot":"","sources":["../../src/swift/structEmitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"structEmitter.js","sourceRoot":"","sources":["../../src/swift/structEmitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,8 @@ export class TypescriptConverter extends TypescriptBaseConverter {
|
|
|
17
17
|
this.imports = [];
|
|
18
18
|
this.opts = opts;
|
|
19
19
|
this.baseOpts = opts;
|
|
20
|
+
if (opts?.nameRegistry)
|
|
21
|
+
this.usedDeclarationNames = opts.nameRegistry;
|
|
20
22
|
this.inlineTypes = opts?.inlineTypes ?? false;
|
|
21
23
|
this.enumStyle = opts?.enumStyle ?? "union";
|
|
22
24
|
this.emitJSDoc = !this.inlineTypes && (opts?.jsdoc ?? false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypescriptConverter.js","sourceRoot":"","sources":["../../src/typescript/TypescriptConverter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TypescriptConverter.js","sourceRoot":"","sources":["../../src/typescript/TypescriptConverter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ajsc/typescript` — class-based TypeScript converter.
|
|
3
|
+
*
|
|
4
|
+
* Most consumers should prefer the function-style `emitTypescript` exported
|
|
5
|
+
* from the package root (`ajsc`). Use this subpath when you need direct access
|
|
6
|
+
* to the {@link TypescriptConverter} class — for subclassing or advanced
|
|
7
|
+
* inspection of the converter's internal state.
|
|
8
|
+
*
|
|
9
|
+
* @see {@link ../docs/architecture/README.md} for the layered design.
|
|
10
|
+
*/
|
|
1
11
|
export * from "./TypescriptBaseConverter.js";
|
|
2
12
|
export * from "./TypescriptConverter.js";
|
package/dist/typescript/index.js
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ajsc/typescript` — class-based TypeScript converter.
|
|
3
|
+
*
|
|
4
|
+
* Most consumers should prefer the function-style `emitTypescript` exported
|
|
5
|
+
* from the package root (`ajsc`). Use this subpath when you need direct access
|
|
6
|
+
* to the {@link TypescriptConverter} class — for subclassing or advanced
|
|
7
|
+
* inspection of the converter's internal state.
|
|
8
|
+
*
|
|
9
|
+
* @see {@link ../docs/architecture/README.md} for the layered design.
|
|
10
|
+
*/
|
|
1
11
|
export * from "./TypescriptBaseConverter.js";
|
|
2
12
|
export * from "./TypescriptConverter.js";
|
|
3
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/typescript/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/typescript/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ajsc",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.2.0",
|
|
4
4
|
"description": "Another Json-Schema Converter",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -70,7 +70,8 @@
|
|
|
70
70
|
"share"
|
|
71
71
|
],
|
|
72
72
|
"files": [
|
|
73
|
-
"dist"
|
|
73
|
+
"dist",
|
|
74
|
+
"CHANGELOG.md"
|
|
74
75
|
],
|
|
75
76
|
"author": "coryrobinson42@gmail.com",
|
|
76
77
|
"license": "MIT",
|