@contractkit/plugin-typescript 0.17.5 → 0.18.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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">23.47% </span>
26
+ <span class="strong">36.52% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>27/115</span>
28
+ <span class='fraction'>42/115</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">18.84% </span>
33
+ <span class="strong">27.53% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>13/69</span>
35
+ <span class='fraction'>19/69</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">58.33% </span>
40
+ <span class="strong">75% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>7/12</span>
42
+ <span class='fraction'>9/12</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">23.71% </span>
47
+ <span class="strong">38.14% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>23/97</span>
49
+ <span class='fraction'>37/97</span>
50
50
  </div>
51
51
 
52
52
 
@@ -258,28 +258,28 @@
258
258
  <span class="cline-any cline-yes">1x</span>
259
259
  <span class="cline-any cline-neutral">&nbsp;</span>
260
260
  <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-yes">7x</span>
261
+ <span class="cline-any cline-yes">16x</span>
262
262
  <span class="cline-any cline-neutral">&nbsp;</span>
263
263
  <span class="cline-any cline-neutral">&nbsp;</span>
264
264
  <span class="cline-any cline-neutral">&nbsp;</span>
265
- <span class="cline-any cline-yes">7x</span>
266
- <span class="cline-any cline-yes">7x</span>
265
+ <span class="cline-any cline-yes">12x</span>
266
+ <span class="cline-any cline-yes">12x</span>
267
267
  <span class="cline-any cline-neutral">&nbsp;</span>
268
268
  <span class="cline-any cline-neutral">&nbsp;</span>
269
269
  <span class="cline-any cline-neutral">&nbsp;</span>
270
- <span class="cline-any cline-yes">14x</span>
271
- <span class="cline-any cline-yes">16x</span>
272
- <span class="cline-any cline-yes">14x</span>
273
- <span class="cline-any cline-yes">14x</span>
274
- <span class="cline-any cline-yes">14x</span>
275
- <span class="cline-any cline-yes">16x</span>
276
- <span class="cline-any cline-yes">48x</span>
270
+ <span class="cline-any cline-yes">18x</span>
271
+ <span class="cline-any cline-yes">21x</span>
272
+ <span class="cline-any cline-yes">18x</span>
273
+ <span class="cline-any cline-yes">18x</span>
274
+ <span class="cline-any cline-yes">18x</span>
275
+ <span class="cline-any cline-yes">21x</span>
276
+ <span class="cline-any cline-yes">63x</span>
277
277
  <span class="cline-any cline-no">&nbsp;</span>
278
278
  <span class="cline-any cline-no">&nbsp;</span>
279
279
  <span class="cline-any cline-neutral">&nbsp;</span>
280
280
  <span class="cline-any cline-neutral">&nbsp;</span>
281
281
  <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-yes">14x</span>
282
+ <span class="cline-any cline-yes">18x</span>
283
283
  <span class="cline-any cline-neutral">&nbsp;</span>
284
284
  <span class="cline-any cline-neutral">&nbsp;</span>
285
285
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -330,16 +330,16 @@
330
330
  <span class="cline-any cline-neutral">&nbsp;</span>
331
331
  <span class="cline-any cline-neutral">&nbsp;</span>
332
332
  <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-no">&nbsp;</span>
334
- <span class="cline-any cline-no">&nbsp;</span>
335
- <span class="cline-any cline-no">&nbsp;</span>
336
- <span class="cline-any cline-no">&nbsp;</span>
337
- <span class="cline-any cline-no">&nbsp;</span>
338
- <span class="cline-any cline-no">&nbsp;</span>
333
+ <span class="cline-any cline-yes">5x</span>
334
+ <span class="cline-any cline-yes">5x</span>
335
+ <span class="cline-any cline-yes">5x</span>
336
+ <span class="cline-any cline-yes">5x</span>
337
+ <span class="cline-any cline-yes">5x</span>
338
+ <span class="cline-any cline-yes">5x</span>
339
339
  <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-no">&nbsp;</span>
341
- <span class="cline-any cline-no">&nbsp;</span>
342
- <span class="cline-any cline-no">&nbsp;</span>
340
+ <span class="cline-any cline-yes">5x</span>
341
+ <span class="cline-any cline-yes">5x</span>
342
+ <span class="cline-any cline-yes">5x</span>
343
343
  <span class="cline-any cline-no">&nbsp;</span>
344
344
  <span class="cline-any cline-neutral">&nbsp;</span>
345
345
  <span class="cline-any cline-no">&nbsp;</span>
@@ -373,22 +373,22 @@
373
373
  <span class="cline-any cline-neutral">&nbsp;</span>
374
374
  <span class="cline-any cline-neutral">&nbsp;</span>
375
375
  <span class="cline-any cline-neutral">&nbsp;</span>
376
- <span class="cline-any cline-no">&nbsp;</span>
377
- <span class="cline-any cline-no">&nbsp;</span>
376
+ <span class="cline-any cline-yes">4x</span>
377
+ <span class="cline-any cline-yes">4x</span>
378
378
  <span class="cline-any cline-no">&nbsp;</span>
379
379
  <span class="cline-any cline-no">&nbsp;</span>
380
380
  <span class="cline-any cline-no">&nbsp;</span>
381
381
  <span class="cline-any cline-no">&nbsp;</span>
382
382
  <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-no">&nbsp;</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
383
+ <span class="cline-any cline-yes">4x</span>
384
+ <span class="cline-any cline-yes">4x</span>
385
385
  <span class="cline-any cline-no">&nbsp;</span>
386
386
  <span class="cline-any cline-no">&nbsp;</span>
387
387
  <span class="cline-any cline-neutral">&nbsp;</span>
388
388
  <span class="cline-any cline-neutral">&nbsp;</span>
389
389
  <span class="cline-any cline-no">&nbsp;</span>
390
390
  <span class="cline-any cline-neutral">&nbsp;</span>
391
- <span class="cline-any cline-no">&nbsp;</span>
391
+ <span class="cline-any cline-yes">4x</span>
392
392
  <span class="cline-any cline-neutral">&nbsp;</span>
393
393
  <span class="cline-any cline-neutral">&nbsp;</span>
394
394
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -511,23 +511,23 @@ export function computeContractOutPath(
511
511
  &nbsp;
512
512
  // ─── SDK output paths ──────────────────────────────────────────────────────
513
513
  &nbsp;
514
- export function <span class="fstat-no" title="function not covered" >computeSdkOutPath(</span>
514
+ export function computeSdkOutPath(
515
515
  filePath: string,
516
516
  rootDir: string,
517
517
  clientOutput: string | undefined,
518
518
  commonRoot: string,
519
- meta: Record&lt;string, string&gt; = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
519
+ meta: Record&lt;string, string&gt; = {},
520
520
  ): string | null {
521
- <span class="cstat-no" title="statement not covered" > if (!filePath.endsWith('.ck')) <span class="cstat-no" title="statement not covered" >return null;</span></span>
522
- const baseName = <span class="cstat-no" title="statement not covered" >filePath.split('/').pop()!;</span>
523
- const defaultOutName = <span class="cstat-no" title="statement not covered" >baseName.replace(/\.ck$/, '.client.ts');</span>
524
- const <span class="cstat-no" title="statement not covered" >baseOutDir = resolve(rootDir);</span>
525
- const <span class="cstat-no" title="statement not covered" >relDir = relative(commonRoot, dirname(filePath));</span>
526
- const filename = <span class="cstat-no" title="statement not covered" >baseName.replace(/\.ck$/, '');</span>
521
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!filePath.endsWith('.ck')) <span class="cstat-no" title="statement not covered" >return null;</span>
522
+ const baseName = filePath.split('/').pop()!;
523
+ const defaultOutName = baseName.replace(/\.ck$/, '.client.ts');
524
+ const baseOutDir = resolve(rootDir);
525
+ const relDir = relative(commonRoot, dirname(filePath));
526
+ const filename = baseName.replace(/\.ck$/, '');
527
527
  &nbsp;
528
- <span class="cstat-no" title="statement not covered" > if (clientOutput &amp;&amp; TEMPLATE_VAR_RE.test(clientOutput)) {</span>
529
- const resolved = <span class="cstat-no" title="statement not covered" >resolveTemplate(clientOutput, { filename, dir: relDir, ext: 'ck', ...meta });</span>
530
- <span class="cstat-no" title="statement not covered" > if (includesFilename(resolved)) <span class="cstat-no" title="statement not covered" >return join(baseOutDir, resolved);</span></span>
528
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (clientOutput &amp;&amp; TEMPLATE_VAR_RE.test(clientOutput)) {
529
+ const resolved = resolveTemplate(clientOutput, { filename, dir: relDir, ext: 'ck', ...meta });
530
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (includesFilename(resolved)) return join(baseOutDir, resolved);
531
531
  <span class="cstat-no" title="statement not covered" > return join(baseOutDir, resolved, defaultOutName);</span>
532
532
  }
533
533
  <span class="cstat-no" title="statement not covered" > if (clientOutput) {</span>
@@ -560,23 +560,23 @@ export function <span class="fstat-no" title="function not covered" >computeSdkT
560
560
  <span class="cstat-no" title="statement not covered" > return join(baseOutDir, typeOutput, relDir, defaultOutName);</span>
561
561
  }
562
562
  &nbsp;
563
- export function <span class="fstat-no" title="function not covered" >generateBarrelFiles(c</span>ontractPaths: string[]): { outPath: string; content: string }[] {
564
- const byDir = <span class="cstat-no" title="statement not covered" >new Map&lt;string, string[]&gt;();</span>
565
- <span class="cstat-no" title="statement not covered" > for (const outPath of contractPaths) {</span>
563
+ export function generateBarrelFiles(contractPaths: string[]): { outPath: string; content: string }[] {
564
+ const byDir = new Map&lt;string, string[]&gt;();
565
+ for (const outPath of contractPaths) {
566
566
  const <span class="cstat-no" title="statement not covered" >dir = dirname(outPath);</span>
567
567
  const group = <span class="cstat-no" title="statement not covered" >byDir.get(dir) ?? [];</span>
568
568
  <span class="cstat-no" title="statement not covered" > group.push(outPath);</span>
569
569
  <span class="cstat-no" title="statement not covered" > byDir.set(dir, group);</span>
570
570
  }
571
- const results: { outPath: string; content: string }[] = <span class="cstat-no" title="statement not covered" >[];</span>
572
- <span class="cstat-no" title="statement not covered" > for (const [dir, files] of byDir) {</span>
571
+ const results: { outPath: string; content: string }[] = [];
572
+ for (const [dir, files] of byDir) {
573
573
  const exports = <span class="cstat-no" title="statement not covered" >files</span>
574
574
  .map(<span class="fstat-no" title="function not covered" >f =&gt; <span class="cstat-no" title="statement not covered" >`</span>export * from './${f.split('/').pop()!.replace(/\.ts$/, '.js')}';`)</span>
575
575
  .sort()
576
576
  .join('\n');
577
577
  <span class="cstat-no" title="statement not covered" > results.push({ outPath: join(dir, 'index.ts'), content: `// Auto-generated barrel file\n${exports}\n` });</span>
578
578
  }
579
- <span class="cstat-no" title="statement not covered" > return results;</span>
579
+ return results;
580
580
  }
581
581
  &nbsp;
582
582
  export function <span class="fstat-no" title="function not covered" >computePubliclyReachableTypes(</span>
@@ -634,7 +634,7 @@ export function <span class="fstat-no" title="function not covered" >computePubl
634
634
  <div class='footer quiet pad2 space-top1 center small'>
635
635
  Code coverage generated by
636
636
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
637
- at 2026-05-06T12:37:14.475Z
637
+ at 2026-05-06T16:22:17.029Z
638
638
  </div>
639
639
  <script src="../prettify.js"></script>
640
640
  <script>
@@ -254,7 +254,7 @@
254
254
  <span class="cline-any cline-neutral">&nbsp;</span>
255
255
  <span class="cline-any cline-neutral">&nbsp;</span>
256
256
  <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-yes">343x</span>
257
+ <span class="cline-any cline-yes">347x</span>
258
258
  <span class="cline-any cline-neutral">&nbsp;</span>
259
259
  <span class="cline-any cline-yes">170x</span>
260
260
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -281,7 +281,7 @@
281
281
  <span class="cline-any cline-neutral">&nbsp;</span>
282
282
  <span class="cline-any cline-yes">4x</span>
283
283
  <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-yes">115x</span>
284
+ <span class="cline-any cline-yes">119x</span>
285
285
  <span class="cline-any cline-neutral">&nbsp;</span>
286
286
  <span class="cline-any cline-yes">2x</span>
287
287
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -374,7 +374,7 @@
374
374
  <span class="cline-any cline-neutral">&nbsp;</span>
375
375
  <span class="cline-any cline-neutral">&nbsp;</span>
376
376
  <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-yes">91x</span>
377
+ <span class="cline-any cline-yes">95x</span>
378
378
  <span class="cline-any cline-yes">8x</span>
379
379
  <span class="cline-any cline-neutral">&nbsp;</span>
380
380
  <span class="cline-any cline-yes">3x</span>
@@ -577,7 +577,7 @@ export function renderOutputTsType(type: ContractTypeNode, modelsWithOutput?: Se
577
577
  <div class='footer quiet pad2 space-top1 center small'>
578
578
  Code coverage generated by
579
579
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
580
- at 2026-05-06T12:37:14.475Z
580
+ at 2026-05-06T16:22:17.029Z
581
581
  </div>
582
582
  <script src="../prettify.js"></script>
583
583
  <script>
@@ -341,7 +341,7 @@
341
341
  <span class="cline-any cline-neutral">&nbsp;</span>
342
342
  <span class="cline-any cline-neutral">&nbsp;</span>
343
343
  <span class="cline-any cline-neutral">&nbsp;</span>
344
- <span class="cline-any cline-yes">874x</span>
344
+ <span class="cline-any cline-yes">892x</span>
345
345
  <span class="cline-any cline-neutral">&nbsp;</span>
346
346
  <span class="cline-any cline-neutral">&nbsp;</span>
347
347
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -377,7 +377,7 @@
377
377
  <span class="cline-any cline-neutral">&nbsp;</span>
378
378
  <span class="cline-any cline-neutral">&nbsp;</span>
379
379
  <span class="cline-any cline-neutral">&nbsp;</span>
380
- <span class="cline-any cline-yes">203x</span>
380
+ <span class="cline-any cline-yes">207x</span>
381
381
  <span class="cline-any cline-neutral">&nbsp;</span>
382
382
  <span class="cline-any cline-neutral">&nbsp;</span>
383
383
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -446,16 +446,16 @@
446
446
  <span class="cline-any cline-neutral">&nbsp;</span>
447
447
  <span class="cline-any cline-neutral">&nbsp;</span>
448
448
  <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-yes">114x</span>
450
- <span class="cline-any cline-yes">114x</span>
449
+ <span class="cline-any cline-yes">123x</span>
450
+ <span class="cline-any cline-yes">123x</span>
451
451
  <span class="cline-any cline-neutral">&nbsp;</span>
452
452
  <span class="cline-any cline-neutral">&nbsp;</span>
453
453
  <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-yes">100x</span>
455
- <span class="cline-any cline-yes">100x</span>
454
+ <span class="cline-any cline-yes">104x</span>
455
+ <span class="cline-any cline-yes">104x</span>
456
456
  <span class="cline-any cline-yes">7x</span>
457
457
  <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-yes">93x</span>
458
+ <span class="cline-any cline-yes">97x</span>
459
459
  <span class="cline-any cline-neutral">&nbsp;</span>
460
460
  <span class="cline-any cline-neutral">&nbsp;</span>
461
461
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -469,10 +469,10 @@
469
469
  <span class="cline-any cline-neutral">&nbsp;</span>
470
470
  <span class="cline-any cline-neutral">&nbsp;</span>
471
471
  <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-yes">203x</span>
473
- <span class="cline-any cline-yes">203x</span>
474
- <span class="cline-any cline-yes">203x</span>
475
- <span class="cline-any cline-yes">203x</span>
472
+ <span class="cline-any cline-yes">212x</span>
473
+ <span class="cline-any cline-yes">212x</span>
474
+ <span class="cline-any cline-yes">212x</span>
475
+ <span class="cline-any cline-yes">212x</span>
476
476
  <span class="cline-any cline-neutral">&nbsp;</span>
477
477
  <span class="cline-any cline-neutral">&nbsp;</span>
478
478
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -486,12 +486,12 @@
486
486
  <span class="cline-any cline-neutral">&nbsp;</span>
487
487
  <span class="cline-any cline-neutral">&nbsp;</span>
488
488
  <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-yes">193x</span>
490
- <span class="cline-any cline-yes">193x</span>
489
+ <span class="cline-any cline-yes">202x</span>
490
+ <span class="cline-any cline-yes">202x</span>
491
491
  <span class="cline-any cline-neutral">&nbsp;</span>
492
492
  <span class="cline-any cline-neutral">&nbsp;</span>
493
493
  <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-yes">187x</span>
494
+ <span class="cline-any cline-yes">198x</span>
495
495
  <span class="cline-any cline-neutral">&nbsp;</span>
496
496
  <span class="cline-any cline-neutral">&nbsp;</span>
497
497
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -811,7 +811,7 @@ operation /users/{id}: {
811
811
  <div class='footer quiet pad2 space-top1 center small'>
812
812
  Code coverage generated by
813
813
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
814
- at 2026-05-06T12:37:14.475Z
814
+ at 2026-05-06T16:22:17.029Z
815
815
  </div>
816
816
  <script src="../prettify.js"></script>
817
817
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2026-05-06T12:37:14.475Z
104
+ at 2026-05-06T16:22:17.029Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>
@@ -1,6 +1,9 @@
1
1
  import type { OpRootNode } from '@contractkit/core';
2
+ /** Options shared by every SDK code-generation entry point. */
2
3
  export interface SdkCodegenOptions {
4
+ /** Template for type import paths when `modelOutPaths` is not provided. Supports `{module}` and `{base}`. */
3
5
  typeImportPathTemplate?: string;
6
+ /** Absolute path of the file currently being generated. Used to compute relative imports. */
4
7
  outPath?: string;
5
8
  /** Map from model name → absolute output file path (for cross-module type imports) */
6
9
  modelOutPaths?: Map<string, string>;
@@ -16,6 +19,12 @@ export interface SdkCodegenOptions {
16
19
  * to include them (e.g. for an internal-use SDK).
17
20
  */
18
21
  includeInternal?: boolean;
22
+ /**
23
+ * Override the generated client class name. When omitted, falls back to
24
+ * `deriveClientClassName(root.file)` (the legacy per-file name). The aggregator
25
+ * uses this to emit `<Area><Subarea>Client` for area+subarea leaf files.
26
+ */
27
+ clientClassName?: string;
19
28
  }
20
29
  /**
21
30
  * Returns true if the root contains at least one operation eligible for SDK emission.
@@ -23,16 +32,101 @@ export interface SdkCodegenOptions {
23
32
  * `includeInternal: true` any op qualifies.
24
33
  */
25
34
  export declare function hasPublicOperations(root: OpRootNode, includeInternal?: boolean): boolean;
35
+ /**
36
+ * Generate a complete `*.client.ts` file for one operation root: imports, the client class
37
+ * declaration, and one method per public operation. Used for top-level (no-area) files and
38
+ * for subarea-leaf files. Area-level files are NOT routed through this — their methods get
39
+ * inlined into the SDK aggregator via {@link generateClientMethods} + {@link generateSdkAggregator}.
40
+ */
26
41
  export declare function generateSdk(root: OpRootNode, options?: SdkCodegenOptions): string;
42
+ /**
43
+ * Render the method-block lines for an operation file as if they were declared inside a
44
+ * client class. Returns one consolidated array of strings (each pre-indented for class body
45
+ * level, with leading blank lines between methods) plus the set of method names emitted —
46
+ * the caller uses the names to detect cross-file collisions when multiple files contribute
47
+ * to the same area-level client.
48
+ *
49
+ * Skips operations marked `internal` unless `options.includeInternal` is set.
50
+ */
51
+ export declare function generateClientMethods(root: OpRootNode, options: SdkCodegenOptions): {
52
+ lines: string[];
53
+ methodNames: string[];
54
+ };
55
+ /** Derive a client class name from a `.ck` file path, e.g. `users.ck` → `UsersClient`. Used for legacy flat (no-area) files. */
27
56
  export declare function deriveClientClassName(file: string): string;
57
+ /** Camel-cased property name for a flat client on the SDK aggregator, e.g. `users.ck` → `users`. */
28
58
  export declare function deriveClientPropertyName(file: string): string;
59
+ /**
60
+ * Pull `area` / `subarea` from a file's `root.meta` (set via `options { keys: { ... } }`).
61
+ * Both are optional. `area` drives top-level SDK grouping; `subarea` drives nesting under
62
+ * an area's client class.
63
+ */
64
+ export declare function getAreaSubarea(root: OpRootNode): {
65
+ area?: string;
66
+ subarea?: string;
67
+ };
68
+ /** Class name for the area-level client, e.g. `area=identity` → `IdentityClient`. */
69
+ export declare function deriveAreaClientClassName(area: string): string;
70
+ /** Property name on the SDK aggregator for an area, e.g. `area=identity` → `identity`. */
71
+ export declare function deriveAreaPropertyName(area: string): string;
72
+ /** Class name for a leaf subarea client, e.g. `(identity, invitations)` → `IdentityInvitationsClient`. */
73
+ export declare function deriveSubareaClientClassName(area: string, subarea: string): string;
74
+ /** Property name on the area client for a subarea, e.g. `subarea=invitations` → `invitations`. */
75
+ export declare function deriveSubareaPropertyName(subarea: string): string;
29
76
  /** Generate the shared SdkOptions interface file. */
30
77
  export declare function generateSdkOptions(): string;
78
+ /**
79
+ * Reference to a per-file leaf client emitted to its own `*.client.ts`. Used by the
80
+ * aggregator to import the class and wire it as either a top-level `sdk.<prop>` or a
81
+ * nested `sdk.<area>.<subarea>` property.
82
+ */
31
83
  export interface SdkClientInfo {
84
+ /** Client class name (e.g. `UsersClient`, `IdentityInvitationsClient`). */
32
85
  className: string;
86
+ /** Property name to expose this client under (e.g. `users`, `invitations`). */
33
87
  propertyName: string;
88
+ /** Module specifier for the leaf file, relative to `sdk.ts` and `.js`-suffixed. */
34
89
  importPath: string;
35
90
  }
36
- /** Generate the sdk.ts aggregator that wraps all clients into a single Sdk class. */
37
- export declare function generateSdkAggregator(clients: SdkClientInfo[], sdkOptionsImportPath?: string, sdkClassName?: string): string;
91
+ /**
92
+ * One area-level (no-subarea) `.ck` file whose methods are inlined directly into the
93
+ * generated `<Area>Client` class instead of getting a standalone `*.client.ts`.
94
+ */
95
+ export interface SdkAreaInlineFile {
96
+ /** Parsed AST. */
97
+ root: OpRootNode;
98
+ /** Codegen options for this file (must have `outPath` pointing at the SDK aggregator file so type-import paths resolve correctly). */
99
+ codegenOptions: SdkCodegenOptions;
100
+ }
101
+ /** A grouping of files that share the same `keys.area`. */
102
+ export interface SdkAreaInfo {
103
+ area: string;
104
+ /** Files for which all methods are inlined into the area client (no subarea). */
105
+ inlineFiles: SdkAreaInlineFile[];
106
+ /** Per-file leaf clients exposed as named properties on the area client. */
107
+ subareaClients: {
108
+ propertyName: string;
109
+ client: SdkClientInfo;
110
+ }[];
111
+ }
112
+ export interface SdkAggregatorInput {
113
+ /** Files with no `keys.area` — kept as flat `Sdk.<filename>` properties (legacy behavior). */
114
+ topLevelClients: SdkClientInfo[];
115
+ /** One entry per `keys.area`. */
116
+ areas: SdkAreaInfo[];
117
+ /** Path to `sdk-options.ts` to import `SdkOptions`/`createSdkFetch`/etc. from. */
118
+ sdkOptionsImportPath?: string;
119
+ /** Name of the top-level aggregator class. Defaults to `Sdk`. */
120
+ sdkClassName?: string;
121
+ }
122
+ /**
123
+ * Generate the SDK aggregator (`sdk.ts`) — the entry-point file consumers import.
124
+ *
125
+ * Emits one `<Area>Client` class per area (combining inlined area-level methods with
126
+ * subarea property wiring), one `class Sdk` exposing area properties + flat top-level
127
+ * properties, plus all imports needed by the inlined methods.
128
+ *
129
+ * @throws if two area-level files in the same area produce the same method name.
130
+ */
131
+ export declare function generateSdkAggregator(input: SdkAggregatorInput): string;
38
132
  //# sourceMappingURL=codegen-sdk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codegen-sdk.d.ts","sourceRoot":"","sources":["../src/codegen-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkF,MAAM,mBAAmB,CAAC;AA2DpI,MAAM,WAAW,iBAAiB;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,8GAA8G;IAC9G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,UAAQ,GAAG,OAAO,CAOtF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAmHrF;AAsTD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7D;AA2QD,qDAAqD;AACrD,wBAAgB,kBAAkB,IAAI,MAAM,CA6E3C;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,oBAAoB,SAAqB,EAAE,YAAY,SAAQ,GAAG,MAAM,CAyBvI"}
1
+ {"version":3,"file":"codegen-sdk.d.ts","sourceRoot":"","sources":["../src/codegen-sdk.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -37,9 +37,9 @@ export interface SdkConfig {
37
37
  output?: {
38
38
  /** Path template for the SDK aggregator file. Supports {name}. Default: `sdk.ts`. */
39
39
  sdk?: string;
40
- /** Path template for SDK type files. Supports {filename}, {dir}, {area}. */
40
+ /** Path template for SDK type files. Supports {filename}, {dir}, {area}, {subarea}. */
41
41
  types?: string;
42
- /** Path template for client class files. Supports {filename}, {dir}, {area}. */
42
+ /** Path template for client class files. Supports {filename}, {dir}, {area}, {subarea}. */
43
43
  clients?: string;
44
44
  };
45
45
  /**
@@ -73,5 +73,10 @@ export interface TypescriptPluginConfig {
73
73
  }
74
74
  declare const plugin: ContractKitPlugin;
75
75
  export default plugin;
76
+ /**
77
+ * Build a `@contractkit/plugin-typescript` instance with explicit configuration, for
78
+ * programmatic use (tests, custom build scripts). Prefer the default export when loading
79
+ * via `contractkit.config.json`.
80
+ */
76
81
  export declare function createTypescriptPlugin(config: TypescriptPluginConfig, rootDir: string): ContractKitPlugin;
77
82
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAwB3D,MAAM,WAAW,YAAY;IACzB,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE;QACL,+GAA+G;QAC/G,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB;;;WAGG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACtB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE;QACL,qFAAqF;QACrF,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,4EAA4E;QAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,gFAAgF;QAChF,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACtB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,uGAAuG;IACvG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACnC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,oGAAoG;IACpG,KAAK,CAAC,EAAE,WAAW,CAAC;CACvB;AAsRD,QAAA,MAAM,MAAM,EAAE,iBAmBb,CAAC;AAEF,eAAe,MAAM,CAAC;AAItB,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAmBzG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AA6B3D,MAAM,WAAW,YAAY;IACzB,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE;QACL,+GAA+G;QAC/G,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB;;;WAGG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACtB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE;QACL,qFAAqF;QACrF,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,uFAAuF;QACvF,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,2FAA2F;QAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACtB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,uGAAuG;IACvG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACnC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,oGAAoG;IACpG,KAAK,CAAC,EAAE,WAAW,CAAC;CACvB;AAiXD,QAAA,MAAM,MAAM,EAAE,iBAmBb,CAAC;AAEF,eAAe,MAAM,CAAC;AAItB;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAmBzG"}