fhir-persistence 0.9.0 → 0.10.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/dist/index.d.ts CHANGED
@@ -312,6 +312,20 @@ export declare function buildUpdateMainSQLv2(tableName: string, columns: Record<
312
312
  values: unknown[];
313
313
  };
314
314
 
315
+ /**
316
+ * Build a mapping from `urn:uuid:` fullUrls to assigned IDs + resourceTypes.
317
+ *
318
+ * Only processes POST entries with `urn:uuid:` fullUrl.
319
+ * Each matching entry gets a newly generated UUID as its assigned ID.
320
+ *
321
+ * The returned map has two key formats for each entry:
322
+ * - `"urn:uuid:<uuid>"` → `UrnTarget` (for fullUrl-based lookup)
323
+ *
324
+ * @param entries - Bundle entries to scan.
325
+ * @returns Map from urn:uuid string to UrnTarget.
326
+ */
327
+ export declare function buildUrnMap(entries: BundleEntryForUrn[]): Map<string, UrnTarget>;
328
+
315
329
  /**
316
330
  * v2: Build a complete WHERE clause from parsed search params using ? placeholders.
317
331
  */
@@ -326,11 +340,75 @@ export declare function buildWhereClauseV2(params: ParsedSearchParam[], registry
326
340
  */
327
341
  export declare function buildWhereFragmentV2(impl: SearchParameterImpl, param: ParsedSearchParam, dialect?: SqlDialect, resourceType?: string): WhereFragment | null;
328
342
 
343
+ /**
344
+ * A FHIR Bundle resource.
345
+ */
346
+ export declare interface Bundle {
347
+ resourceType: 'Bundle';
348
+ type: 'transaction' | 'batch';
349
+ entry?: BundleEntry[];
350
+ }
351
+
352
+ /**
353
+ * A single entry in a FHIR Bundle.
354
+ */
355
+ export declare interface BundleEntry {
356
+ fullUrl?: string;
357
+ resource?: FhirResource;
358
+ request?: {
359
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE';
360
+ url: string;
361
+ /** If-None-Exist header for conditional create. */
362
+ ifNoneExist?: string;
363
+ };
364
+ }
365
+
366
+ /**
367
+ * A single entry in a FHIR Bundle (minimal shape for URN resolution).
368
+ */
369
+ declare interface BundleEntryForUrn {
370
+ fullUrl?: string;
371
+ resource?: FhirResource;
372
+ request?: {
373
+ method: string;
374
+ url: string;
375
+ };
376
+ }
377
+
329
378
  declare interface BundleLink {
330
379
  relation: string;
331
380
  url: string;
332
381
  }
333
382
 
383
+ /**
384
+ * Result of processing a bundle.
385
+ */
386
+ export declare interface BundleResponse {
387
+ resourceType: 'Bundle';
388
+ type: 'transaction-response' | 'batch-response';
389
+ entry: BundleResponseEntry[];
390
+ }
391
+
392
+ /**
393
+ * Result entry for a single bundle operation.
394
+ */
395
+ export declare interface BundleResponseEntry {
396
+ resource?: PersistedResource;
397
+ response: {
398
+ status: string;
399
+ location?: string;
400
+ etag?: string;
401
+ lastModified?: string;
402
+ outcome?: {
403
+ issue: Array<{
404
+ severity: string;
405
+ code: string;
406
+ diagnostics: string;
407
+ }>;
408
+ };
409
+ };
410
+ }
411
+
334
412
  export declare interface CachedExpansion {
335
413
  valuesetUrl: string;
336
414
  version: string;
@@ -461,6 +539,66 @@ export declare class ConceptHierarchyRepo {
461
539
  private mapRow;
462
540
  }
463
541
 
542
+ export declare interface ConditionalCreateResult<T = PersistedResource> {
543
+ /** Whether a new resource was created or an existing one was returned. */
544
+ outcome: 'created' | 'existing';
545
+ /** The resource (created or existing). */
546
+ resource: T;
547
+ }
548
+
549
+ export declare interface ConditionalDeleteResult {
550
+ /** Number of resources deleted. */
551
+ count: number;
552
+ }
553
+
554
+ export declare class ConditionalService {
555
+ private readonly adapter;
556
+ private readonly registry;
557
+ constructor(adapter: StorageAdapter, registry: SearchParameterRegistry);
558
+ /**
559
+ * Conditional create: search for existing matches, create only if none found.
560
+ *
561
+ * - 0 matches → create new resource
562
+ * - 1 match → return existing resource (no-op)
563
+ * - 2+ matches → PreconditionFailedError
564
+ *
565
+ * @param resourceType - FHIR resource type
566
+ * @param resource - The resource to create
567
+ * @param searchParams - Search criteria (If-None-Exist)
568
+ */
569
+ conditionalCreate<T extends FhirResource>(resourceType: string, resource: T, searchParams: ParsedSearchParam[]): Promise<ConditionalCreateResult<T & PersistedResource>>;
570
+ /**
571
+ * Conditional update: search for matches, update if exactly one found.
572
+ *
573
+ * - 0 matches → create new resource
574
+ * - 1 match → update existing resource
575
+ * - 2+ matches → PreconditionFailedError
576
+ *
577
+ * @param resourceType - FHIR resource type
578
+ * @param resource - The resource to create/update
579
+ * @param searchParams - Search criteria
580
+ */
581
+ conditionalUpdate<T extends FhirResource>(resourceType: string, resource: T, searchParams: ParsedSearchParam[]): Promise<ConditionalUpdateResult<T & PersistedResource>>;
582
+ /**
583
+ * Conditional delete: delete all resources matching the search criteria.
584
+ *
585
+ * @param resourceType - FHIR resource type
586
+ * @param searchParams - Search criteria
587
+ * @returns Number of resources deleted
588
+ */
589
+ conditionalDelete(resourceType: string, searchParams: ParsedSearchParam[]): Promise<ConditionalDeleteResult>;
590
+ private searchMatches;
591
+ private createInTransaction;
592
+ private updateInTransaction;
593
+ }
594
+
595
+ export declare interface ConditionalUpdateResult<T = PersistedResource> {
596
+ /** Whether a new resource was created or an existing one was updated. */
597
+ outcome: 'created' | 'updated';
598
+ /** The resource after the operation. */
599
+ resource: T;
600
+ }
601
+
464
602
  /**
465
603
  * Definition of a PostgreSQL table constraint.
466
604
  */
@@ -518,13 +656,29 @@ declare interface CreateResourceOptions_2 {
518
656
  assignedId?: string;
519
657
  }
520
658
 
521
- declare interface CreateResourceOptions_3 {
522
- /** Pre-assigned ID (used in batch/transaction). */
523
- assignedId?: string;
659
+ export declare interface CreateResourceResult<T = PersistedResource> {
660
+ /** The persisted resource after the operation. */
661
+ resource: T;
662
+ /** True if a new resource was created, false if an existing match was returned. */
663
+ created: boolean;
524
664
  }
525
665
 
526
666
  declare type DDLDialect = 'sqlite' | 'postgres';
527
667
 
668
+ /**
669
+ * Replace `urn:uuid:` references in a resource with actual `Type/id` references.
670
+ *
671
+ * Only replaces values in `.reference` fields (FHIR Reference type)
672
+ * to avoid accidental replacement in narratives or identifiers.
673
+ *
674
+ * Uses structured deep-walk (iterative stack, not recursive).
675
+ *
676
+ * @param resource - The FHIR resource to resolve (will be cloned).
677
+ * @param urnMap - Map from urn:uuid strings to UrnTarget.
678
+ * @returns A new resource with resolved references.
679
+ */
680
+ export declare function deepResolveUrns<T extends FhirResource>(resource: T, urnMap: Map<string, UrnTarget>): T;
681
+
528
682
  /**
529
683
  * Default page size for search results.
530
684
  */
@@ -760,12 +914,13 @@ export declare class FhirPersistence {
760
914
  getRegistry(): SearchParameterRegistry;
761
915
  /** Get the IndexingPipeline. */
762
916
  getPipeline(): IndexingPipeline;
763
- createResource<T extends FhirResource>(resourceType: string, resource: T, options?: CreateResourceOptions_3): Promise<T & PersistedResource>;
917
+ createResource<T extends FhirResource>(resourceType: string, resource: T, options?: PersistenceCreateResourceOptions): Promise<CreateResourceResult<T & PersistedResource>>;
764
918
  readResource(resourceType: string, id: string): Promise<PersistedResource>;
765
- updateResource<T extends FhirResource>(resourceType: string, resource: T, options?: UpdateResourceOptions_3): Promise<T & PersistedResource>;
919
+ updateResource<T extends FhirResource>(resourceType: string, resource: T, options?: PersistenceUpdateResourceOptions): Promise<UpdateResourceResult<T & PersistedResource>>;
766
920
  deleteResource(resourceType: string, id: string): Promise<void>;
767
921
  readVersion(resourceType: string, id: string, versionId: string): Promise<PersistedResource>;
768
922
  readHistory(resourceType: string, id: string, options?: HistoryOptions_3): Promise<HistoryEntry[]>;
923
+ readTypeHistory(resourceType: string, options?: HistoryOptions_3): Promise<HistoryEntry[]>;
769
924
  /**
770
925
  * Stream search results row-by-row for large result sets.
771
926
  *
@@ -855,10 +1010,11 @@ export declare class FhirStore {
855
1010
  constructor(adapter: StorageAdapter);
856
1011
  createResource<T extends FhirResource>(resourceType: string, resource: T, options?: CreateResourceOptions_2): Promise<T & PersistedResource>;
857
1012
  readResource(resourceType: string, id: string): Promise<PersistedResource>;
858
- updateResource<T extends FhirResource>(resourceType: string, resource: T, options?: UpdateResourceOptions_2): Promise<T & PersistedResource>;
1013
+ updateResource<T extends FhirResource>(resourceType: string, resource: T, options?: StoreUpdateResourceOptions): Promise<StoreUpdateResourceResult<T & PersistedResource>>;
859
1014
  deleteResource(resourceType: string, id: string): Promise<void>;
860
1015
  readVersion(resourceType: string, id: string, versionId: string): Promise<PersistedResource>;
861
1016
  readHistory(resourceType: string, id: string, options?: HistoryOptions_2): Promise<HistoryEntry[]>;
1017
+ readTypeHistory(resourceType: string, options?: HistoryOptions_2): Promise<HistoryEntry[]>;
862
1018
  writeReferences(resourceType: string, resourceId: string, refs: ReferenceRowV2[]): Promise<void>;
863
1019
  }
864
1020
 
@@ -1830,6 +1986,20 @@ export declare interface PersistedResource extends FhirResource {
1830
1986
  };
1831
1987
  }
1832
1988
 
1989
+ export declare interface PersistenceCreateResourceOptions {
1990
+ /** Pre-assigned ID (used in batch/transaction). */
1991
+ assignedId?: string;
1992
+ /** Search condition for conditional create (If-None-Exist). */
1993
+ ifNoneExist?: ParsedSearchParam[];
1994
+ }
1995
+
1996
+ export declare interface PersistenceUpdateResourceOptions {
1997
+ /** Expected versionId for optimistic locking (If-Match header). */
1998
+ ifMatch?: string;
1999
+ /** When true, create the resource if it does not exist (PUT-as-Create / upsert). */
2000
+ upsert?: boolean;
2001
+ }
2002
+
1833
2003
  /**
1834
2004
  * Minimal interface that pg.PoolClient satisfies.
1835
2005
  */
@@ -1953,6 +2123,24 @@ declare interface PreparedStatement<T = Record<string, unknown>> {
1953
2123
  finalize(): void;
1954
2124
  }
1955
2125
 
2126
+ /**
2127
+ * v2: Process a batch bundle — each entry independently.
2128
+ *
2129
+ * Each entry is processed in its own try/catch.
2130
+ * urn:uuid references are rejected in batch mode (return 400).
2131
+ */
2132
+ export declare function processBatchV2(store: FhirStore, bundle: Bundle): Promise<BundleResponse>;
2133
+
2134
+ /**
2135
+ * v2: Process a transaction bundle — all-or-nothing.
2136
+ *
2137
+ * All entries are processed within a single StorageAdapter transaction.
2138
+ * If any entry fails, the entire transaction is rolled back.
2139
+ *
2140
+ * Entry processing order: strict sequential (no reorder).
2141
+ */
2142
+ export declare function processTransactionV2(store: FhirStore, adapter: StorageAdapter, bundle: Bundle): Promise<BundleResponse>;
2143
+
1956
2144
  /**
1957
2145
  * Resource types that can be managed by project admins (not just super-admins).
1958
2146
  *
@@ -3182,6 +3370,20 @@ declare interface StoredValueSet {
3182
3370
  storedAt: string;
3183
3371
  }
3184
3372
 
3373
+ export declare interface StoreUpdateResourceOptions {
3374
+ /** Expected versionId for optimistic locking (If-Match header). */
3375
+ ifMatch?: string;
3376
+ /** When true, create the resource if it does not exist (PUT-as-Create / upsert). */
3377
+ upsert?: boolean;
3378
+ }
3379
+
3380
+ export declare interface StoreUpdateResourceResult<T = PersistedResource> {
3381
+ /** The persisted resource after the operation. */
3382
+ resource: T;
3383
+ /** True if the resource was newly created (upsert), false if updated. */
3384
+ created: boolean;
3385
+ }
3386
+
3185
3387
  /**
3186
3388
  * DefinitionProvider — Bridge Interface for fhir-definition
3187
3389
  *
@@ -3374,14 +3576,21 @@ export declare interface UpdateResourceOptions {
3374
3576
  ifMatch?: string;
3375
3577
  }
3376
3578
 
3377
- declare interface UpdateResourceOptions_2 {
3378
- /** Expected versionId for optimistic locking (If-Match header). */
3379
- ifMatch?: string;
3579
+ export declare interface UpdateResourceResult<T = PersistedResource> {
3580
+ /** The persisted resource after the operation. */
3581
+ resource: T;
3582
+ /** True if the resource was newly created (upsert), false if updated. */
3583
+ created: boolean;
3380
3584
  }
3381
3585
 
3382
- declare interface UpdateResourceOptions_3 {
3383
- /** Expected versionId for optimistic locking (If-Match header). */
3384
- ifMatch?: string;
3586
+ /**
3587
+ * A resolved URN target with explicit resourceType.
3588
+ */
3589
+ export declare interface UrnTarget {
3590
+ /** The assigned resource ID. */
3591
+ id: string;
3592
+ /** The FHIR resource type (e.g., "Patient"). */
3593
+ resourceType: string;
3385
3594
  }
3386
3595
 
3387
3596
  /**
@@ -29,8 +29,15 @@ export type { SqlDialect } from './db/dialect.js';
29
29
  export { SQLiteDialect } from './db/sqlite-dialect.js';
30
30
  export { PostgresDialect } from './db/postgres-dialect.js';
31
31
  export { FhirStore } from './store/fhir-store.js';
32
+ export type { UpdateResourceResult as StoreUpdateResourceResult, UpdateResourceOptions as StoreUpdateResourceOptions, } from './store/fhir-store.js';
32
33
  export { FhirPersistence } from './store/fhir-persistence.js';
33
- export type { FhirPersistenceOptions } from './store/fhir-persistence.js';
34
+ export type { FhirPersistenceOptions, CreateResourceOptions as PersistenceCreateResourceOptions, CreateResourceResult, UpdateResourceOptions as PersistenceUpdateResourceOptions, UpdateResourceResult, } from './store/fhir-persistence.js';
35
+ export { ConditionalService } from './store/conditional-service.js';
36
+ export type { ConditionalCreateResult, ConditionalUpdateResult, ConditionalDeleteResult, } from './store/conditional-service.js';
37
+ export { processTransactionV2, processBatchV2 } from './transaction/bundle-processor.js';
38
+ export type { Bundle, BundleEntry, BundleResponse, BundleResponseEntry, } from './transaction/bundle-processor.js';
39
+ export { buildUrnMap, deepResolveUrns } from './transaction/urn-resolver.js';
40
+ export type { UrnTarget } from './transaction/urn-resolver.js';
34
41
  export { IndexingPipeline } from './repo/indexing-pipeline.js';
35
42
  export type { IndexResult, IndexingPipelineOptions } from './repo/indexing-pipeline.js';
36
43
  export { LookupTableWriter } from './repo/lookup-table-writer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"where-builder.d.ts","sourceRoot":"","sources":["../../../src/search/where-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAuB,MAAM,YAAY,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAwB9D;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB,aAAa,GAAG,IAAI,CAkCtB;AA0nBD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,iBAAiB,EAAE,EAC3B,QAAQ,EAAE,uBAAuB,EACjC,YAAY,EAAE,MAAM,GACnB,aAAa,GAAG,IAAI,CAmCtB;AAqID;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,UAAU,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,aAAa,GAAG,IAAI,CA8BtB;AA8SD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,EAAE,EAC3B,QAAQ,EAAE,uBAAuB,EACjC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,UAAU,GACnB,aAAa,GAAG,IAAI,CA2BtB"}
1
+ {"version":3,"file":"where-builder.d.ts","sourceRoot":"","sources":["../../../src/search/where-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAuB,MAAM,YAAY,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAwB9D;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB,aAAa,GAAG,IAAI,CAkCtB;AAuoBD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,iBAAiB,EAAE,EAC3B,QAAQ,EAAE,uBAAuB,EACjC,YAAY,EAAE,MAAM,GACnB,aAAa,GAAG,IAAI,CAmCtB;AAqID;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,UAAU,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,aAAa,GAAG,IAAI,CA8BtB;AAwTD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,EAAE,EAC3B,QAAQ,EAAE,uBAAuB,EACjC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,UAAU,GACnB,aAAa,GAAG,IAAI,CA2BtB"}
@@ -24,13 +24,30 @@ import type { SearchParameterRegistry } from '../registry/search-parameter-regis
24
24
  import type { FhirResource, PersistedResource, HistoryEntry } from '../repo/types.js';
25
25
  import { IndexingPipeline } from '../repo/indexing-pipeline.js';
26
26
  import type { IndexingPipelineOptions } from '../repo/indexing-pipeline.js';
27
+ import type { ParsedSearchParam } from '../search/types.js';
27
28
  export interface CreateResourceOptions {
28
29
  /** Pre-assigned ID (used in batch/transaction). */
29
30
  assignedId?: string;
31
+ /** Search condition for conditional create (If-None-Exist). */
32
+ ifNoneExist?: ParsedSearchParam[];
33
+ }
34
+ export interface CreateResourceResult<T = PersistedResource> {
35
+ /** The persisted resource after the operation. */
36
+ resource: T;
37
+ /** True if a new resource was created, false if an existing match was returned. */
38
+ created: boolean;
30
39
  }
31
40
  export interface UpdateResourceOptions {
32
41
  /** Expected versionId for optimistic locking (If-Match header). */
33
42
  ifMatch?: string;
43
+ /** When true, create the resource if it does not exist (PUT-as-Create / upsert). */
44
+ upsert?: boolean;
45
+ }
46
+ export interface UpdateResourceResult<T = PersistedResource> {
47
+ /** The persisted resource after the operation. */
48
+ resource: T;
49
+ /** True if the resource was newly created (upsert), false if updated. */
50
+ created: boolean;
34
51
  }
35
52
  export interface HistoryOptions {
36
53
  since?: string;
@@ -52,12 +69,13 @@ export declare class FhirPersistence {
52
69
  getRegistry(): SearchParameterRegistry;
53
70
  /** Get the IndexingPipeline. */
54
71
  getPipeline(): IndexingPipeline;
55
- createResource<T extends FhirResource>(resourceType: string, resource: T, options?: CreateResourceOptions): Promise<T & PersistedResource>;
72
+ createResource<T extends FhirResource>(resourceType: string, resource: T, options?: CreateResourceOptions): Promise<CreateResourceResult<T & PersistedResource>>;
56
73
  readResource(resourceType: string, id: string): Promise<PersistedResource>;
57
- updateResource<T extends FhirResource>(resourceType: string, resource: T, options?: UpdateResourceOptions): Promise<T & PersistedResource>;
74
+ updateResource<T extends FhirResource>(resourceType: string, resource: T, options?: UpdateResourceOptions): Promise<UpdateResourceResult<T & PersistedResource>>;
58
75
  deleteResource(resourceType: string, id: string): Promise<void>;
59
76
  readVersion(resourceType: string, id: string, versionId: string): Promise<PersistedResource>;
60
77
  readHistory(resourceType: string, id: string, options?: HistoryOptions): Promise<HistoryEntry[]>;
78
+ readTypeHistory(resourceType: string, options?: HistoryOptions): Promise<HistoryEntry[]>;
61
79
  /**
62
80
  * Stream search results row-by-row for large result sets.
63
81
  *
@@ -1 +1 @@
1
- {"version":3,"file":"fhir-persistence.d.ts","sourceRoot":"","sources":["../../../src/store/fhir-persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,uBAAuB,EAAuB,MAAM,0CAA0C,CAAC;AAC7G,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EAGb,MAAM,kBAAkB,CAAC;AAc1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAM5E,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;gBAG1C,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,uBAAuB,EACjC,OAAO,CAAC,EAAE,sBAAsB;IAWlC,yCAAyC;IACzC,UAAU,IAAI,cAAc;IAE5B,uCAAuC;IACvC,WAAW,IAAI,uBAAuB;IAEtC,gCAAgC;IAChC,WAAW,IAAI,gBAAgB;IAMzB,cAAc,CAAC,CAAC,SAAS,YAAY,EACzC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,EACX,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,CAAC,GAAG,iBAAiB,CAAC;IA2D3B,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwB1E,cAAc,CAAC,CAAC,SAAS,YAAY,EACzC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,EACX,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,CAAC,GAAG,iBAAiB,CAAC;IAyF3B,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD/D,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAkBvB,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,YAAY,EAAE,CAAC;IA6B1B;;;;;;;;;;;OAWG;IACI,YAAY,CACjB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,GACrB,cAAc,CAAC,iBAAiB,CAAC;IAmBpC;;;OAGG;IACG,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtE,OAAO,CAAC,QAAQ;CAGjB"}
1
+ {"version":3,"file":"fhir-persistence.d.ts","sourceRoot":"","sources":["../../../src/store/fhir-persistence.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,14 @@ export interface CreateResourceOptions {
24
24
  export interface UpdateResourceOptions {
25
25
  /** Expected versionId for optimistic locking (If-Match header). */
26
26
  ifMatch?: string;
27
+ /** When true, create the resource if it does not exist (PUT-as-Create / upsert). */
28
+ upsert?: boolean;
29
+ }
30
+ export interface UpdateResourceResult<T = PersistedResource> {
31
+ /** The persisted resource after the operation. */
32
+ resource: T;
33
+ /** True if the resource was newly created (upsert), false if updated. */
34
+ created: boolean;
27
35
  }
28
36
  export interface HistoryOptions {
29
37
  since?: string;
@@ -35,10 +43,11 @@ export declare class FhirStore {
35
43
  constructor(adapter: StorageAdapter);
36
44
  createResource<T extends FhirResource>(resourceType: string, resource: T, options?: CreateResourceOptions): Promise<T & PersistedResource>;
37
45
  readResource(resourceType: string, id: string): Promise<PersistedResource>;
38
- updateResource<T extends FhirResource>(resourceType: string, resource: T, options?: UpdateResourceOptions): Promise<T & PersistedResource>;
46
+ updateResource<T extends FhirResource>(resourceType: string, resource: T, options?: UpdateResourceOptions): Promise<UpdateResourceResult<T & PersistedResource>>;
39
47
  deleteResource(resourceType: string, id: string): Promise<void>;
40
48
  readVersion(resourceType: string, id: string, versionId: string): Promise<PersistedResource>;
41
49
  readHistory(resourceType: string, id: string, options?: HistoryOptions): Promise<HistoryEntry[]>;
50
+ readTypeHistory(resourceType: string, options?: HistoryOptions): Promise<HistoryEntry[]>;
42
51
  writeReferences(resourceType: string, resourceId: string, refs: ReferenceRowV2[]): Promise<void>;
43
52
  }
44
53
  //# sourceMappingURL=fhir-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fhir-store.d.ts","sourceRoot":"","sources":["../../../src/store/fhir-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EAGb,MAAM,kBAAkB,CAAC;AAgB1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAMnE,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAM9C,cAAc,CAAC,CAAC,SAAS,YAAY,EACzC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,EACX,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,CAAC,GAAG,iBAAiB,CAAC;IAmD3B,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwB1E,cAAc,CAAC,CAAC,SAAS,YAAY,EACzC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,EACX,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,CAAC,GAAG,iBAAiB,CAAC;IAwF3B,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD/D,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAkBvB,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,YAAY,EAAE,CAAC;IA6BpB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;CAYjB"}
1
+ {"version":3,"file":"fhir-store.d.ts","sourceRoot":"","sources":["../../../src/store/fhir-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EAGb,MAAM,kBAAkB,CAAC;AAiB1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAMnE,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,iBAAiB;IACzD,kDAAkD;IAClD,QAAQ,EAAE,CAAC,CAAC;IACZ,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAM9C,cAAc,CAAC,CAAC,SAAS,YAAY,EACzC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,EACX,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,CAAC,GAAG,iBAAiB,CAAC;IAmD3B,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwB1E,cAAc,CAAC,CAAC,SAAS,YAAY,EACzC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,EACX,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAqHjD,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD/D,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAkBvB,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,YAAY,EAAE,CAAC;IA6BpB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,YAAY,EAAE,CAAC;IA4BpB,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;CAYjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fhir-persistence",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Embedded FHIR R4 persistence layer — CRUD, search, indexing, schema migration over SQLite and PostgreSQL",
5
5
  "homepage": "https://github.com/medxaidev/fhir-persistence#readme",
6
6
  "license": "MIT",