@atomic-ehr/fhir-canonical-manager 0.0.13 → 0.0.15

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.
Files changed (170) hide show
  1. package/dist/cache.d.ts +17 -0
  2. package/dist/cache.d.ts.map +1 -0
  3. package/dist/cache.js +50 -0
  4. package/dist/cache.js.map +1 -0
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +15 -15
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/cli/init.d.ts.map +1 -1
  9. package/dist/cli/init.js +7 -10
  10. package/dist/cli/init.js.map +1 -1
  11. package/dist/cli/list.d.ts.map +1 -1
  12. package/dist/cli/list.js +14 -10
  13. package/dist/cli/list.js.map +1 -1
  14. package/dist/cli/resolve.js +7 -7
  15. package/dist/cli/resolve.js.map +1 -1
  16. package/dist/cli/search.js +9 -9
  17. package/dist/cli/search.js.map +1 -1
  18. package/dist/cli/searchparam.d.ts.map +1 -1
  19. package/dist/cli/searchparam.js +27 -24
  20. package/dist/cli/searchparam.js.map +1 -1
  21. package/dist/fs/index.d.ts +1 -1
  22. package/dist/fs/index.d.ts.map +1 -1
  23. package/dist/fs/index.js +1 -1
  24. package/dist/fs/index.js.map +1 -1
  25. package/dist/fs/utils.js +2 -2
  26. package/dist/fs/utils.js.map +1 -1
  27. package/dist/index.d.ts +6 -6
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +4 -4
  30. package/dist/index.js.map +1 -1
  31. package/dist/manager/canonical.d.ts +1 -1
  32. package/dist/manager/canonical.d.ts.map +1 -1
  33. package/dist/manager/canonical.js +77 -45
  34. package/dist/manager/canonical.js.map +1 -1
  35. package/dist/manager/index.d.ts +1 -2
  36. package/dist/manager/index.d.ts.map +1 -1
  37. package/dist/manager/index.js +1 -2
  38. package/dist/manager/index.js.map +1 -1
  39. package/dist/package.d.ts +4 -0
  40. package/dist/package.d.ts.map +1 -0
  41. package/dist/package.js +69 -0
  42. package/dist/package.js.map +1 -0
  43. package/dist/{reference/manager.d.ts → reference.d.ts} +8 -3
  44. package/dist/reference.d.ts.map +1 -0
  45. package/dist/{reference/manager.js → reference.js} +13 -4
  46. package/dist/reference.js.map +1 -0
  47. package/dist/resolver.d.ts +4 -0
  48. package/dist/resolver.d.ts.map +1 -0
  49. package/dist/{resolver/context.js → resolver.js} +2 -2
  50. package/dist/resolver.js.map +1 -0
  51. package/dist/scanner/directory.d.ts +2 -2
  52. package/dist/scanner/directory.d.ts.map +1 -1
  53. package/dist/scanner/directory.js +24 -27
  54. package/dist/scanner/directory.js.map +1 -1
  55. package/dist/scanner/index.d.ts +4 -4
  56. package/dist/scanner/index.d.ts.map +1 -1
  57. package/dist/scanner/index.js +4 -4
  58. package/dist/scanner/index.js.map +1 -1
  59. package/dist/scanner/package.d.ts +1 -1
  60. package/dist/scanner/package.d.ts.map +1 -1
  61. package/dist/scanner/package.js +4 -4
  62. package/dist/scanner/package.js.map +1 -1
  63. package/dist/scanner/parser.d.ts +2 -2
  64. package/dist/scanner/parser.d.ts.map +1 -1
  65. package/dist/scanner/parser.js +1 -1
  66. package/dist/scanner/parser.js.map +1 -1
  67. package/dist/scanner/processor.d.ts +2 -2
  68. package/dist/scanner/processor.d.ts.map +1 -1
  69. package/dist/scanner/processor.js +3 -3
  70. package/dist/scanner/processor.js.map +1 -1
  71. package/dist/search/index.d.ts +2 -2
  72. package/dist/search/index.d.ts.map +1 -1
  73. package/dist/search/index.js +2 -2
  74. package/dist/search/index.js.map +1 -1
  75. package/dist/search/smart.d.ts +1 -1
  76. package/dist/search/smart.d.ts.map +1 -1
  77. package/dist/search/smart.js +3 -7
  78. package/dist/search/smart.js.map +1 -1
  79. package/dist/search/terms.js.map +1 -1
  80. package/dist/types/core.d.ts +5 -4
  81. package/dist/types/core.d.ts.map +1 -1
  82. package/dist/types/index.d.ts +2 -2
  83. package/dist/types/index.js +2 -2
  84. package/dist/types/internal.d.ts +7 -4
  85. package/dist/types/internal.d.ts.map +1 -1
  86. package/package.json +12 -2
  87. package/src/cache.ts +59 -0
  88. package/src/cli/index.ts +112 -114
  89. package/src/cli/init.ts +104 -108
  90. package/src/cli/list.ts +84 -77
  91. package/src/cli/resolve.ts +57 -57
  92. package/src/cli/search.ts +72 -72
  93. package/src/cli/searchparam.ts +118 -117
  94. package/src/constants.ts +1 -1
  95. package/src/fs/index.ts +1 -1
  96. package/src/fs/utils.ts +16 -16
  97. package/src/index.ts +9 -12
  98. package/src/manager/canonical.ts +349 -360
  99. package/src/manager/index.ts +1 -3
  100. package/src/package.ts +79 -0
  101. package/src/reference.ts +77 -0
  102. package/src/resolver.ts +38 -0
  103. package/src/scanner/directory.ts +25 -31
  104. package/src/scanner/index.ts +4 -4
  105. package/src/scanner/package.ts +26 -29
  106. package/src/scanner/parser.ts +25 -27
  107. package/src/scanner/processor.ts +51 -55
  108. package/src/search/index.ts +2 -2
  109. package/src/search/smart.ts +41 -48
  110. package/src/search/terms.ts +17 -17
  111. package/src/types/core.ts +102 -89
  112. package/src/types/index.ts +2 -2
  113. package/src/types/internal.ts +36 -34
  114. package/dist/cache/core.d.ts +0 -7
  115. package/dist/cache/core.d.ts.map +0 -1
  116. package/dist/cache/core.js +0 -11
  117. package/dist/cache/core.js.map +0 -1
  118. package/dist/cache/index.d.ts +0 -4
  119. package/dist/cache/index.d.ts.map +0 -1
  120. package/dist/cache/index.js +0 -4
  121. package/dist/cache/index.js.map +0 -1
  122. package/dist/cache/persistence.d.ts +0 -5
  123. package/dist/cache/persistence.d.ts.map +0 -1
  124. package/dist/cache/persistence.js +0 -25
  125. package/dist/cache/persistence.js.map +0 -1
  126. package/dist/cache/validation.d.ts +0 -2
  127. package/dist/cache/validation.d.ts.map +0 -1
  128. package/dist/cache/validation.js +0 -21
  129. package/dist/cache/validation.js.map +0 -1
  130. package/dist/package/detector.d.ts +0 -2
  131. package/dist/package/detector.d.ts.map +0 -1
  132. package/dist/package/detector.js +0 -19
  133. package/dist/package/detector.js.map +0 -1
  134. package/dist/package/index.d.ts +0 -3
  135. package/dist/package/index.d.ts.map +0 -1
  136. package/dist/package/index.js +0 -3
  137. package/dist/package/index.js.map +0 -1
  138. package/dist/package/installer.d.ts +0 -2
  139. package/dist/package/installer.d.ts.map +0 -1
  140. package/dist/package/installer.js +0 -55
  141. package/dist/package/installer.js.map +0 -1
  142. package/dist/reference/index.d.ts +0 -5
  143. package/dist/reference/index.d.ts.map +0 -1
  144. package/dist/reference/index.js +0 -4
  145. package/dist/reference/index.js.map +0 -1
  146. package/dist/reference/manager.d.ts.map +0 -1
  147. package/dist/reference/manager.js.map +0 -1
  148. package/dist/reference/store.d.ts +0 -6
  149. package/dist/reference/store.d.ts.map +0 -1
  150. package/dist/reference/store.js +0 -6
  151. package/dist/reference/store.js.map +0 -1
  152. package/dist/resolver/context.d.ts +0 -4
  153. package/dist/resolver/context.d.ts.map +0 -1
  154. package/dist/resolver/context.js.map +0 -1
  155. package/dist/resolver/index.d.ts +0 -2
  156. package/dist/resolver/index.d.ts.map +0 -1
  157. package/dist/resolver/index.js +0 -2
  158. package/dist/resolver/index.js.map +0 -1
  159. package/src/cache/core.ts +0 -20
  160. package/src/cache/index.ts +0 -7
  161. package/src/cache/persistence.ts +0 -39
  162. package/src/cache/validation.ts +0 -27
  163. package/src/package/detector.ts +0 -24
  164. package/src/package/index.ts +0 -6
  165. package/src/package/installer.ts +0 -77
  166. package/src/reference/index.ts +0 -10
  167. package/src/reference/manager.ts +0 -51
  168. package/src/reference/store.ts +0 -15
  169. package/src/resolver/context.ts +0 -25
  170. package/src/resolver/index.ts +0 -5
package/src/cli/list.ts CHANGED
@@ -1,88 +1,95 @@
1
- import { parseArgs, loadPackageJson, getConfigFromPackageJson } from './index.js';
2
- import { CanonicalManager } from '../index.js';
1
+ import { CanonicalManager } from "../index.js";
2
+ import { getConfigFromPackageJson, loadPackageJson, parseArgs } from "./index.js";
3
3
 
4
4
  export async function listCommand(args: string[]): Promise<void> {
5
- const { positional, options } = parseArgs(args);
6
- const packageName = positional[0];
7
- const isJson = options.json === true;
8
- const typeFilter = options.type as string | undefined;
5
+ const { positional, options } = parseArgs(args);
6
+ const packageName = positional[0];
7
+ const isJson = options.json === true;
8
+ const typeFilter = options.type as string | undefined;
9
9
 
10
- // Load config from package.json
11
- const packageJson = await loadPackageJson();
12
- if (!packageJson?.fcm?.packages || packageJson.fcm.packages.length === 0) {
13
- console.error("Error: No FHIR packages configured");
14
- console.error("Run 'fcm init' first to initialize packages");
15
- if (process.env.NODE_ENV === 'test') {
16
- throw new Error("No FHIR packages configured");
17
- }
18
- process.exit(1);
19
- }
20
-
21
- const config = getConfigFromPackageJson(packageJson);
22
- const manager = CanonicalManager(config as any);
23
- await manager.init();
24
-
25
- try {
26
- if (!packageName) {
27
- // List all packages
28
- const packages = await manager.packages();
29
-
30
- if (isJson) {
31
- console.log(JSON.stringify(packages, null, 2));
32
- } else {
33
- console.log("Packages:");
34
- packages.forEach(pkg => {
35
- console.log(` ${pkg.name}@${pkg.version}`);
36
- });
37
- }
38
- } else {
39
- // List resources in a specific package
40
- const packages = await manager.packages();
41
- const pkg = packages.find(p => p.name === packageName);
42
-
43
- if (!pkg) {
44
- console.error(`Error: Package '${packageName}' not found`);
45
- console.error("Available packages:");
46
- packages.forEach(p => console.error(` - ${p.name}`));
47
- if (process.env.NODE_ENV === 'test') {
48
- throw new Error(`Package '${packageName}' not found`);
10
+ // Load config from package.json
11
+ const packageJson = await loadPackageJson();
12
+ if (!packageJson?.fcm?.packages || packageJson.fcm.packages.length === 0) {
13
+ console.error("Error: No FHIR packages configured");
14
+ console.error("Run 'fcm init' first to initialize packages");
15
+ if (process.env.NODE_ENV === "test") {
16
+ throw new Error("No FHIR packages configured");
49
17
  }
50
18
  process.exit(1);
51
- }
19
+ }
20
+
21
+ const config = getConfigFromPackageJson(packageJson);
22
+ const manager = CanonicalManager(config as any);
23
+ await manager.init();
52
24
 
53
- let resources = await manager.searchEntries({ package: pkg });
54
-
55
- // Apply type filter if specified
56
- if (typeFilter) {
57
- resources = resources.filter(r => r.resourceType === typeFilter);
58
- }
25
+ try {
26
+ if (!packageName) {
27
+ // List all packages
28
+ const packages = await manager.packages();
59
29
 
60
- if (isJson) {
61
- console.log(JSON.stringify(resources, null, 2));
62
- } else {
63
- console.log(`Resources in ${packageName}:`);
64
-
65
- if (resources.length === 0) {
66
- console.log(" No resources found");
30
+ if (isJson) {
31
+ console.log(JSON.stringify(packages, null, 2));
32
+ } else {
33
+ console.log("Packages:");
34
+ packages.forEach((pkg) => {
35
+ console.log(` ${pkg.name}@${pkg.version}`);
36
+ });
37
+ }
67
38
  } else {
68
- // Group by type
69
- const byType = resources.reduce((acc, resource) => {
70
- const type = resource.resourceType || resource.type || 'Unknown';
71
- if (!acc[type]) acc[type] = 0;
72
- acc[type]++;
73
- return acc;
74
- }, {} as Record<string, number>);
39
+ // List resources in a specific package
40
+ const packages = await manager.packages();
41
+ const pkg = packages.find((p) => p.name === packageName);
42
+
43
+ if (!pkg) {
44
+ console.error(`Error: Package '${packageName}' not found`);
45
+ console.error("Available packages:");
46
+ packages.forEach((p) => {
47
+ console.error(` - ${p.name}`);
48
+ });
49
+ if (process.env.NODE_ENV === "test") {
50
+ throw new Error(`Package '${packageName}' not found`);
51
+ }
52
+ process.exit(1);
53
+ }
54
+
55
+ let resources = await manager.searchEntries({ package: pkg });
56
+
57
+ // Apply type filter if specified
58
+ if (typeFilter) {
59
+ resources = resources.filter((r) => r.resourceType === typeFilter);
60
+ }
61
+
62
+ if (isJson) {
63
+ console.log(JSON.stringify(resources, null, 2));
64
+ } else {
65
+ console.log(`Resources in ${packageName}:`);
66
+
67
+ if (resources.length === 0) {
68
+ console.log(" No resources found");
69
+ } else {
70
+ // Group by type
71
+ const byType = resources.reduce(
72
+ (acc, resource) => {
73
+ const type = resource.resourceType || resource.type || "Unknown";
74
+ if (!acc[type]) acc[type] = 0;
75
+ acc[type]++;
76
+ return acc;
77
+ },
78
+ {} as Record<string, number>,
79
+ );
80
+
81
+ // Show summary
82
+ Object.entries(byType)
83
+ .sort()
84
+ .forEach(([type, count]) => {
85
+ console.log(` ${type}: ${count}`);
86
+ });
75
87
 
76
- // Show summary
77
- Object.entries(byType).sort().forEach(([type, count]) => {
78
- console.log(` ${type}: ${count}`);
79
- });
80
-
81
- console.log(`\nTotal: ${resources.length} resources`);
88
+ console.log(`\nTotal: ${resources.length} resources`);
89
+ }
90
+ }
82
91
  }
83
- }
92
+ } finally {
93
+ await manager.destroy();
84
94
  }
85
- } finally {
86
- await manager.destroy();
87
- }
88
- }
95
+ }
@@ -1,63 +1,63 @@
1
- import { parseArgs, loadPackageJson, getConfigFromPackageJson } from './index.js';
2
- import { CanonicalManager } from '../index.js';
1
+ import { CanonicalManager } from "../index.js";
2
+ import { getConfigFromPackageJson, loadPackageJson, parseArgs } from "./index.js";
3
3
 
4
4
  export async function resolveCommand(args: string[]): Promise<void> {
5
- const { positional, options } = parseArgs(args);
6
- const url = positional[0];
7
- const fields = options.fields as string | undefined;
8
-
9
- if (!url) {
10
- console.error("Error: Canonical URL required");
11
- console.error("Usage: fcm resolve <canonical-url> [--fields field1,field2]");
12
- console.error("Example: fcm resolve http://hl7.org/fhir/StructureDefinition/Patient");
13
- if (process.env.NODE_ENV === 'test') {
14
- throw new Error("Canonical URL required");
15
- }
16
- process.exit(1);
17
- }
18
-
19
- // Load config from package.json
20
- const packageJson = await loadPackageJson();
21
- if (!packageJson?.fcm?.packages || packageJson.fcm.packages.length === 0) {
22
- console.error("Error: No FHIR packages configured");
23
- console.error("Run 'fcm init' first to initialize packages");
24
- if (process.env.NODE_ENV === 'test') {
25
- throw new Error("No FHIR packages configured");
5
+ const { positional, options } = parseArgs(args);
6
+ const url = positional[0];
7
+ const fields = options.fields as string | undefined;
8
+
9
+ if (!url) {
10
+ console.error("Error: Canonical URL required");
11
+ console.error("Usage: fcm resolve <canonical-url> [--fields field1,field2]");
12
+ console.error("Example: fcm resolve http://hl7.org/fhir/StructureDefinition/Patient");
13
+ if (process.env.NODE_ENV === "test") {
14
+ throw new Error("Canonical URL required");
15
+ }
16
+ process.exit(1);
26
17
  }
27
- process.exit(1);
28
- }
29
-
30
- const config = getConfigFromPackageJson(packageJson);
31
- const manager = CanonicalManager(config as any);
32
- await manager.init();
33
-
34
- try {
35
- // Resolve the resource
36
- const resource = await manager.resolve(url);
37
-
38
- if (fields) {
39
- // Extract only specified fields
40
- const fieldList = fields.split(',').map(f => f.trim());
41
- const filtered: any = {};
42
-
43
- fieldList.forEach(field => {
44
- if (field in resource) {
45
- filtered[field] = resource[field];
18
+
19
+ // Load config from package.json
20
+ const packageJson = await loadPackageJson();
21
+ if (!packageJson?.fcm?.packages || packageJson.fcm.packages.length === 0) {
22
+ console.error("Error: No FHIR packages configured");
23
+ console.error("Run 'fcm init' first to initialize packages");
24
+ if (process.env.NODE_ENV === "test") {
25
+ throw new Error("No FHIR packages configured");
46
26
  }
47
- });
48
-
49
- console.log(JSON.stringify(filtered, null, 2));
50
- } else {
51
- // Output full resource
52
- console.log(JSON.stringify(resource, null, 2));
27
+ process.exit(1);
53
28
  }
54
- } catch (error) {
55
- console.error(`Error: Resource not found: ${url}`);
56
- if (process.env.NODE_ENV === 'test') {
57
- throw error;
29
+
30
+ const config = getConfigFromPackageJson(packageJson);
31
+ const manager = CanonicalManager(config as any);
32
+ await manager.init();
33
+
34
+ try {
35
+ // Resolve the resource
36
+ const resource = await manager.resolve(url);
37
+
38
+ if (fields) {
39
+ // Extract only specified fields
40
+ const fieldList = fields.split(",").map((f) => f.trim());
41
+ const filtered: any = {};
42
+
43
+ fieldList.forEach((field) => {
44
+ if (field in resource) {
45
+ filtered[field] = resource[field];
46
+ }
47
+ });
48
+
49
+ console.log(JSON.stringify(filtered, null, 2));
50
+ } else {
51
+ // Output full resource
52
+ console.log(JSON.stringify(resource, null, 2));
53
+ }
54
+ } catch (error) {
55
+ console.error(`Error: Resource not found: ${url}`);
56
+ if (process.env.NODE_ENV === "test") {
57
+ throw error;
58
+ }
59
+ process.exit(1);
60
+ } finally {
61
+ await manager.destroy();
58
62
  }
59
- process.exit(1);
60
- } finally {
61
- await manager.destroy();
62
- }
63
- }
63
+ }
package/src/cli/search.ts CHANGED
@@ -1,83 +1,83 @@
1
- import { parseArgs, loadPackageJson, getConfigFromPackageJson } from './index.js';
2
- import { CanonicalManager } from '../index.js';
1
+ import { CanonicalManager } from "../index.js";
2
+ import { getConfigFromPackageJson, loadPackageJson, parseArgs } from "./index.js";
3
3
 
4
4
  export async function searchCommand(args: string[]): Promise<void> {
5
- const { positional, options } = parseArgs(args);
6
- const searchTerms = positional; // Now support multiple search terms
7
- const isJson = options.json === true;
8
- const resourceTypeFilter = (options.type || options.resourceType) as string | undefined;
9
- const typeFilter = options.t as string | undefined;
10
- const kindFilter = options.k as string | undefined;
11
- const packageFilter = options.package as string | undefined;
5
+ const { positional, options } = parseArgs(args);
6
+ const searchTerms = positional; // Now support multiple search terms
7
+ const isJson = options.json === true;
8
+ const resourceTypeFilter = (options.type || options.resourceType) as string | undefined;
9
+ const typeFilter = options.t as string | undefined;
10
+ const kindFilter = options.k as string | undefined;
11
+ const packageFilter = options.package as string | undefined;
12
12
 
13
- // Load config from package.json
14
- const packageJson = await loadPackageJson();
15
- if (!packageJson?.fcm?.packages || packageJson.fcm.packages.length === 0) {
16
- console.error("Error: No FHIR packages configured");
17
- console.error("Run 'fcm init' first to initialize packages");
18
- if (process.env.NODE_ENV === 'test' || process.env.BUN_TEST) {
19
- throw new Error("No FHIR packages configured");
13
+ // Load config from package.json
14
+ const packageJson = await loadPackageJson();
15
+ if (!packageJson?.fcm?.packages || packageJson.fcm.packages.length === 0) {
16
+ console.error("Error: No FHIR packages configured");
17
+ console.error("Run 'fcm init' first to initialize packages");
18
+ if (process.env.NODE_ENV === "test" || process.env.BUN_TEST) {
19
+ throw new Error("No FHIR packages configured");
20
+ }
21
+ process.exit(1);
20
22
  }
21
- process.exit(1);
22
- }
23
23
 
24
- const config = getConfigFromPackageJson(packageJson);
25
- const manager = CanonicalManager(config as any);
26
- await manager.init();
24
+ const config = getConfigFromPackageJson(packageJson);
25
+ const manager = CanonicalManager(config as any);
26
+ await manager.init();
27
27
 
28
- try {
29
- // Build filters for smart search
30
- const filters: any = {};
31
-
32
- if (resourceTypeFilter) {
33
- filters.resourceType = resourceTypeFilter;
34
- }
35
-
36
- if (typeFilter) {
37
- filters.type = typeFilter;
38
- }
39
-
40
- if (kindFilter) {
41
- filters.kind = kindFilter;
42
- }
28
+ try {
29
+ // Build filters for smart search
30
+ const filters: any = {};
43
31
 
44
- if (packageFilter) {
45
- const packages = await manager.packages();
46
- const pkg = packages.find(p => p.name === packageFilter);
47
- if (!pkg) {
48
- console.error(`Error: Package '${packageFilter}' not found`);
49
- if (process.env.NODE_ENV === 'test' || process.env.BUN_TEST) {
50
- throw new Error(`Package '${packageFilter}' not found`);
32
+ if (resourceTypeFilter) {
33
+ filters.resourceType = resourceTypeFilter;
51
34
  }
52
- process.exit(1);
53
- }
54
- filters.package = pkg;
55
- }
56
35
 
57
- // Use the new smartSearch from core
58
- const results = await manager.smartSearch(searchTerms, filters);
36
+ if (typeFilter) {
37
+ filters.type = typeFilter;
38
+ }
59
39
 
60
- if (isJson) {
61
- console.log(JSON.stringify(results, null, 2));
62
- } else {
63
- if (results.length === 0) {
64
- console.log("No resources found");
65
- } else {
66
- const searchInfo = searchTerms.length > 0 ? ` matching "${searchTerms.join(' ')}"` : '';
67
- console.log(`Found ${results.length} resource${results.length === 1 ? '' : 's'}${searchInfo}:`);
68
-
69
- results.forEach(resource => {
70
- const info = {
71
- resourceType: resource.resourceType,
72
- kind: resource.kind,
73
- type: resource.type,
74
- package: resource.package?.name
75
- };
76
- console.log(`${resource.url}, ${JSON.stringify(info)}`);
77
- });
78
- }
40
+ if (kindFilter) {
41
+ filters.kind = kindFilter;
42
+ }
43
+
44
+ if (packageFilter) {
45
+ const packages = await manager.packages();
46
+ const pkg = packages.find((p) => p.name === packageFilter);
47
+ if (!pkg) {
48
+ console.error(`Error: Package '${packageFilter}' not found`);
49
+ if (process.env.NODE_ENV === "test" || process.env.BUN_TEST) {
50
+ throw new Error(`Package '${packageFilter}' not found`);
51
+ }
52
+ process.exit(1);
53
+ }
54
+ filters.package = pkg;
55
+ }
56
+
57
+ // Use the new smartSearch from core
58
+ const results = await manager.smartSearch(searchTerms, filters);
59
+
60
+ if (isJson) {
61
+ console.log(JSON.stringify(results, null, 2));
62
+ } else {
63
+ if (results.length === 0) {
64
+ console.log("No resources found");
65
+ } else {
66
+ const searchInfo = searchTerms.length > 0 ? ` matching "${searchTerms.join(" ")}"` : "";
67
+ console.log(`Found ${results.length} resource${results.length === 1 ? "" : "s"}${searchInfo}:`);
68
+
69
+ results.forEach((resource) => {
70
+ const info = {
71
+ resourceType: resource.resourceType,
72
+ kind: resource.kind,
73
+ type: resource.type,
74
+ package: resource.package?.name,
75
+ };
76
+ console.log(`${resource.url}, ${JSON.stringify(info)}`);
77
+ });
78
+ }
79
+ }
80
+ } finally {
81
+ await manager.destroy();
79
82
  }
80
- } finally {
81
- await manager.destroy();
82
- }
83
- }
83
+ }