@shapeshift-labs/frontier-lang-compiler 0.2.11 → 0.2.13

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/README.md CHANGED
@@ -171,6 +171,9 @@ const project = await importNativeProject({
171
171
  console.log(imported.universalAst.sourceMaps.length);
172
172
  console.log(project.semanticIndex.symbols.length);
173
173
  console.log(imported.adapter.coverage.exactness);
174
+ console.log(imported.adapter.coverage.capabilityEvidence.declared.exactness);
175
+ console.log(imported.adapter.coverage.capabilityEvidence.observed.sourceRanges);
176
+ console.log(imported.adapter.coverage.capabilityEvidence.gaps);
174
177
  console.log(imported.adapter.coverage.semanticCoverage.level);
175
178
  console.log(project.metadata.sourcePreservationSummary.total);
176
179
  ```
@@ -184,6 +187,8 @@ The built-in adapter factories are dependency-light wrappers for caller-owned pa
184
187
 
185
188
  Adapter summaries include a structured `coverage` record so merge queues can distinguish exact parser AST imports from declaration scans. The record declares exactness, parser token/trivia support, diagnostics support, source-range and generated-range support, and semantic coverage. Built-in wrappers normalize native AST/CST nodes and declaration-level semantic indexes; they do not claim resolved references, types, control flow, generated ranges, or token/trivia fidelity unless the host adapter supplies that evidence.
186
189
 
190
+ Coverage records also keep declared, observed, and effective capability evidence separate. `coverage.capabilityEvidence.gaps` highlights missing exact AST, token/trivia, parser diagnostics, source range, generated range, reference, type, and control-flow evidence for the current adapter/import. `observedOnly` means the import produced evidence the adapter did not declare, while `declaredOnly` means the adapter declared support that this run did not exercise.
191
+
187
192
  ## Related Packages
188
193
 
189
194
  The published Frontier package family is generated from one shared package catalog so READMEs stay in sync across packages:
package/bench/smoke.mjs CHANGED
@@ -96,6 +96,10 @@ console.log(JSON.stringify({
96
96
  nativeImportDurationMs: Number(importDurationMs.toFixed(2)),
97
97
  coverageMatrixLanguages: coverageMatrix.summary.languages,
98
98
  coverageMatrixImports: coverageMatrix.summary.imports,
99
+ adapterCoverageSummaries: coverageMatrix.summary.adapterCoverage.total,
100
+ adapterCoverageSourceRanges: coverageMatrix.summary.adapterCoverage.effective.sourceRanges ?? 0,
101
+ adapterCoverageTokenGaps: coverageMatrix.summary.adapterCoverage.gaps.tokens ?? 0,
102
+ adapterCoverageReferenceGaps: coverageMatrix.summary.adapterCoverage.gaps.references ?? 0,
99
103
  coverageMatrixDurationMs: Number(matrixDurationMs.toFixed(2)),
100
104
  sourcePreservationRecords: preservationRecords.length,
101
105
  sourcePreservationTokens: preservationTokens,
package/dist/index.d.ts CHANGED
@@ -118,6 +118,17 @@ export type NativeImportKnownLossKind =
118
118
  | 'targetProjectionLoss'
119
119
  | string;
120
120
 
121
+ export type NativeImportRegionTaxonomyKind =
122
+ | 'symbol'
123
+ | 'declaration'
124
+ | 'import'
125
+ | 'body'
126
+ | 'call'
127
+ | 'type'
128
+ | 'effect'
129
+ | 'generatedOutput'
130
+ | string;
131
+
121
132
  export interface NativeImportLossSummaryOptions {
122
133
  readonly exactAst?: boolean;
123
134
  readonly evidence?: readonly EvidenceRecord[];
@@ -163,6 +174,28 @@ export interface NativeImportLanguageProfile {
163
174
  readonly notes: readonly string[];
164
175
  }
165
176
 
177
+ export interface NativeImporterAdapterCoverageAggregate {
178
+ readonly total: number;
179
+ readonly declared: Readonly<Record<string, number>>;
180
+ readonly observed: Readonly<Record<string, number>>;
181
+ readonly effective: Readonly<Record<string, number>>;
182
+ readonly gaps: Readonly<Record<string, number>>;
183
+ readonly declaredOnly: Readonly<Record<string, number>>;
184
+ readonly observedOnly: Readonly<Record<string, number>>;
185
+ readonly summaries: readonly {
186
+ readonly adapterId?: string;
187
+ readonly language?: FrontierSourceLanguage | string;
188
+ readonly parser?: string;
189
+ readonly exactness?: NativeImporterAdapterExactness;
190
+ readonly declared: readonly string[];
191
+ readonly observed: readonly string[];
192
+ readonly effective: readonly string[];
193
+ readonly gaps: readonly string[];
194
+ readonly declaredOnly: readonly string[];
195
+ readonly observedOnly: readonly string[];
196
+ }[];
197
+ }
198
+
166
199
  export interface NativeImportCoverageLanguage {
167
200
  readonly language: FrontierSourceLanguage;
168
201
  readonly aliases: readonly string[];
@@ -173,6 +206,7 @@ export interface NativeImportCoverageLanguage {
173
206
  readonly knownLossKinds: readonly NativeImportKnownLossKind[];
174
207
  readonly defaultReadiness: SemanticMergeReadiness;
175
208
  readonly notes: readonly string[];
209
+ readonly adapterCoverage: NativeImporterAdapterCoverageAggregate;
176
210
  readonly imports: {
177
211
  readonly total: number;
178
212
  readonly parsers: readonly string[];
@@ -203,6 +237,7 @@ export interface NativeImportCoverageMatrix {
203
237
  readonly losses: number;
204
238
  readonly byReadiness: Readonly<Record<string, number>>;
205
239
  readonly lossKinds: Readonly<Record<string, number>>;
240
+ readonly adapterCoverage: NativeImporterAdapterCoverageAggregate;
206
241
  };
207
242
  readonly metadata: {
208
243
  readonly compileTargets: readonly FrontierCompileTarget[];
@@ -217,6 +252,167 @@ export interface NativeImportCoverageMatrixOptions {
217
252
  readonly generatedAt?: number;
218
253
  }
219
254
 
255
+ export interface NativeImportContractSource {
256
+ readonly id: string;
257
+ readonly language?: FrontierSourceLanguage | string;
258
+ readonly sourcePath?: string;
259
+ readonly sourceHash?: string;
260
+ readonly parser?: string;
261
+ readonly nativeSourceId?: string;
262
+ readonly nativeAstId?: string;
263
+ readonly semanticIndexId?: string;
264
+ readonly universalAstId?: string;
265
+ readonly patchId?: string;
266
+ readonly sourceMapIds: readonly string[];
267
+ readonly sourceMapMappings: number;
268
+ readonly symbolCount: number;
269
+ readonly lossCount: number;
270
+ readonly evidenceCount: number;
271
+ readonly readiness?: SemanticMergeReadiness;
272
+ }
273
+
274
+ export interface NativeImportSourcePreservationRecordSummary {
275
+ readonly id?: string;
276
+ readonly language?: FrontierSourceLanguage | string;
277
+ readonly sourcePath?: string;
278
+ readonly sourceHash?: string;
279
+ readonly sourceBytes?: number;
280
+ readonly lineCount?: number;
281
+ readonly newline?: string;
282
+ readonly encoding?: string;
283
+ readonly exactSourceAvailable: boolean;
284
+ readonly tokens: number;
285
+ readonly trivia: number;
286
+ readonly directives: number;
287
+ readonly comments: number;
288
+ readonly whitespace: number;
289
+ readonly truncated: boolean;
290
+ }
291
+
292
+ export interface NativeImportSourcePreservationContract {
293
+ readonly total: number;
294
+ readonly ids: readonly string[];
295
+ readonly sourcePaths: readonly string[];
296
+ readonly sourceHashes: readonly string[];
297
+ readonly exactSourceAvailable: number;
298
+ readonly sourceBytes: number;
299
+ readonly lineCount: number;
300
+ readonly tokens: number;
301
+ readonly trivia: number;
302
+ readonly directives: number;
303
+ readonly comments: number;
304
+ readonly whitespace: number;
305
+ readonly truncated: boolean;
306
+ readonly records: readonly NativeImportSourcePreservationRecordSummary[];
307
+ }
308
+
309
+ export interface NativeImportAdapterCoverageRecordSummary {
310
+ readonly adapterId?: string;
311
+ readonly adapterVersion?: string;
312
+ readonly parser?: string;
313
+ readonly capabilities: readonly string[];
314
+ readonly supportedExtensions: readonly string[];
315
+ readonly exactness?: NativeImporterAdapterExactness;
316
+ readonly exactAst: boolean;
317
+ readonly tokens: boolean;
318
+ readonly trivia: boolean;
319
+ readonly diagnostics: boolean;
320
+ readonly sourceRanges: boolean;
321
+ readonly generatedRanges: boolean;
322
+ readonly semanticCoverage?: NativeImporterAdapterSemanticCoverage;
323
+ readonly observed?: NativeImporterAdapterCoverageObserved;
324
+ readonly notes: readonly string[];
325
+ }
326
+
327
+ export interface NativeImportAdapterCoverageContract {
328
+ readonly total: number;
329
+ readonly adapterIds: readonly string[];
330
+ readonly parsers: readonly string[];
331
+ readonly exactness: readonly string[];
332
+ readonly exactAst: number;
333
+ readonly tokens: number;
334
+ readonly trivia: number;
335
+ readonly diagnostics: number;
336
+ readonly sourceRanges: number;
337
+ readonly generatedRanges: number;
338
+ readonly semanticCoverageLevels: readonly string[];
339
+ readonly observed: NativeImporterAdapterCoverageObserved;
340
+ readonly records: readonly NativeImportAdapterCoverageRecordSummary[];
341
+ }
342
+
343
+ export interface NativeImportRegionSummary {
344
+ readonly total: number;
345
+ readonly ids: readonly string[];
346
+ readonly keys: readonly string[];
347
+ readonly sourcePaths: readonly string[];
348
+ readonly byKind: Readonly<Record<string, number>>;
349
+ readonly byGranularity: Readonly<Record<string, number>>;
350
+ readonly byPrecision: Readonly<Record<string, number>>;
351
+ readonly byLanguage: Readonly<Record<string, number>>;
352
+ readonly symbolIds: readonly string[];
353
+ readonly taxonomy: SemanticImportRegionTaxonomySummary;
354
+ }
355
+
356
+ export interface NativeImportSourceMapSummary {
357
+ readonly total: number;
358
+ readonly ids: readonly string[];
359
+ readonly mappingCount: number;
360
+ readonly sourcePaths: readonly string[];
361
+ readonly targetPaths: readonly string[];
362
+ readonly byPrecision: Readonly<Record<string, number>>;
363
+ readonly sourceRangeMappings: number;
364
+ readonly generatedRangeMappings: number;
365
+ }
366
+
367
+ export interface NativeImportReadinessContract {
368
+ readonly semanticMergeReadiness: SemanticMergeReadiness;
369
+ readonly severityReadiness: SemanticMergeReadiness;
370
+ readonly reasons: readonly string[];
371
+ readonly failedEvidenceIds: readonly string[];
372
+ readonly blockingLossIds: readonly string[];
373
+ readonly reviewLossIds: readonly string[];
374
+ readonly informationalLossIds: readonly string[];
375
+ }
376
+
377
+ export interface NativeImportResultContract {
378
+ readonly kind: 'frontier.lang.nativeImportResultContract';
379
+ readonly version: 1;
380
+ readonly importResultId?: string;
381
+ readonly language?: FrontierSourceLanguage | 'mixed' | string;
382
+ readonly sourcePath?: string;
383
+ readonly sourceHash?: string;
384
+ readonly sourceCount: number;
385
+ readonly sources: readonly NativeImportContractSource[];
386
+ readonly ids: {
387
+ readonly nativeSourceId?: string;
388
+ readonly nativeAstId?: string;
389
+ readonly semanticIndexId?: string;
390
+ readonly universalAstId?: string;
391
+ readonly patchId?: string;
392
+ readonly sourceMapIds: readonly string[];
393
+ readonly semanticSidecarIds: readonly string[];
394
+ };
395
+ readonly sourcePreservation: NativeImportSourcePreservationContract;
396
+ readonly adapterCoverage: NativeImportAdapterCoverageContract;
397
+ readonly lossSummary: NativeImportLossSummary;
398
+ readonly regions: NativeImportRegionSummary;
399
+ readonly sourceMaps: NativeImportSourceMapSummary;
400
+ readonly readiness: NativeImportReadinessContract;
401
+ readonly evidence: {
402
+ readonly total: number;
403
+ readonly failed: readonly string[];
404
+ readonly ids: readonly string[];
405
+ };
406
+ readonly metadata: Record<string, unknown>;
407
+ }
408
+
409
+ export interface NativeImportResultContractOptions extends SemanticImportSidecarOptions {
410
+ readonly lossSummary?: NativeImportLossSummary;
411
+ readonly semanticSidecarIds?: readonly string[] | string;
412
+ readonly sidecarIds?: readonly string[] | string;
413
+ readonly sidecarId?: string;
414
+ }
415
+
220
416
  export type NativeSourceTokenKind =
221
417
  | 'identifier'
222
418
  | 'keyword'
@@ -296,8 +492,10 @@ export interface CreateNativeSourcePreservationOptions {
296
492
  export interface SemanticImportOwnershipRegion {
297
493
  readonly id: string;
298
494
  readonly key: string;
495
+ readonly regionKind?: NativeImportRegionTaxonomyKind;
299
496
  readonly granularity: 'symbol' | string;
300
497
  readonly language?: FrontierSourceLanguage | string;
498
+ readonly documentId?: string;
301
499
  readonly sourcePath?: string;
302
500
  readonly sourceHash?: string;
303
501
  readonly symbolId?: string;
@@ -307,6 +505,7 @@ export interface SemanticImportOwnershipRegion {
307
505
  readonly sourceSpan?: SourceSpan;
308
506
  readonly precision?: 'exact' | 'declaration' | 'line' | 'estimated' | 'unknown' | string;
309
507
  readonly mergePolicy?: string;
508
+ readonly metadata?: Record<string, unknown>;
310
509
  }
311
510
 
312
511
  export interface SemanticImportSidecarSymbol {
@@ -321,9 +520,18 @@ export interface SemanticImportSidecarSymbol {
321
520
  readonly signatureHash?: string;
322
521
  readonly ownershipRegionId: string;
323
522
  readonly ownershipKey: string;
523
+ readonly ownershipRegionKind?: NativeImportRegionTaxonomyKind;
324
524
  readonly readiness: SemanticMergeReadiness;
325
525
  }
326
526
 
527
+ export interface SemanticImportRegionTaxonomySummary {
528
+ readonly kinds: readonly NativeImportRegionTaxonomyKind[];
529
+ readonly presentKinds: readonly NativeImportRegionTaxonomyKind[];
530
+ readonly byKind: Readonly<Record<string, number>>;
531
+ readonly keys: readonly string[];
532
+ readonly keysByKind: Readonly<Record<string, readonly string[]>>;
533
+ }
534
+
327
535
  export interface SemanticImportPatchHint {
328
536
  readonly id: string;
329
537
  readonly kind: 'source-region-patch' | string;
@@ -357,6 +565,7 @@ export interface SemanticImportSidecarImportEntry {
357
565
  readonly sourceMapMappingCount: number;
358
566
  readonly readiness: SemanticMergeReadiness;
359
567
  readonly emptySemanticIndex: boolean;
568
+ readonly regionTaxonomy?: SemanticImportRegionTaxonomySummary;
360
569
  }
361
570
 
362
571
  export interface SemanticImportSidecar {
@@ -390,6 +599,7 @@ export interface SemanticImportSidecar {
390
599
  readonly blockingLossIds: readonly string[];
391
600
  readonly reviewLossIds: readonly string[];
392
601
  };
602
+ readonly regionTaxonomy: SemanticImportRegionTaxonomySummary;
393
603
  readonly evidence: {
394
604
  readonly total: number;
395
605
  readonly failed: readonly string[];
@@ -399,6 +609,7 @@ export interface SemanticImportSidecar {
399
609
  readonly imports: number;
400
610
  readonly symbols: number;
401
611
  readonly ownershipRegions: number;
612
+ readonly regionKinds: number;
402
613
  readonly sourceMapMappings: number;
403
614
  readonly readiness: SemanticMergeReadiness;
404
615
  readonly emptySemanticIndex: boolean;
@@ -431,14 +642,97 @@ export interface NativeImporterAdapterSemanticCoverage {
431
642
  readonly controlFlow: boolean;
432
643
  }
433
644
 
645
+ export interface NativeImporterAdapterCoverageSnapshot {
646
+ readonly exactness: NativeImporterAdapterExactness;
647
+ readonly exactAst: boolean;
648
+ readonly tokens: boolean;
649
+ readonly trivia: boolean;
650
+ readonly diagnostics: boolean;
651
+ readonly sourceRanges: boolean;
652
+ readonly generatedRanges: boolean;
653
+ readonly semanticCoverage: NativeImporterAdapterSemanticCoverage;
654
+ }
655
+
434
656
  export interface NativeImporterAdapterCoverageObserved {
657
+ readonly exactness?: NativeImporterAdapterExactness;
658
+ readonly exactAst?: boolean;
659
+ readonly tokens?: boolean;
660
+ readonly tokenCount?: number;
661
+ readonly trivia?: boolean;
662
+ readonly triviaCount?: number;
435
663
  readonly diagnostics: number;
664
+ readonly parserDiagnostics?: number;
665
+ readonly diagnosticErrors?: number;
666
+ readonly diagnosticWarnings?: number;
667
+ readonly diagnosticInfos?: number;
436
668
  readonly losses: number;
437
669
  readonly nativeAstNodes: number;
438
670
  readonly semanticSymbols: number;
671
+ readonly semanticReferences?: number;
672
+ readonly semanticTypes?: number;
673
+ readonly semanticControlFlow?: number;
674
+ readonly references?: boolean;
675
+ readonly types?: boolean;
676
+ readonly controlFlow?: boolean;
439
677
  readonly sourceMapMappings: number;
440
678
  readonly sourceRanges: boolean;
679
+ readonly sourceRangeNodes?: number;
680
+ readonly sourceRangeMappings?: number;
441
681
  readonly generatedRanges: boolean;
682
+ readonly generatedRangeMappings?: number;
683
+ readonly semanticCoverage?: NativeImporterAdapterSemanticCoverage;
684
+ }
685
+
686
+ export interface NativeImporterAdapterCoverageCapabilityRow {
687
+ readonly capability: string;
688
+ readonly declared: boolean;
689
+ readonly observed: boolean;
690
+ readonly effective: boolean;
691
+ readonly count: number;
692
+ readonly status: 'declared-and-observed' | 'declared-unobserved' | 'observed-undeclared' | 'absent';
693
+ }
694
+
695
+ export interface NativeImporterAdapterCoverageCapabilityEvidence {
696
+ readonly declared: NativeImporterAdapterCoverageSnapshot;
697
+ readonly observed: NativeImporterAdapterCoverageObserved;
698
+ readonly effective: NativeImporterAdapterCoverageSnapshot;
699
+ readonly capabilities: readonly NativeImporterAdapterCoverageCapabilityRow[];
700
+ readonly gaps: readonly string[];
701
+ readonly declaredOnly: readonly string[];
702
+ readonly observedOnly: readonly string[];
703
+ readonly parserDiagnostics: {
704
+ readonly declared: boolean;
705
+ readonly observed: boolean;
706
+ readonly count: number;
707
+ readonly errors: number;
708
+ readonly warnings: number;
709
+ readonly infos: number;
710
+ };
711
+ readonly sourceRanges: {
712
+ readonly declared: boolean;
713
+ readonly observed: boolean;
714
+ readonly nativeAstNodes: number;
715
+ readonly sourceRangeNodes: number;
716
+ readonly sourceMapMappings: number;
717
+ readonly sourceRangeMappings: number;
718
+ readonly generatedRangeMappings: number;
719
+ };
720
+ readonly tokensTrivia: {
721
+ readonly tokens: { readonly declared: boolean; readonly observed: boolean; readonly count: number };
722
+ readonly trivia: { readonly declared: boolean; readonly observed: boolean; readonly count: number };
723
+ };
724
+ readonly semantic: {
725
+ readonly level: {
726
+ readonly declared: string;
727
+ readonly observed: string;
728
+ readonly effective: string;
729
+ };
730
+ readonly declarations: NativeImporterAdapterCoverageCapabilityRow;
731
+ readonly symbols: NativeImporterAdapterCoverageCapabilityRow;
732
+ readonly references: NativeImporterAdapterCoverageCapabilityRow;
733
+ readonly types: NativeImporterAdapterCoverageCapabilityRow;
734
+ readonly controlFlow: NativeImporterAdapterCoverageCapabilityRow;
735
+ };
442
736
  }
443
737
 
444
738
  export interface NativeImporterAdapterCoverageSummary {
@@ -451,11 +745,13 @@ export interface NativeImporterAdapterCoverageSummary {
451
745
  readonly generatedRanges: boolean;
452
746
  readonly semanticCoverage: NativeImporterAdapterSemanticCoverage;
453
747
  readonly notes: readonly string[];
748
+ readonly declared?: NativeImporterAdapterCoverageSnapshot;
454
749
  readonly observed?: NativeImporterAdapterCoverageObserved;
750
+ readonly capabilityEvidence?: NativeImporterAdapterCoverageCapabilityEvidence;
455
751
  }
456
752
 
457
753
  export type NativeImporterAdapterCoverageInput =
458
- Omit<Partial<NativeImporterAdapterCoverageSummary>, 'semanticCoverage' | 'observed'> & {
754
+ Omit<Partial<NativeImporterAdapterCoverageSummary>, 'semanticCoverage' | 'observed' | 'declared' | 'capabilityEvidence'> & {
459
755
  readonly semanticCoverage?: Partial<NativeImporterAdapterSemanticCoverage>;
460
756
  readonly observed?: Partial<NativeImporterAdapterCoverageObserved>;
461
757
  };
@@ -784,6 +1080,7 @@ export declare const FrontierCompileTargets: readonly FrontierCompileTarget[];
784
1080
  export declare const NativeImportRoundtripReadinessStatuses: readonly NativeImportRoundtripReadinessStatus[];
785
1081
  export declare const NativeImportTaxonomyKinds: readonly NativeImportTaxonomyKind[];
786
1082
  export declare const NativeImportLossKinds: readonly NativeImportKnownLossKind[];
1083
+ export declare const NativeImportRegionTaxonomyKinds: readonly NativeImportRegionTaxonomyKind[];
787
1084
  export declare const NativeImportReadinessBySeverity: Readonly<Record<NativeImportLossSummary['highestSeverity'], SemanticMergeReadiness>>;
788
1085
  export declare const NativeImportLanguageProfiles: readonly NativeImportLanguageProfile[];
789
1086
  export declare function normalizeCompileTarget(target?: string): FrontierCompileTarget;
@@ -798,6 +1095,7 @@ export declare function classifyNativeImportRoundtripReadiness(importResult: Nat
798
1095
  export declare function createNativeImportCoverageMatrix(options?: NativeImportCoverageMatrixOptions): NativeImportCoverageMatrix;
799
1096
  export declare function createNativeSourcePreservation(options: CreateNativeSourcePreservationOptions): NativeSourcePreservation;
800
1097
  export declare function createSemanticImportSidecar(importResult: NativeSourceImportResult | NativeProjectImportResult, options?: SemanticImportSidecarOptions): SemanticImportSidecar;
1098
+ export declare function createNativeImportResultContract(importResult: NativeSourceImportResult | NativeProjectImportResult, options?: NativeImportResultContractOptions): NativeImportResultContract;
801
1099
  export declare function createEstreeNativeImporterAdapter(options?: JavaScriptNativeImporterAdapterOptions): NativeImporterAdapter;
802
1100
  export declare function createBabelNativeImporterAdapter(options?: JavaScriptNativeImporterAdapterOptions): NativeImporterAdapter;
803
1101
  export declare function createTypeScriptCompilerNativeImporterAdapter(options?: TypeScriptCompilerNativeImporterAdapterOptions): NativeImporterAdapter;