fhir-persistence 0.1.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 +77 -0
- package/LICENSE +21 -0
- package/README.md +225 -0
- package/dist/cjs/index.cjs +8869 -0
- package/dist/cjs/index.cjs.map +7 -0
- package/dist/cjs/index.d.ts +3114 -0
- package/dist/cjs/package.json +5 -0
- package/dist/esm/index.d.ts +3114 -0
- package/dist/esm/index.mjs +8745 -0
- package/dist/esm/index.mjs.map +7 -0
- package/dist/esm/package.json +5 -0
- package/dist/index.d.ts +3114 -0
- package/dist/lib/cache/resource-cache.d.ts +137 -0
- package/dist/lib/cache/resource-cache.d.ts.map +1 -0
- package/dist/lib/cli/reindex.d.ts +55 -0
- package/dist/lib/cli/reindex.d.ts.map +1 -0
- package/dist/lib/db/adapter.d.ts +79 -0
- package/dist/lib/db/adapter.d.ts.map +1 -0
- package/dist/lib/db/better-sqlite3-adapter.d.ts +65 -0
- package/dist/lib/db/better-sqlite3-adapter.d.ts.map +1 -0
- package/dist/lib/db/dialect.d.ts +87 -0
- package/dist/lib/db/dialect.d.ts.map +1 -0
- package/dist/lib/db/index.d.ts +18 -0
- package/dist/lib/db/index.d.ts.map +1 -0
- package/dist/lib/db/postgres-adapter.d.ts +84 -0
- package/dist/lib/db/postgres-adapter.d.ts.map +1 -0
- package/dist/lib/db/postgres-dialect.d.ts +36 -0
- package/dist/lib/db/postgres-dialect.d.ts.map +1 -0
- package/dist/lib/db/sqlite-adapter.d.ts +41 -0
- package/dist/lib/db/sqlite-adapter.d.ts.map +1 -0
- package/dist/lib/db/sqlite-dialect.d.ts +34 -0
- package/dist/lib/db/sqlite-dialect.d.ts.map +1 -0
- package/dist/lib/index.d.ts +65 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/migration/ig-persistence-manager.d.ts +56 -0
- package/dist/lib/migration/ig-persistence-manager.d.ts.map +1 -0
- package/dist/lib/migration/migration-generator.d.ts +38 -0
- package/dist/lib/migration/migration-generator.d.ts.map +1 -0
- package/dist/lib/migration/reindex-scheduler.d.ts +82 -0
- package/dist/lib/migration/reindex-scheduler.d.ts.map +1 -0
- package/dist/lib/migration/schema-diff.d.ts +44 -0
- package/dist/lib/migration/schema-diff.d.ts.map +1 -0
- package/dist/lib/migrations/index.d.ts +8 -0
- package/dist/lib/migrations/index.d.ts.map +1 -0
- package/dist/lib/migrations/migration-runner.d.ts +102 -0
- package/dist/lib/migrations/migration-runner.d.ts.map +1 -0
- package/dist/lib/observability/search-logger.d.ts +74 -0
- package/dist/lib/observability/search-logger.d.ts.map +1 -0
- package/dist/lib/platform/platform-ig-definitions.d.ts +51 -0
- package/dist/lib/platform/platform-ig-definitions.d.ts.map +1 -0
- package/dist/lib/platform/platform-ig-loader.d.ts +30 -0
- package/dist/lib/platform/platform-ig-loader.d.ts.map +1 -0
- package/dist/lib/providers/definition-provider.d.ts +124 -0
- package/dist/lib/providers/definition-provider.d.ts.map +1 -0
- package/dist/lib/providers/fhir-definition-provider.d.ts +58 -0
- package/dist/lib/providers/fhir-definition-provider.d.ts.map +1 -0
- package/dist/lib/providers/fhir-runtime-provider.d.ts +75 -0
- package/dist/lib/providers/fhir-runtime-provider.d.ts.map +1 -0
- package/dist/lib/providers/in-memory-definition-provider.d.ts +72 -0
- package/dist/lib/providers/in-memory-definition-provider.d.ts.map +1 -0
- package/dist/lib/providers/index.d.ts +13 -0
- package/dist/lib/providers/index.d.ts.map +1 -0
- package/dist/lib/providers/property-path-runtime-provider.d.ts +34 -0
- package/dist/lib/providers/property-path-runtime-provider.d.ts.map +1 -0
- package/dist/lib/providers/runtime-provider.d.ts +84 -0
- package/dist/lib/providers/runtime-provider.d.ts.map +1 -0
- package/dist/lib/registry/element-cardinality.d.ts +15 -0
- package/dist/lib/registry/element-cardinality.d.ts.map +1 -0
- package/dist/lib/registry/index.d.ts +10 -0
- package/dist/lib/registry/index.d.ts.map +1 -0
- package/dist/lib/registry/package-registry-repo.d.ts +106 -0
- package/dist/lib/registry/package-registry-repo.d.ts.map +1 -0
- package/dist/lib/registry/search-parameter-registry.d.ts +175 -0
- package/dist/lib/registry/search-parameter-registry.d.ts.map +1 -0
- package/dist/lib/registry/structure-definition-registry.d.ts +93 -0
- package/dist/lib/registry/structure-definition-registry.d.ts.map +1 -0
- package/dist/lib/repo/errors.d.ts +61 -0
- package/dist/lib/repo/errors.d.ts.map +1 -0
- package/dist/lib/repo/history-bundle.d.ts +78 -0
- package/dist/lib/repo/history-bundle.d.ts.map +1 -0
- package/dist/lib/repo/index.d.ts +17 -0
- package/dist/lib/repo/index.d.ts.map +1 -0
- package/dist/lib/repo/indexing-pipeline.d.ts +108 -0
- package/dist/lib/repo/indexing-pipeline.d.ts.map +1 -0
- package/dist/lib/repo/lookup-table-writer.d.ts +46 -0
- package/dist/lib/repo/lookup-table-writer.d.ts.map +1 -0
- package/dist/lib/repo/reference-indexer.d.ts +56 -0
- package/dist/lib/repo/reference-indexer.d.ts.map +1 -0
- package/dist/lib/repo/row-builder.d.ts +78 -0
- package/dist/lib/repo/row-builder.d.ts.map +1 -0
- package/dist/lib/repo/row-indexer.d.ts +111 -0
- package/dist/lib/repo/row-indexer.d.ts.map +1 -0
- package/dist/lib/repo/sql-builder.d.ts +166 -0
- package/dist/lib/repo/sql-builder.d.ts.map +1 -0
- package/dist/lib/repo/types.d.ts +321 -0
- package/dist/lib/repo/types.d.ts.map +1 -0
- package/dist/lib/schema/ddl-generator.d.ts +81 -0
- package/dist/lib/schema/ddl-generator.d.ts.map +1 -0
- package/dist/lib/schema/index.d.ts +8 -0
- package/dist/lib/schema/index.d.ts.map +1 -0
- package/dist/lib/schema/table-schema-builder.d.ts +66 -0
- package/dist/lib/schema/table-schema-builder.d.ts.map +1 -0
- package/dist/lib/schema/table-schema.d.ts +236 -0
- package/dist/lib/schema/table-schema.d.ts.map +1 -0
- package/dist/lib/search/index.d.ts +22 -0
- package/dist/lib/search/index.d.ts.map +1 -0
- package/dist/lib/search/pagination.d.ts +53 -0
- package/dist/lib/search/pagination.d.ts.map +1 -0
- package/dist/lib/search/param-parser.d.ts +85 -0
- package/dist/lib/search/param-parser.d.ts.map +1 -0
- package/dist/lib/search/search-bundle.d.ts +61 -0
- package/dist/lib/search/search-bundle.d.ts.map +1 -0
- package/dist/lib/search/search-executor.d.ts +58 -0
- package/dist/lib/search/search-executor.d.ts.map +1 -0
- package/dist/lib/search/search-planner.d.ts +57 -0
- package/dist/lib/search/search-planner.d.ts.map +1 -0
- package/dist/lib/search/search-sql-builder.d.ts +86 -0
- package/dist/lib/search/search-sql-builder.d.ts.map +1 -0
- package/dist/lib/search/types.d.ts +219 -0
- package/dist/lib/search/types.d.ts.map +1 -0
- package/dist/lib/search/where-builder.d.ts +64 -0
- package/dist/lib/search/where-builder.d.ts.map +1 -0
- package/dist/lib/startup/fhir-system.d.ts +82 -0
- package/dist/lib/startup/fhir-system.d.ts.map +1 -0
- package/dist/lib/store/conditional-service.d.ts +76 -0
- package/dist/lib/store/conditional-service.d.ts.map +1 -0
- package/dist/lib/store/fhir-persistence.d.ts +81 -0
- package/dist/lib/store/fhir-persistence.d.ts.map +1 -0
- package/dist/lib/store/fhir-store.d.ts +44 -0
- package/dist/lib/store/fhir-store.d.ts.map +1 -0
- package/dist/lib/terminology/terminology-code-repo.d.ts +61 -0
- package/dist/lib/terminology/terminology-code-repo.d.ts.map +1 -0
- package/dist/lib/terminology/valueset-repo.d.ts +76 -0
- package/dist/lib/terminology/valueset-repo.d.ts.map +1 -0
- package/dist/lib/transaction/bundle-processor.d.ts +84 -0
- package/dist/lib/transaction/bundle-processor.d.ts.map +1 -0
- package/dist/lib/transaction/urn-resolver.d.ts +62 -0
- package/dist/lib/transaction/urn-resolver.d.ts.map +1 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/package.json +87 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DefinitionProvider — Bridge Interface for fhir-definition
|
|
3
|
+
*
|
|
4
|
+
* Abstracts the `fhir-definition` registry so that `fhir-persistence`
|
|
5
|
+
* never imports `fhir-definition` types directly. This enables:
|
|
6
|
+
*
|
|
7
|
+
* - Testing with in-memory mocks (no IG package loading)
|
|
8
|
+
* - Swapping fhir-definition versions without touching persistence code
|
|
9
|
+
* - Structural typing compatibility (duck typing)
|
|
10
|
+
*
|
|
11
|
+
* ADR-01 §2.3: DefinitionProvider interface contract.
|
|
12
|
+
*
|
|
13
|
+
* @module fhir-persistence/providers
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Minimal StructureDefinition shape used by fhir-persistence.
|
|
17
|
+
* Only the fields that fhir-persistence reads are declared.
|
|
18
|
+
*/
|
|
19
|
+
export interface StructureDefinitionDef {
|
|
20
|
+
resourceType: 'StructureDefinition';
|
|
21
|
+
url: string;
|
|
22
|
+
name?: string;
|
|
23
|
+
type?: string;
|
|
24
|
+
kind?: string;
|
|
25
|
+
snapshot?: {
|
|
26
|
+
element?: Array<{
|
|
27
|
+
path?: string;
|
|
28
|
+
type?: Array<{
|
|
29
|
+
code?: string;
|
|
30
|
+
}>;
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}>;
|
|
33
|
+
};
|
|
34
|
+
[key: string]: unknown;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Minimal ValueSet shape used by fhir-persistence.
|
|
38
|
+
*/
|
|
39
|
+
export interface ValueSetDef {
|
|
40
|
+
resourceType: 'ValueSet';
|
|
41
|
+
url: string;
|
|
42
|
+
name?: string;
|
|
43
|
+
status?: string;
|
|
44
|
+
compose?: unknown;
|
|
45
|
+
expansion?: unknown;
|
|
46
|
+
[key: string]: unknown;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Minimal CodeSystem shape used by fhir-persistence.
|
|
50
|
+
*/
|
|
51
|
+
export interface CodeSystemDef {
|
|
52
|
+
resourceType: 'CodeSystem';
|
|
53
|
+
url: string;
|
|
54
|
+
name?: string;
|
|
55
|
+
status?: string;
|
|
56
|
+
content?: string;
|
|
57
|
+
concept?: Array<{
|
|
58
|
+
code: string;
|
|
59
|
+
display?: string;
|
|
60
|
+
definition?: string;
|
|
61
|
+
concept?: unknown[];
|
|
62
|
+
}>;
|
|
63
|
+
[key: string]: unknown;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Minimal SearchParameter shape used by fhir-persistence.
|
|
67
|
+
*/
|
|
68
|
+
export interface SearchParameterDef {
|
|
69
|
+
resourceType: 'SearchParameter';
|
|
70
|
+
url?: string;
|
|
71
|
+
name?: string;
|
|
72
|
+
code: string;
|
|
73
|
+
type: 'number' | 'date' | 'string' | 'token' | 'reference' | 'composite' | 'quantity' | 'uri' | 'special';
|
|
74
|
+
base: string[];
|
|
75
|
+
expression?: string;
|
|
76
|
+
target?: string[];
|
|
77
|
+
[key: string]: unknown;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Loaded package metadata.
|
|
81
|
+
*/
|
|
82
|
+
export interface LoadedPackageDef {
|
|
83
|
+
name: string;
|
|
84
|
+
version: string;
|
|
85
|
+
loadedAt?: string;
|
|
86
|
+
resourceCount?: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Bridge interface for fhir-definition registry.
|
|
90
|
+
*
|
|
91
|
+
* fhir-persistence depends only on this interface, never on
|
|
92
|
+
* fhir-definition internal types. Implementations may wrap
|
|
93
|
+
* `InMemoryDefinitionRegistry` or provide test-only mocks.
|
|
94
|
+
*
|
|
95
|
+
* ADR-01 §2.3 — structural typing, no `implements` required.
|
|
96
|
+
*/
|
|
97
|
+
export interface DefinitionProvider {
|
|
98
|
+
/**
|
|
99
|
+
* Get a StructureDefinition by canonical URL.
|
|
100
|
+
*/
|
|
101
|
+
getStructureDefinition(url: string): StructureDefinitionDef | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* Get a ValueSet by canonical URL.
|
|
104
|
+
*/
|
|
105
|
+
getValueSet(url: string): ValueSetDef | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Get a CodeSystem by canonical URL.
|
|
108
|
+
*/
|
|
109
|
+
getCodeSystem(url: string): CodeSystemDef | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* Get all SearchParameters for a specific resource type.
|
|
112
|
+
*/
|
|
113
|
+
getSearchParameters(resourceType: string): SearchParameterDef[];
|
|
114
|
+
/**
|
|
115
|
+
* Enumerate all known resource types.
|
|
116
|
+
* Used by SchemaEngine and ReindexCLI to iterate over all tables.
|
|
117
|
+
*/
|
|
118
|
+
getAllResourceTypes(): string[];
|
|
119
|
+
/**
|
|
120
|
+
* Get metadata about loaded packages (optional).
|
|
121
|
+
*/
|
|
122
|
+
getLoadedPackages?(): LoadedPackageDef[];
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=definition-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/definition-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FhirDefinitionBridge — Real fhir-definition Integration
|
|
3
|
+
*
|
|
4
|
+
* Wraps the actual `fhir-definition` package's `DefinitionRegistry`
|
|
5
|
+
* (or `InMemoryDefinitionRegistry`) into the `DefinitionProvider`
|
|
6
|
+
* interface used by `FhirSystem`.
|
|
7
|
+
*
|
|
8
|
+
* This bridges fhir-definition's concrete types into our minimal
|
|
9
|
+
* structural types, maintaining the one-way dependency principle.
|
|
10
|
+
*
|
|
11
|
+
* ADR-01 §2.3: DefinitionProvider wraps fhir-definition, never
|
|
12
|
+
* exposing fhir-definition types to the rest of fhir-persistence.
|
|
13
|
+
*
|
|
14
|
+
* @module fhir-persistence/providers
|
|
15
|
+
*/
|
|
16
|
+
import type { DefinitionProvider, StructureDefinitionDef, ValueSetDef, CodeSystemDef, SearchParameterDef, LoadedPackageDef } from './definition-provider.js';
|
|
17
|
+
/**
|
|
18
|
+
* Structural type matching fhir-definition's DefinitionRegistry.
|
|
19
|
+
* Uses `any` for return types to bridge between fhir-definition's
|
|
20
|
+
* concrete types and our minimal structural types.
|
|
21
|
+
*/
|
|
22
|
+
interface FhirDefinitionRegistry {
|
|
23
|
+
getStructureDefinition(url: string): any | undefined;
|
|
24
|
+
getValueSet(url: string): any | undefined;
|
|
25
|
+
getCodeSystem(url: string): any | undefined;
|
|
26
|
+
getSearchParameters(resourceType: string): any[];
|
|
27
|
+
listStructureDefinitions(): string[];
|
|
28
|
+
getLoadedPackages?(): any[];
|
|
29
|
+
getStatistics?(): any;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Bridges a fhir-definition DefinitionRegistry into our DefinitionProvider.
|
|
33
|
+
*
|
|
34
|
+
* Usage:
|
|
35
|
+
* ```typescript
|
|
36
|
+
* import { loadDefinitionPackages } from 'fhir-definition';
|
|
37
|
+
*
|
|
38
|
+
* const { registry } = await loadDefinitionPackages({ ... });
|
|
39
|
+
* const provider = new FhirDefinitionBridge(registry);
|
|
40
|
+
*
|
|
41
|
+
* // Use with FhirSystem
|
|
42
|
+
* const system = new FhirSystem(adapter);
|
|
43
|
+
* await system.initialize(provider);
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare class FhirDefinitionBridge implements DefinitionProvider {
|
|
47
|
+
private readonly registry;
|
|
48
|
+
private cachedResourceTypes;
|
|
49
|
+
constructor(registry: FhirDefinitionRegistry);
|
|
50
|
+
getStructureDefinition(url: string): StructureDefinitionDef | undefined;
|
|
51
|
+
getValueSet(url: string): ValueSetDef | undefined;
|
|
52
|
+
getCodeSystem(url: string): CodeSystemDef | undefined;
|
|
53
|
+
getSearchParameters(resourceType: string): SearchParameterDef[];
|
|
54
|
+
getAllResourceTypes(): string[];
|
|
55
|
+
getLoadedPackages(): LoadedPackageDef[];
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=fhir-definition-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fhir-definition-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/fhir-definition-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAMlC;;;;GAIG;AACH,UAAU,sBAAsB;IAE9B,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IAErD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IAE1C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IAE5C,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IACjD,wBAAwB,IAAI,MAAM,EAAE,CAAC;IAErC,iBAAiB,CAAC,IAAI,GAAG,EAAE,CAAC;IAE5B,aAAa,CAAC,IAAI,GAAG,CAAC;CACvB;AAMD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,mBAAmB,CAAyB;gBAExC,QAAQ,EAAE,sBAAsB;IAQ5C,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAMvE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMjD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAMrD,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAc/D,mBAAmB,IAAI,MAAM,EAAE;IAkB/B,iBAAiB,IAAI,gBAAgB,EAAE;CAUxC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FhirRuntimeProvider — Real fhir-runtime Integration
|
|
3
|
+
*
|
|
4
|
+
* Wraps the actual `fhir-runtime` package's `extractSearchValues`,
|
|
5
|
+
* `extractAllSearchValues`, and `extractReferences` functions into
|
|
6
|
+
* the `RuntimeProvider` interface used by `IndexingPipeline`.
|
|
7
|
+
*
|
|
8
|
+
* This replaces the approximate `PropertyPathRuntimeProvider` with
|
|
9
|
+
* real FHIRPath evaluation for precise search value extraction.
|
|
10
|
+
*
|
|
11
|
+
* ADR-01 §4.1b: RuntimeProvider wraps fhir-runtime, never exposing
|
|
12
|
+
* fhir-runtime types to the rest of fhir-persistence.
|
|
13
|
+
*
|
|
14
|
+
* @module fhir-persistence/providers
|
|
15
|
+
*/
|
|
16
|
+
import type { SearchParameterDef } from './definition-provider.js';
|
|
17
|
+
import type { RuntimeProvider, ExtractedReference } from './runtime-provider.js';
|
|
18
|
+
/**
|
|
19
|
+
* Options for creating a FhirRuntimeProvider.
|
|
20
|
+
*
|
|
21
|
+
* Uses `any` for function signatures to bridge between fhir-runtime's
|
|
22
|
+
* narrow union types (e.g., SearchParamType) and our structural types.
|
|
23
|
+
* The conversion is handled internally by FhirRuntimeProvider.
|
|
24
|
+
*/
|
|
25
|
+
export interface FhirRuntimeProviderOptions {
|
|
26
|
+
/**
|
|
27
|
+
* The `extractSearchValues` function from fhir-runtime.
|
|
28
|
+
* Signature: (resource: Resource, searchParam: SearchParameter) => SearchIndexEntry
|
|
29
|
+
*/
|
|
30
|
+
extractSearchValues: (resource: any, searchParam: any) => any;
|
|
31
|
+
/**
|
|
32
|
+
* The `extractAllSearchValues` function from fhir-runtime.
|
|
33
|
+
* Signature: (resource: Resource, searchParams: SearchParameter[]) => SearchIndexEntry[]
|
|
34
|
+
*/
|
|
35
|
+
extractAllSearchValues: (resource: any, searchParams: any[]) => any[];
|
|
36
|
+
/**
|
|
37
|
+
* The `extractReferences` function from fhir-runtime.
|
|
38
|
+
* Signature: (resource: Resource) => ReferenceInfo[]
|
|
39
|
+
*/
|
|
40
|
+
extractReferences: (resource: any) => any[];
|
|
41
|
+
}
|
|
42
|
+
export declare class FhirRuntimeProvider implements RuntimeProvider {
|
|
43
|
+
private readonly opts;
|
|
44
|
+
constructor(options: FhirRuntimeProviderOptions);
|
|
45
|
+
extractSearchValues(resource: Record<string, unknown>, params: SearchParameterDef[]): Record<string, unknown[]>;
|
|
46
|
+
extractReferences(resource: Record<string, unknown>, params: SearchParameterDef[]): ExtractedReference[];
|
|
47
|
+
/**
|
|
48
|
+
* Convert our minimal SearchParameterDef to fhir-runtime's SearchParameter shape.
|
|
49
|
+
*/
|
|
50
|
+
private toRuntimeSearchParameter;
|
|
51
|
+
/**
|
|
52
|
+
* Normalize fhir-runtime SearchIndexValue[] to persistence-friendly unknown[].
|
|
53
|
+
*/
|
|
54
|
+
private normalizeSearchValues;
|
|
55
|
+
/**
|
|
56
|
+
* Normalize token values to "system|code" strings.
|
|
57
|
+
*/
|
|
58
|
+
private normalizeTokenValues;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a FhirRuntimeProvider from the fhir-runtime package.
|
|
62
|
+
*
|
|
63
|
+
* Usage:
|
|
64
|
+
* ```typescript
|
|
65
|
+
* import { extractSearchValues, extractAllSearchValues, extractReferences } from 'fhir-runtime';
|
|
66
|
+
*
|
|
67
|
+
* const provider = createFhirRuntimeProvider({
|
|
68
|
+
* extractSearchValues,
|
|
69
|
+
* extractAllSearchValues,
|
|
70
|
+
* extractReferences,
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function createFhirRuntimeProvider(options: FhirRuntimeProviderOptions): FhirRuntimeProvider;
|
|
75
|
+
//# sourceMappingURL=fhir-runtime-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fhir-runtime-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/fhir-runtime-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAuCjF;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IAEH,mBAAmB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,KAAK,GAAG,CAAC;IAE9D;;;OAGG;IAEH,sBAAsB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,CAAC;IAEtE;;;OAGG;IAEH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;CAC7C;AAED,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBAEtC,OAAO,EAAE,0BAA0B;IAQ/C,mBAAmB,CACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,kBAAkB,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IA8B5B,iBAAiB,CACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,kBAAkB,EAAE,GAC3B,kBAAkB,EAAE;IA6CvB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAY7B;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CAErB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InMemoryDefinitionProvider — Test/Development Implementation
|
|
3
|
+
*
|
|
4
|
+
* Stores StructureDefinitions, SearchParameters, ValueSets, and CodeSystems
|
|
5
|
+
* in memory. Useful for:
|
|
6
|
+
*
|
|
7
|
+
* - Unit tests (no IG package loading required)
|
|
8
|
+
* - Development (quick iteration without fhir-definition dependency)
|
|
9
|
+
* - Integration tests with controlled definition sets
|
|
10
|
+
*
|
|
11
|
+
* @module fhir-persistence/providers
|
|
12
|
+
*/
|
|
13
|
+
import type { DefinitionProvider, StructureDefinitionDef, ValueSetDef, CodeSystemDef, SearchParameterDef, LoadedPackageDef } from './definition-provider.js';
|
|
14
|
+
export declare class InMemoryDefinitionProvider implements DefinitionProvider {
|
|
15
|
+
private readonly structureDefinitions;
|
|
16
|
+
private readonly valueSets;
|
|
17
|
+
private readonly codeSystems;
|
|
18
|
+
private readonly searchParams;
|
|
19
|
+
private readonly resourceTypes;
|
|
20
|
+
private readonly packages;
|
|
21
|
+
getStructureDefinition(url: string): StructureDefinitionDef | undefined;
|
|
22
|
+
getValueSet(url: string): ValueSetDef | undefined;
|
|
23
|
+
getCodeSystem(url: string): CodeSystemDef | undefined;
|
|
24
|
+
getSearchParameters(resourceType: string): SearchParameterDef[];
|
|
25
|
+
getAllResourceTypes(): string[];
|
|
26
|
+
getLoadedPackages(): LoadedPackageDef[];
|
|
27
|
+
/**
|
|
28
|
+
* Register a StructureDefinition.
|
|
29
|
+
*/
|
|
30
|
+
addStructureDefinition(sd: StructureDefinitionDef): void;
|
|
31
|
+
/**
|
|
32
|
+
* Register a SearchParameter for one or more resource types.
|
|
33
|
+
*/
|
|
34
|
+
addSearchParameter(sp: SearchParameterDef): void;
|
|
35
|
+
/**
|
|
36
|
+
* Register a ValueSet.
|
|
37
|
+
*/
|
|
38
|
+
addValueSet(vs: ValueSetDef): void;
|
|
39
|
+
/**
|
|
40
|
+
* Register a CodeSystem.
|
|
41
|
+
*/
|
|
42
|
+
addCodeSystem(cs: CodeSystemDef): void;
|
|
43
|
+
/**
|
|
44
|
+
* Register a loaded package (metadata only).
|
|
45
|
+
*/
|
|
46
|
+
addPackage(pkg: LoadedPackageDef): void;
|
|
47
|
+
/**
|
|
48
|
+
* Bulk-load SearchParameters from a FHIR Bundle-like structure.
|
|
49
|
+
* Compatible with SearchParameterRegistry.indexBundle() input format.
|
|
50
|
+
*/
|
|
51
|
+
indexBundle(bundle: {
|
|
52
|
+
resourceType: 'Bundle';
|
|
53
|
+
entry?: Array<{
|
|
54
|
+
resource?: SearchParameterDef;
|
|
55
|
+
}>;
|
|
56
|
+
}): void;
|
|
57
|
+
/**
|
|
58
|
+
* Clear all stored definitions.
|
|
59
|
+
*/
|
|
60
|
+
clear(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get statistics about stored definitions.
|
|
63
|
+
*/
|
|
64
|
+
getStatistics(): {
|
|
65
|
+
structureDefinitions: number;
|
|
66
|
+
searchParameters: number;
|
|
67
|
+
valueSets: number;
|
|
68
|
+
codeSystems: number;
|
|
69
|
+
resourceTypes: number;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=in-memory-definition-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-definition-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/in-memory-definition-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAMlC,qBAAa,0BAA2B,YAAW,kBAAkB;IACnE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6C;IAClF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2C;IACxE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IAMnD,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAIvE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIjD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIrD,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAI/D,mBAAmB,IAAI,MAAM,EAAE;IAI/B,iBAAiB,IAAI,gBAAgB,EAAE;IAQvC;;OAEG;IACH,sBAAsB,CAAC,EAAE,EAAE,sBAAsB,GAAG,IAAI;IAQxD;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI;IAYhD;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAIlC;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAItC;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAIvC;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE;QAClB,YAAY,EAAE,QAAQ,CAAC;QACvB,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,QAAQ,CAAC,EAAE,kBAAkB,CAAA;SAAE,CAAC,CAAC;KAClD,GAAG,IAAI;IASR;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,aAAa,IAAI;QACf,oBAAoB,EAAE,MAAM,CAAC;QAC7B,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB;CAaF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Providers — Bridge interfaces for upstream packages
|
|
3
|
+
*
|
|
4
|
+
* @module fhir-persistence/providers
|
|
5
|
+
*/
|
|
6
|
+
export type { DefinitionProvider, StructureDefinitionDef, ValueSetDef, CodeSystemDef, SearchParameterDef, LoadedPackageDef, } from './definition-provider.js';
|
|
7
|
+
export { InMemoryDefinitionProvider } from './in-memory-definition-provider.js';
|
|
8
|
+
export type { RuntimeProvider, ExtractedReference, ValidationResult, ValidationIssue, } from './runtime-provider.js';
|
|
9
|
+
export { PropertyPathRuntimeProvider } from './property-path-runtime-provider.js';
|
|
10
|
+
export { FhirRuntimeProvider, createFhirRuntimeProvider } from './fhir-runtime-provider.js';
|
|
11
|
+
export type { FhirRuntimeProviderOptions } from './fhir-runtime-provider.js';
|
|
12
|
+
export { FhirDefinitionBridge } from './fhir-definition-provider.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAGhF,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAGlF,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAG7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PropertyPathRuntimeProvider — Approximate RuntimeProvider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Uses `extractPropertyPath` + `getNestedValues` from row-indexer to
|
|
5
|
+
* approximate FHIRPath evaluation. This is the v1-compatible fallback
|
|
6
|
+
* when a real fhir-runtime instance is not available.
|
|
7
|
+
*
|
|
8
|
+
* Limitations (compared to real FHIRPath):
|
|
9
|
+
* - Cannot evaluate `.as(X)` polymorphic type casts correctly
|
|
10
|
+
* - Cannot evaluate `.where(resolve() is X)` predicates
|
|
11
|
+
* - Cannot evaluate complex FHIRPath functions (iif, ofType, etc.)
|
|
12
|
+
* - Reference path detection is heuristic-based
|
|
13
|
+
*
|
|
14
|
+
* @module fhir-persistence/providers
|
|
15
|
+
*/
|
|
16
|
+
import type { SearchParameterDef } from './definition-provider.js';
|
|
17
|
+
import type { RuntimeProvider, ExtractedReference } from './runtime-provider.js';
|
|
18
|
+
export declare class PropertyPathRuntimeProvider implements RuntimeProvider {
|
|
19
|
+
extractSearchValues(resource: Record<string, unknown>, params: SearchParameterDef[]): Record<string, unknown[]>;
|
|
20
|
+
extractReferences(resource: Record<string, unknown>, params: SearchParameterDef[]): ExtractedReference[];
|
|
21
|
+
/**
|
|
22
|
+
* Normalize extracted values based on the SearchParameter type.
|
|
23
|
+
*/
|
|
24
|
+
private normalizeValues;
|
|
25
|
+
/**
|
|
26
|
+
* Extract a reference string from a FHIR Reference value.
|
|
27
|
+
*/
|
|
28
|
+
private extractReferenceFromValue;
|
|
29
|
+
/**
|
|
30
|
+
* Extract token values as system|code strings from various FHIR structures.
|
|
31
|
+
*/
|
|
32
|
+
private extractTokenValues;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=property-path-runtime-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-path-runtime-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/property-path-runtime-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAOjF,qBAAa,2BAA4B,YAAW,eAAe;IAMjE,mBAAmB,CACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,kBAAkB,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IA4B5B,iBAAiB,CACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,kBAAkB,EAAE,GAC3B,kBAAkB,EAAE;IAoCvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IASjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAmD3B"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RuntimeProvider — Bridge Interface for fhir-runtime
|
|
3
|
+
*
|
|
4
|
+
* Abstracts the `fhir-runtime` capabilities so that `fhir-persistence`
|
|
5
|
+
* never imports `fhir-runtime` types directly. This enables:
|
|
6
|
+
*
|
|
7
|
+
* - Testing with property-path approximation (no FHIRPath engine)
|
|
8
|
+
* - Swapping to real fhir-runtime when available
|
|
9
|
+
* - Structural typing compatibility (duck typing)
|
|
10
|
+
*
|
|
11
|
+
* ADR-01 §4.1b: RuntimeProvider interface contract.
|
|
12
|
+
*
|
|
13
|
+
* @module fhir-persistence/providers
|
|
14
|
+
*/
|
|
15
|
+
import type { SearchParameterDef } from './definition-provider.js';
|
|
16
|
+
/**
|
|
17
|
+
* A reference extracted from a FHIR resource.
|
|
18
|
+
*/
|
|
19
|
+
export interface ExtractedReference {
|
|
20
|
+
/** The SearchParameter code (e.g., 'subject', 'performer'). */
|
|
21
|
+
code: string;
|
|
22
|
+
/** The full reference string (e.g., 'Patient/123'). */
|
|
23
|
+
reference: string;
|
|
24
|
+
/** The target resource type (e.g., 'Patient'). */
|
|
25
|
+
targetType: string;
|
|
26
|
+
/** The target resource ID (e.g., '123'). */
|
|
27
|
+
targetId: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Result of resource validation.
|
|
31
|
+
*/
|
|
32
|
+
export interface ValidationResult {
|
|
33
|
+
valid: boolean;
|
|
34
|
+
issues: ValidationIssue[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A single validation issue.
|
|
38
|
+
*/
|
|
39
|
+
export interface ValidationIssue {
|
|
40
|
+
severity: 'error' | 'warning' | 'information';
|
|
41
|
+
message: string;
|
|
42
|
+
path?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Bridge interface for fhir-runtime.
|
|
46
|
+
*
|
|
47
|
+
* fhir-persistence depends only on this interface, never on
|
|
48
|
+
* fhir-runtime internal types. Implementations may wrap
|
|
49
|
+
* a real `FhirRuntimeInstance` or provide test-only approximations.
|
|
50
|
+
*
|
|
51
|
+
* ADR-01 §4.1b — structural typing, no `implements` required.
|
|
52
|
+
*/
|
|
53
|
+
export interface RuntimeProvider {
|
|
54
|
+
/**
|
|
55
|
+
* Extract search parameter values from a resource.
|
|
56
|
+
*
|
|
57
|
+
* Real implementation uses FHIRPath evaluation via fhir-runtime.
|
|
58
|
+
* Test implementation uses extractPropertyPath approximation.
|
|
59
|
+
*
|
|
60
|
+
* @param resource - The FHIR resource to extract values from.
|
|
61
|
+
* @param params - SearchParameter definitions to extract.
|
|
62
|
+
* @returns Map of param code → extracted values.
|
|
63
|
+
*/
|
|
64
|
+
extractSearchValues(resource: Record<string, unknown>, params: SearchParameterDef[]): Record<string, unknown[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Extract all outgoing references from a resource.
|
|
67
|
+
*
|
|
68
|
+
* Real implementation uses fhir-runtime's reference extractor
|
|
69
|
+
* based on StructureDefinition knowledge.
|
|
70
|
+
* Test implementation scans JSON for `.reference` fields.
|
|
71
|
+
*
|
|
72
|
+
* @param resource - The FHIR resource to scan.
|
|
73
|
+
* @param params - Reference-type SearchParameters (used for code mapping).
|
|
74
|
+
* @returns Array of extracted references with targetType/targetId.
|
|
75
|
+
*/
|
|
76
|
+
extractReferences(resource: Record<string, unknown>, params: SearchParameterDef[]): ExtractedReference[];
|
|
77
|
+
/**
|
|
78
|
+
* Validate a resource against a profile (optional capability).
|
|
79
|
+
*
|
|
80
|
+
* Not all implementations support validation. Check existence before calling.
|
|
81
|
+
*/
|
|
82
|
+
validate?(resource: Record<string, unknown>, profileUrl?: string): Promise<ValidationResult>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=runtime-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/runtime-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAMnE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;OASG;IACH,mBAAmB,CACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,kBAAkB,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAE7B;;;;;;;;;;OAUG;IACH,iBAAiB,CACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,kBAAkB,EAAE,GAC3B,kBAAkB,EAAE,CAAC;IAExB;;;;OAIG;IACH,QAAQ,CAAC,CACP,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FHIR R4 element cardinality map — auto-generated.
|
|
3
|
+
*
|
|
4
|
+
* Contains element paths where max != "1" (i.e., the element is an array).
|
|
5
|
+
* If a path is NOT in this set, it is assumed to be scalar (max = "1").
|
|
6
|
+
*
|
|
7
|
+
* Generated from 256 StructureDefinitions, 3119 array paths.
|
|
8
|
+
* DO NOT EDIT MANUALLY — regenerate with: npx tsx scripts/generate-cardinality-map.ts
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Set of FHIR element paths that have max cardinality != "1".
|
|
12
|
+
* Format: "ResourceType.property" or "ResourceType.backbone.property"
|
|
13
|
+
*/
|
|
14
|
+
export declare const ARRAY_ELEMENT_PATHS: ReadonlySet<string>;
|
|
15
|
+
//# sourceMappingURL=element-cardinality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-cardinality.d.ts","sourceRoot":"","sources":["../../../src/registry/element-cardinality.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAgjGlD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry module — barrel exports
|
|
3
|
+
*
|
|
4
|
+
* @module fhir-persistence/registry
|
|
5
|
+
*/
|
|
6
|
+
export { StructureDefinitionRegistry } from './structure-definition-registry.js';
|
|
7
|
+
export type { CanonicalProfile } from './structure-definition-registry.js';
|
|
8
|
+
export { SearchParameterRegistry } from './search-parameter-registry.js';
|
|
9
|
+
export type { SearchParamType, SearchStrategy, SearchColumnType, SearchParameterImpl, SearchParameterResource, SearchParameterBundle, } from './search-parameter-registry.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,YAAY,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,YAAY,EACV,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package Registry Repository — v2
|
|
3
|
+
*
|
|
4
|
+
* Tracks installed FHIR IG packages (name, version, checksum) in
|
|
5
|
+
* the `_packages` table. Used by IGPersistenceManager to detect
|
|
6
|
+
* new/upgrade/consistent state via checksum comparison.
|
|
7
|
+
*
|
|
8
|
+
* Key design decisions:
|
|
9
|
+
* - Uses StorageAdapter (not DatabaseClient)
|
|
10
|
+
* - `?` placeholders for SQLite compatibility
|
|
11
|
+
* - Stores serialized ResourceTableSet[] as `schema_snapshot` for SchemaDiff
|
|
12
|
+
* - Checksum is a hash of the package content (e.g., SHA-256)
|
|
13
|
+
*
|
|
14
|
+
* @module fhir-persistence/registry
|
|
15
|
+
*/
|
|
16
|
+
import type { StorageAdapter } from '../db/adapter.js';
|
|
17
|
+
export type PackageStatus = 'active' | 'superseded';
|
|
18
|
+
export interface InstalledPackage {
|
|
19
|
+
/** Package name (e.g., "hl7.fhir.r4.core"). */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Package version (e.g., "4.0.1"). */
|
|
22
|
+
version: string;
|
|
23
|
+
/** Content checksum for change detection. */
|
|
24
|
+
checksum: string;
|
|
25
|
+
/** Serialized ResourceTableSet[] JSON for SchemaDiff. */
|
|
26
|
+
schemaSnapshot: string | null;
|
|
27
|
+
/** When this package was installed/updated. */
|
|
28
|
+
installedAt: string;
|
|
29
|
+
/** Package status: active or superseded. */
|
|
30
|
+
status: PackageStatus;
|
|
31
|
+
}
|
|
32
|
+
export interface SchemaVersionRecord {
|
|
33
|
+
/** Auto-incrementing version number. */
|
|
34
|
+
version: number;
|
|
35
|
+
/** JSON snapshot of active package names+versions at this schema version. */
|
|
36
|
+
packageList: string;
|
|
37
|
+
/** Description of the schema change. */
|
|
38
|
+
description: string;
|
|
39
|
+
/** When this schema version was applied. */
|
|
40
|
+
appliedAt: string;
|
|
41
|
+
}
|
|
42
|
+
export declare class PackageRegistryRepo {
|
|
43
|
+
private readonly adapter;
|
|
44
|
+
constructor(adapter: StorageAdapter);
|
|
45
|
+
/**
|
|
46
|
+
* Ensure the packages tracking table exists.
|
|
47
|
+
*/
|
|
48
|
+
ensureTable(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Get the active version of a package by name.
|
|
51
|
+
*/
|
|
52
|
+
getPackage(name: string): Promise<InstalledPackage | undefined>;
|
|
53
|
+
/**
|
|
54
|
+
* Get all installed packages (all statuses).
|
|
55
|
+
*/
|
|
56
|
+
getInstalledPackages(): Promise<InstalledPackage[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Get only active packages.
|
|
59
|
+
*/
|
|
60
|
+
getActivePackages(): Promise<InstalledPackage[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Register a package version.
|
|
63
|
+
*
|
|
64
|
+
* When a new version is registered for the same package name:
|
|
65
|
+
* 1. Previous active versions are marked as 'superseded'
|
|
66
|
+
* 2. The new version is inserted as 'active'
|
|
67
|
+
* 3. A schema_version record is created with the package_list snapshot
|
|
68
|
+
*/
|
|
69
|
+
registerPackage(pkg: Omit<InstalledPackage, 'installedAt' | 'status'>, description?: string): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Insert or update a package record (backward-compatible).
|
|
72
|
+
*
|
|
73
|
+
* Uses INSERT OR REPLACE (SQLite UPSERT) to handle both new and upgraded packages.
|
|
74
|
+
*/
|
|
75
|
+
upsertPackage(pkg: Omit<InstalledPackage, 'installedAt' | 'status'>): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Remove all versions of a package.
|
|
78
|
+
*/
|
|
79
|
+
removePackage(name: string): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Check if a package needs update by comparing checksums.
|
|
82
|
+
*
|
|
83
|
+
* Returns:
|
|
84
|
+
* - 'new' if the package is not installed (no active version)
|
|
85
|
+
* - 'upgrade' if the checksum differs
|
|
86
|
+
* - 'consistent' if the checksum matches
|
|
87
|
+
*/
|
|
88
|
+
checkStatus(name: string, checksum: string): Promise<'new' | 'upgrade' | 'consistent'>;
|
|
89
|
+
/**
|
|
90
|
+
* Ensure the schema version table exists.
|
|
91
|
+
*/
|
|
92
|
+
ensureSchemaVersionTable(): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Record a schema version with the current active package list.
|
|
95
|
+
*/
|
|
96
|
+
recordSchemaVersion(description: string): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Get all schema version records.
|
|
99
|
+
*/
|
|
100
|
+
getSchemaVersions(): Promise<SchemaVersionRecord[]>;
|
|
101
|
+
/**
|
|
102
|
+
* Get the latest schema version record.
|
|
103
|
+
*/
|
|
104
|
+
getLatestSchemaVersion(): Promise<SchemaVersionRecord | undefined>;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=package-registry-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-registry-repo.d.ts","sourceRoot":"","sources":["../../../src/registry/package-registry-repo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAmCD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAEpD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQrE;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAOzD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAOtD;;;;;;;OAOG;IACG,eAAe,CACnB,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,GAAG,QAAQ,CAAC,EACrD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAmBhB;;;;OAIG;IACG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAezF;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD;;;;;;;OAOG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,GAAG,YAAY,CAAC;IAW5F;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB7D;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAOzD;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;CAMzE"}
|