@atomic-ehr/fhir-canonical-manager 0.0.8 → 0.0.9
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 +72 -0
- package/dist/cache/core.d.ts +7 -0
- package/dist/cache/core.d.ts.map +1 -0
- package/dist/cache/core.js +11 -0
- package/dist/cache/core.js.map +1 -0
- package/dist/cache/index.d.ts +4 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +4 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/persistence.d.ts +5 -0
- package/dist/cache/persistence.d.ts.map +1 -0
- package/dist/cache/persistence.js +25 -0
- package/dist/cache/persistence.js.map +1 -0
- package/dist/cache/validation.d.ts +2 -0
- package/dist/cache/validation.d.ts.map +1 -0
- package/dist/cache/validation.js +21 -0
- package/dist/cache/validation.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +8 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/searchparam.d.ts +2 -0
- package/dist/cli/searchparam.d.ts.map +1 -0
- package/dist/cli/searchparam.js +131 -0
- package/dist/cli/searchparam.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/fs/index.d.ts +2 -0
- package/dist/fs/index.d.ts.map +1 -0
- package/dist/fs/index.js +2 -0
- package/dist/fs/index.js.map +1 -0
- package/dist/fs/utils.d.ts +4 -0
- package/dist/fs/utils.d.ts.map +1 -0
- package/dist/fs/utils.js +23 -0
- package/dist/fs/utils.js.map +1 -0
- package/dist/index.d.ts +6 -111
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -592
- package/dist/index.js.map +1 -1
- package/dist/manager/canonical.d.ts +3 -0
- package/dist/manager/canonical.d.ts.map +1 -0
- package/dist/manager/canonical.js +194 -0
- package/dist/manager/canonical.js.map +1 -0
- package/dist/manager/index.d.ts +3 -0
- package/dist/manager/index.d.ts.map +1 -0
- package/dist/manager/index.js +3 -0
- package/dist/manager/index.js.map +1 -0
- package/dist/package/detector.d.ts +2 -0
- package/dist/package/detector.d.ts.map +1 -0
- package/dist/package/detector.js +19 -0
- package/dist/package/detector.js.map +1 -0
- package/dist/package/index.d.ts +3 -0
- package/dist/package/index.d.ts.map +1 -0
- package/dist/package/index.js +3 -0
- package/dist/package/index.js.map +1 -0
- package/dist/package/installer.d.ts +2 -0
- package/dist/package/installer.d.ts.map +1 -0
- package/dist/package/installer.js +55 -0
- package/dist/package/installer.js.map +1 -0
- package/dist/reference/index.d.ts +5 -0
- package/dist/reference/index.d.ts.map +1 -0
- package/dist/reference/index.js +4 -0
- package/dist/reference/index.js.map +1 -0
- package/dist/reference/manager.d.ts +10 -0
- package/dist/reference/manager.d.ts.map +1 -0
- package/dist/reference/manager.js +36 -0
- package/dist/reference/manager.js.map +1 -0
- package/dist/reference/store.d.ts +6 -0
- package/dist/reference/store.d.ts.map +1 -0
- package/dist/reference/store.js +6 -0
- package/dist/reference/store.js.map +1 -0
- package/dist/resolver/context.d.ts +4 -0
- package/dist/resolver/context.d.ts.map +1 -0
- package/dist/resolver/context.js +14 -0
- package/dist/resolver/context.js.map +1 -0
- package/dist/resolver/index.d.ts +2 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +2 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/scanner/directory.d.ts +3 -0
- package/dist/scanner/directory.d.ts.map +1 -0
- package/dist/scanner/directory.js +33 -0
- package/dist/scanner/directory.js.map +1 -0
- package/dist/scanner/index.d.ts +5 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +5 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/package.d.ts +3 -0
- package/dist/scanner/package.d.ts.map +1 -0
- package/dist/scanner/package.js +26 -0
- package/dist/scanner/package.js.map +1 -0
- package/dist/scanner/parser.d.ts +5 -0
- package/dist/scanner/parser.d.ts.map +1 -0
- package/dist/scanner/parser.js +39 -0
- package/dist/scanner/parser.js.map +1 -0
- package/dist/scanner/processor.d.ts +4 -0
- package/dist/scanner/processor.d.ts.map +1 -0
- package/dist/scanner/processor.js +53 -0
- package/dist/scanner/processor.js.map +1 -0
- package/dist/search/index.d.ts +3 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +3 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/smart.d.ts +9 -0
- package/dist/search/smart.d.ts.map +1 -0
- package/dist/search/smart.js +31 -0
- package/dist/search/smart.js.map +1 -0
- package/dist/search/terms.d.ts +2 -0
- package/dist/search/terms.d.ts.map +1 -0
- package/dist/search/terms.js +19 -0
- package/dist/search/terms.js.map +1 -0
- package/dist/types/core.d.ts +91 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +2 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/internal.d.ts +48 -0
- package/dist/types/internal.d.ts.map +1 -0
- package/dist/types/internal.js +2 -0
- package/dist/types/internal.js.map +1 -0
- package/package.json +1 -1
- package/src/cache/core.ts +20 -0
- package/src/cache/index.ts +7 -0
- package/src/cache/persistence.ts +39 -0
- package/src/cache/validation.ts +27 -0
- package/src/cli/index.ts +8 -4
- package/src/cli/searchparam.ts +162 -0
- package/src/constants.ts +6 -0
- package/src/fs/index.ts +5 -0
- package/src/fs/utils.ts +28 -0
- package/src/index.ts +13 -990
- package/src/manager/canonical.ts +338 -0
- package/src/manager/index.ts +8 -0
- package/src/package/detector.ts +24 -0
- package/src/package/index.ts +6 -0
- package/src/package/installer.ts +77 -0
- package/src/reference/index.ts +10 -0
- package/src/reference/manager.ts +51 -0
- package/src/reference/store.ts +15 -0
- package/src/resolver/context.ts +25 -0
- package/src/resolver/index.ts +5 -0
- package/src/scanner/directory.ts +42 -0
- package/src/scanner/index.ts +8 -0
- package/src/scanner/package.ts +38 -0
- package/src/scanner/parser.ts +42 -0
- package/src/scanner/processor.ts +69 -0
- package/src/search/index.ts +6 -0
- package/src/search/smart.ts +57 -0
- package/src/search/terms.ts +22 -0
- package/src/types/core.ts +117 -0
- package/src/types/index.ts +6 -0
- package/src/types/internal.ts +57 -0
package/README.md
CHANGED
|
@@ -184,6 +184,47 @@ fcm resolve http://hl7.org/fhir/ValueSet/administrative-gender > gender.json
|
|
|
184
184
|
fcm resolve http://hl7.org/fhir/StructureDefinition/Patient --fields url,type,kind
|
|
185
185
|
```
|
|
186
186
|
|
|
187
|
+
#### `fcm searchparam`
|
|
188
|
+
Display search parameters for a specific FHIR resource type.
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# Display search parameters for Patient resource
|
|
192
|
+
fcm searchparam Patient
|
|
193
|
+
|
|
194
|
+
# Output as JSON
|
|
195
|
+
fcm searchparam Observation --format json
|
|
196
|
+
|
|
197
|
+
# Export as CSV for spreadsheet analysis
|
|
198
|
+
fcm searchparam Encounter --format csv > encounter-params.csv
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Output Formats:**
|
|
202
|
+
- **table** (default): Displays each parameter in a multiline format with full data
|
|
203
|
+
- **json**: Outputs as JSON array with code, type, expression, and url fields
|
|
204
|
+
- **csv**: Exports as CSV for spreadsheet analysis
|
|
205
|
+
|
|
206
|
+
Example output (table format):
|
|
207
|
+
```
|
|
208
|
+
Code: active
|
|
209
|
+
Type: token
|
|
210
|
+
Expression: Patient.active
|
|
211
|
+
URL: http://hl7.org/fhir/SearchParameter/Patient-active
|
|
212
|
+
---
|
|
213
|
+
Code: address
|
|
214
|
+
Type: string
|
|
215
|
+
Expression: Patient.address | Person.address | Practitioner.address |
|
|
216
|
+
RelatedPerson.address
|
|
217
|
+
URL: http://hl7.org/fhir/SearchParameter/individual-address
|
|
218
|
+
---
|
|
219
|
+
Code: identifier
|
|
220
|
+
Type: token
|
|
221
|
+
Expression: Patient.identifier
|
|
222
|
+
URL: http://hl7.org/fhir/SearchParameter/Patient-identifier
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
Total: 29 search parameters
|
|
226
|
+
```
|
|
227
|
+
|
|
187
228
|
### CLI Examples
|
|
188
229
|
|
|
189
230
|
```bash
|
|
@@ -218,7 +259,9 @@ fcm search --type ValueSet --json > valuesets.json
|
|
|
218
259
|
| Filter by kind | `fcm search -k resource` |
|
|
219
260
|
| Combine filters | `fcm search -sd -t Patient` |
|
|
220
261
|
| Get resource | `fcm resolve <url>` |
|
|
262
|
+
| Get search parameters | `fcm searchparam Patient` |
|
|
221
263
|
| Export as JSON | `fcm search --json` |
|
|
264
|
+
| Export params as CSV | `fcm searchparam Patient --format csv` |
|
|
222
265
|
| Help | `fcm --help` |
|
|
223
266
|
|
|
224
267
|
## Core Concepts
|
|
@@ -390,6 +433,34 @@ const packages = await manager.packages();
|
|
|
390
433
|
// ]
|
|
391
434
|
```
|
|
392
435
|
|
|
436
|
+
### `getSearchParametersForResource(resourceType): Promise<SearchParameter[]>`
|
|
437
|
+
|
|
438
|
+
Gets all search parameters applicable to a specific FHIR resource type.
|
|
439
|
+
|
|
440
|
+
```typescript
|
|
441
|
+
// Get search parameters for Patient resource
|
|
442
|
+
const searchParams = await manager.getSearchParametersForResource('Patient');
|
|
443
|
+
|
|
444
|
+
// Each parameter contains FHIR SearchParameter fields
|
|
445
|
+
searchParams.forEach(param => {
|
|
446
|
+
console.log(`${param.code}: ${param.type} - ${param.expression}`);
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
// Example output:
|
|
450
|
+
// identifier: token - Patient.identifier
|
|
451
|
+
// name: string - Patient.name
|
|
452
|
+
// birthdate: date - Patient.birthDate
|
|
453
|
+
// gender: token - Patient.gender
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
Returns an array of SearchParameter resources with all FHIR fields preserved, including:
|
|
457
|
+
- `url`: Canonical URL of the search parameter
|
|
458
|
+
- `code`: Search parameter name used in queries
|
|
459
|
+
- `type`: Parameter type (token, string, date, reference, etc.)
|
|
460
|
+
- `expression`: FHIRPath expression
|
|
461
|
+
- `base`: Array of resource types this parameter applies to
|
|
462
|
+
- Additional FHIR SearchParameter fields
|
|
463
|
+
|
|
393
464
|
### `destroy(): Promise<void>`
|
|
394
465
|
|
|
395
466
|
Cleans up resources and clears cache from memory (disk cache persists).
|
|
@@ -410,6 +481,7 @@ The `fcm` command-line interface provides comprehensive FHIR resource management
|
|
|
410
481
|
| `fcm list [package]` | List packages or resources |
|
|
411
482
|
| `fcm search [terms...]` | Search resources with advanced filtering |
|
|
412
483
|
| `fcm resolve <url>` | Get a resource by canonical URL |
|
|
484
|
+
| `fcm searchparam <resourceType>` | Display search parameters for a resource type |
|
|
413
485
|
|
|
414
486
|
### Global Options
|
|
415
487
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IndexCache } from '../types';
|
|
2
|
+
import { type ReferenceManager } from '../reference';
|
|
3
|
+
export interface ExtendedCache extends IndexCache {
|
|
4
|
+
referenceManager: ReferenceManager;
|
|
5
|
+
}
|
|
6
|
+
export declare const createCache: () => ExtendedCache;
|
|
7
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/cache/core.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,eAAO,MAAM,WAAW,QAAO,aAQ9B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createReferenceManager } from '../reference';
|
|
2
|
+
export const createCache = () => {
|
|
3
|
+
const referenceManager = createReferenceManager();
|
|
4
|
+
return {
|
|
5
|
+
entries: {},
|
|
6
|
+
packages: {},
|
|
7
|
+
references: {},
|
|
8
|
+
referenceManager,
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/cache/core.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,cAAc,CAAC;AAM7E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAkB,EAAE;IAC7C,MAAM,gBAAgB,GAAG,sBAAsB,EAAE,CAAC;IAClD,OAAO;QACL,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAsB,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CacheData } from '../types';
|
|
2
|
+
import type { ExtendedCache } from './core';
|
|
3
|
+
export declare const saveCacheToDisk: (cache: ExtendedCache, cacheDir: string, workingDir: string) => Promise<void>;
|
|
4
|
+
export declare const loadCacheFromDisk: (cacheDir: string) => Promise<CacheData | null>;
|
|
5
|
+
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/cache/persistence.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,eAAO,MAAM,eAAe,GAC1B,OAAO,aAAa,EACpB,UAAU,MAAM,EAChB,YAAY,MAAM,KACjB,OAAO,CAAC,IAAI,CAYd,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,MAAM,KACf,OAAO,CAAC,SAAS,GAAG,IAAI,CAQ1B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { computePackageLockHash } from './validation';
|
|
4
|
+
export const saveCacheToDisk = async (cache, cacheDir, workingDir) => {
|
|
5
|
+
const packageLockHash = await computePackageLockHash(workingDir);
|
|
6
|
+
const cacheData = {
|
|
7
|
+
entries: cache.entries,
|
|
8
|
+
packages: cache.packages,
|
|
9
|
+
references: cache.referenceManager.getAllReferences(),
|
|
10
|
+
packageLockHash: packageLockHash || undefined,
|
|
11
|
+
};
|
|
12
|
+
const cachePath = path.join(cacheDir, "index.json");
|
|
13
|
+
await fs.writeFile(cachePath, JSON.stringify(cacheData, null, 2));
|
|
14
|
+
};
|
|
15
|
+
export const loadCacheFromDisk = async (cacheDir) => {
|
|
16
|
+
try {
|
|
17
|
+
const cachePath = path.join(cacheDir, "index.json");
|
|
18
|
+
const content = await fs.readFile(cachePath, "utf-8");
|
|
19
|
+
return JSON.parse(content);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/cache/persistence.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,KAAoB,EACpB,QAAgB,EAChB,UAAkB,EACH,EAAE;IACjB,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAEjE,MAAM,SAAS,GAAc;QAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE;QACrD,eAAe,EAAE,eAAe,IAAI,SAAS;KAC9C,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,QAAgB,EACW,EAAE;IAC7B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/cache/validation.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,sBAAsB,GACjC,YAAY,MAAM,KACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAgBvB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { createHash } from 'crypto';
|
|
4
|
+
export const computePackageLockHash = async (workingDir) => {
|
|
5
|
+
try {
|
|
6
|
+
const packageLockPath = path.join(workingDir, "package-lock.json");
|
|
7
|
+
try {
|
|
8
|
+
const content = await fs.readFile(packageLockPath, "utf-8");
|
|
9
|
+
return createHash("sha256").update(content).digest("hex");
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
const bunLockPath = path.join(workingDir, "bun.lock");
|
|
13
|
+
const content = await fs.readFile(bunLockPath, "utf-8");
|
|
14
|
+
return createHash("sha256").update(content).digest("hex");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/cache/validation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EACzC,UAAkB,EACM,EAAE;IAC1B,IAAI,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YAEP,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACxD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAMA,OAAO,KAAK,EAAE,MAAM,EAA2B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAMA,OAAO,KAAK,EAAE,MAAM,EAA2B,MAAM,aAAa,CAAC;AAoGnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACzC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CAC3C,CA4CA;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAWpD;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAO1E"}
|
package/dist/cli/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { initCommand } from "./init.js";
|
|
|
7
7
|
import { listCommand } from "./list.js";
|
|
8
8
|
import { searchCommand } from "./search.js";
|
|
9
9
|
import { resolveCommand } from "./resolve.js";
|
|
10
|
+
import { searchParamCommand } from "./searchparam.js";
|
|
10
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
12
|
const __dirname = path.dirname(__filename);
|
|
12
13
|
const packageJsonPath = path.join(__dirname, "..", "..", "package.json");
|
|
@@ -25,10 +26,11 @@ fcm - FHIR Canonical Manager CLI
|
|
|
25
26
|
Usage: fcm <command> [options]
|
|
26
27
|
|
|
27
28
|
Commands:
|
|
28
|
-
init
|
|
29
|
-
list
|
|
30
|
-
search
|
|
31
|
-
resolve
|
|
29
|
+
init Initialize FHIR packages in current directory
|
|
30
|
+
list List packages or resources
|
|
31
|
+
search Search for resources
|
|
32
|
+
resolve Get a resource by canonical URL
|
|
33
|
+
searchparam Display search parameters for a resource type
|
|
32
34
|
|
|
33
35
|
Options:
|
|
34
36
|
--help Show help
|
|
@@ -39,6 +41,7 @@ Examples:
|
|
|
39
41
|
fcm list
|
|
40
42
|
fcm search Patient
|
|
41
43
|
fcm resolve http://hl7.org/fhir/StructureDefinition/Patient
|
|
44
|
+
fcm searchparam Patient
|
|
42
45
|
`);
|
|
43
46
|
}
|
|
44
47
|
async function main() {
|
|
@@ -63,6 +66,7 @@ async function main() {
|
|
|
63
66
|
list: listCommand,
|
|
64
67
|
search: searchCommand,
|
|
65
68
|
resolve: resolveCommand,
|
|
69
|
+
searchparam: searchParamCommand,
|
|
66
70
|
};
|
|
67
71
|
if (!commands[command]) {
|
|
68
72
|
console.error(`Error: Unknown command '${command}'`);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchparam.d.ts","sourceRoot":"","sources":["../../src/cli/searchparam.ts"],"names":[],"mappings":"AAQA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEtE"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { CanonicalManager } from "../index.js";
|
|
2
|
+
import { parseArgs, loadPackageJson, getConfigFromPackageJson } from "./index.js";
|
|
3
|
+
export async function searchParamCommand(args) {
|
|
4
|
+
const { positional, options } = parseArgs(args);
|
|
5
|
+
if (options.help || positional.length === 0) {
|
|
6
|
+
console.log(`
|
|
7
|
+
Usage: fcm searchparam <resourceType> [options]
|
|
8
|
+
|
|
9
|
+
Display search parameters for a specific FHIR resource type
|
|
10
|
+
|
|
11
|
+
Arguments:
|
|
12
|
+
resourceType The FHIR resource type (e.g., Patient, Observation)
|
|
13
|
+
|
|
14
|
+
Options:
|
|
15
|
+
--format Output format: table (default), json, csv
|
|
16
|
+
--help Show this help message
|
|
17
|
+
|
|
18
|
+
Examples:
|
|
19
|
+
fcm searchparam Patient
|
|
20
|
+
fcm searchparam Observation --format json
|
|
21
|
+
fcm searchparam Encounter --format csv
|
|
22
|
+
`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const resourceType = positional[0];
|
|
26
|
+
const format = options.format || 'table';
|
|
27
|
+
const packageJson = await loadPackageJson();
|
|
28
|
+
if (!packageJson) {
|
|
29
|
+
throw new Error("No package.json found. Run 'fcm init' to initialize a project.");
|
|
30
|
+
}
|
|
31
|
+
const config = getConfigFromPackageJson(packageJson);
|
|
32
|
+
const manager = CanonicalManager({
|
|
33
|
+
packages: config.packages || [],
|
|
34
|
+
registry: config.registry,
|
|
35
|
+
workingDir: config.workingDir || process.cwd(),
|
|
36
|
+
});
|
|
37
|
+
await manager.init();
|
|
38
|
+
try {
|
|
39
|
+
const searchParams = await manager.getSearchParametersForResource(resourceType);
|
|
40
|
+
if (searchParams.length === 0) {
|
|
41
|
+
console.log(`No search parameters found for resource type '${resourceType}'`);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
switch (format) {
|
|
45
|
+
case 'json':
|
|
46
|
+
outputJson(searchParams);
|
|
47
|
+
break;
|
|
48
|
+
case 'csv':
|
|
49
|
+
outputCsv(searchParams);
|
|
50
|
+
break;
|
|
51
|
+
case 'table':
|
|
52
|
+
default:
|
|
53
|
+
outputTable(searchParams);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
await manager.destroy();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function outputTable(searchParams) {
|
|
62
|
+
console.log('');
|
|
63
|
+
for (const param of searchParams) {
|
|
64
|
+
const code = param.code || '';
|
|
65
|
+
const type = param.type || '';
|
|
66
|
+
const expression = param.expression || '';
|
|
67
|
+
const url = param.url || '';
|
|
68
|
+
console.log(`Code: ${code}`);
|
|
69
|
+
console.log(`Type: ${type}`);
|
|
70
|
+
if (expression) {
|
|
71
|
+
if (expression.length > 60) {
|
|
72
|
+
console.log(`Expression: ${wrapText(expression, 60, ' ')}`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.log(`Expression: ${expression}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
console.log(`Expression: (none)`);
|
|
80
|
+
}
|
|
81
|
+
console.log(`URL: ${url}`);
|
|
82
|
+
console.log('---');
|
|
83
|
+
}
|
|
84
|
+
console.log(`Total: ${searchParams.length} search parameters`);
|
|
85
|
+
}
|
|
86
|
+
function wrapText(text, width, indent) {
|
|
87
|
+
const words = text.split(' ');
|
|
88
|
+
const lines = [];
|
|
89
|
+
let currentLine = '';
|
|
90
|
+
for (const word of words) {
|
|
91
|
+
if (currentLine.length + word.length + 1 <= width) {
|
|
92
|
+
currentLine += (currentLine ? ' ' : '') + word;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
if (currentLine) {
|
|
96
|
+
lines.push(currentLine);
|
|
97
|
+
}
|
|
98
|
+
currentLine = word;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (currentLine) {
|
|
102
|
+
lines.push(currentLine);
|
|
103
|
+
}
|
|
104
|
+
return lines.join('\n' + indent);
|
|
105
|
+
}
|
|
106
|
+
function outputJson(searchParams) {
|
|
107
|
+
const output = searchParams.map(param => ({
|
|
108
|
+
code: param.code,
|
|
109
|
+
type: param.type,
|
|
110
|
+
expression: param.expression || null,
|
|
111
|
+
url: param.url,
|
|
112
|
+
}));
|
|
113
|
+
console.log(JSON.stringify(output, null, 2));
|
|
114
|
+
}
|
|
115
|
+
function outputCsv(searchParams) {
|
|
116
|
+
console.log('Code,Type,Expression,URL');
|
|
117
|
+
for (const param of searchParams) {
|
|
118
|
+
const code = escapeCsv(param.code || '');
|
|
119
|
+
const type = escapeCsv(param.type || '');
|
|
120
|
+
const expression = escapeCsv(param.expression || '');
|
|
121
|
+
const url = escapeCsv(param.url || '');
|
|
122
|
+
console.log(`${code},${type},${expression},${url}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function escapeCsv(value) {
|
|
126
|
+
if (value.includes(',') || value.includes('"') || value.includes('\n')) {
|
|
127
|
+
return '"' + value.replace(/"/g, '""') + '"';
|
|
128
|
+
}
|
|
129
|
+
return value;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=searchparam.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchparam.js","sourceRoot":"","sources":["../../src/cli/searchparam.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB,gCAAgC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fs/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/fs/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fs/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fs/utils.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,OAAO,CAOlE,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAM7D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,OAAO,CAGpE,CAAC"}
|
package/dist/fs/utils.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
export const fileExists = async (filePath) => {
|
|
4
|
+
try {
|
|
5
|
+
await fs.access(filePath);
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export const ensureDir = async (dirPath) => {
|
|
13
|
+
try {
|
|
14
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export const isFhirPackage = async (dirPath) => {
|
|
20
|
+
const indexPath = path.join(dirPath, ".index.json");
|
|
21
|
+
return fileExists(indexPath);
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/fs/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,QAAgB,EAAoB,EAAE;IACrE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,OAAe,EAAiB,EAAE;IAChE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,OAAe,EAAoB,EAAE;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,112 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
declare function detectPackageManager(): Promise<"bun" | "npm" | null>;
|
|
8
|
-
export { ShellError, detectPackageManager };
|
|
9
|
-
export interface Reference {
|
|
10
|
-
id: string;
|
|
11
|
-
resourceType: string;
|
|
12
|
-
}
|
|
13
|
-
export interface PackageId {
|
|
14
|
-
name: string;
|
|
15
|
-
version: string;
|
|
16
|
-
}
|
|
17
|
-
export interface IndexEntry extends Reference {
|
|
18
|
-
indexVersion: number;
|
|
19
|
-
kind?: string;
|
|
20
|
-
url?: string;
|
|
21
|
-
type?: string;
|
|
22
|
-
version?: string;
|
|
23
|
-
package?: PackageId;
|
|
24
|
-
}
|
|
25
|
-
export interface Resource extends Reference {
|
|
26
|
-
url?: string;
|
|
27
|
-
version?: string;
|
|
28
|
-
[key: string]: any;
|
|
29
|
-
}
|
|
30
|
-
export interface SourceContext {
|
|
31
|
-
id?: string;
|
|
32
|
-
package?: PackageId;
|
|
33
|
-
url?: string;
|
|
34
|
-
path?: string;
|
|
35
|
-
}
|
|
36
|
-
export interface Config {
|
|
37
|
-
packages: string[];
|
|
38
|
-
workingDir: string;
|
|
39
|
-
registry?: string;
|
|
40
|
-
}
|
|
41
|
-
export interface CanonicalManager {
|
|
42
|
-
init(): Promise<void>;
|
|
43
|
-
destroy(): Promise<void>;
|
|
44
|
-
packages(): Promise<PackageId[]>;
|
|
45
|
-
resolveEntry(canonicalUrl: string, options?: {
|
|
46
|
-
package?: string;
|
|
47
|
-
version?: string;
|
|
48
|
-
sourceContext?: SourceContext;
|
|
49
|
-
}): Promise<IndexEntry>;
|
|
50
|
-
resolve(canonicalUrl: string, options?: {
|
|
51
|
-
package?: string;
|
|
52
|
-
version?: string;
|
|
53
|
-
sourceContext?: SourceContext;
|
|
54
|
-
}): Promise<Resource>;
|
|
55
|
-
read(reference: Reference): Promise<Resource>;
|
|
56
|
-
searchEntries(params: {
|
|
57
|
-
kind?: string;
|
|
58
|
-
url?: string;
|
|
59
|
-
type?: string;
|
|
60
|
-
version?: string;
|
|
61
|
-
package?: PackageId;
|
|
62
|
-
}): Promise<IndexEntry[]>;
|
|
63
|
-
search(params: {
|
|
64
|
-
kind?: string;
|
|
65
|
-
url?: string;
|
|
66
|
-
type?: string;
|
|
67
|
-
version?: string;
|
|
68
|
-
package?: PackageId;
|
|
69
|
-
}): Promise<Resource[]>;
|
|
70
|
-
smartSearch(searchTerms: string[], filters?: {
|
|
71
|
-
resourceType?: string;
|
|
72
|
-
type?: string;
|
|
73
|
-
kind?: string;
|
|
74
|
-
package?: PackageId;
|
|
75
|
-
}): Promise<IndexEntry[]>;
|
|
76
|
-
}
|
|
77
|
-
export interface PackageInfo {
|
|
78
|
-
id: PackageId;
|
|
79
|
-
path: string;
|
|
80
|
-
canonical?: string;
|
|
81
|
-
fhirVersions?: string[];
|
|
82
|
-
}
|
|
83
|
-
interface ReferenceMetadata {
|
|
84
|
-
packageName: string;
|
|
85
|
-
packageVersion: string;
|
|
86
|
-
filePath: string;
|
|
87
|
-
resourceType: string;
|
|
88
|
-
url?: string;
|
|
89
|
-
version?: string;
|
|
90
|
-
}
|
|
91
|
-
export interface ReferenceStore {
|
|
92
|
-
get(id: string): ReferenceMetadata | undefined;
|
|
93
|
-
set(id: string, metadata: ReferenceMetadata): void;
|
|
94
|
-
has(id: string): boolean;
|
|
95
|
-
clear(): void;
|
|
96
|
-
size(): number;
|
|
97
|
-
}
|
|
98
|
-
export type { ReferenceMetadata };
|
|
99
|
-
declare const generateReferenceId: (metadata: {
|
|
100
|
-
packageName: string;
|
|
101
|
-
packageVersion: string;
|
|
102
|
-
filePath: string;
|
|
103
|
-
}) => string;
|
|
104
|
-
export declare const ReferenceManager: () => ReferenceStore & {
|
|
105
|
-
generateId: typeof generateReferenceId;
|
|
106
|
-
getIdsByUrl: (url: string) => string[];
|
|
107
|
-
createReference: (id: string, metadata: ReferenceMetadata) => Reference;
|
|
108
|
-
getAllReferences: () => Record<string, ReferenceMetadata>;
|
|
109
|
-
};
|
|
110
|
-
export declare const CanonicalManager: (config: Config) => CanonicalManager;
|
|
111
|
-
export default CanonicalManager;
|
|
1
|
+
export * from './types';
|
|
2
|
+
export { createReferenceManager, ReferenceManagerFactory as ReferenceManager } from './reference';
|
|
3
|
+
export type { ReferenceManager as ReferenceManagerType } from './reference';
|
|
4
|
+
export { CanonicalManager, createCanonicalManager } from './manager';
|
|
5
|
+
import { createCanonicalManager } from './manager';
|
|
6
|
+
export default createCanonicalManager;
|
|
112
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAClG,YAAY,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG5E,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAMrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,eAAe,sBAAsB,CAAC"}
|