@fnndsc/cumin 3.2.4

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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +78 -0
  3. package/dist/activities/chrisActivity.d.ts +19 -0
  4. package/dist/activities/chrisActivity.js +29 -0
  5. package/dist/activities/chrisActivity.js.map +1 -0
  6. package/dist/cache/index.d.ts +9 -0
  7. package/dist/cache/index.js +15 -0
  8. package/dist/cache/index.js.map +1 -0
  9. package/dist/cache/listCache.d.ts +182 -0
  10. package/dist/cache/listCache.js +266 -0
  11. package/dist/cache/listCache.js.map +1 -0
  12. package/dist/cache/procCache.d.ts +150 -0
  13. package/dist/cache/procCache.js +257 -0
  14. package/dist/cache/procCache.js.map +1 -0
  15. package/dist/cli.d.ts +7 -0
  16. package/dist/cli.js +43 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/compute/computeResources.d.ts +65 -0
  19. package/dist/compute/computeResources.js +113 -0
  20. package/dist/compute/computeResources.js.map +1 -0
  21. package/dist/config/config.d.ts +221 -0
  22. package/dist/config/config.js +350 -0
  23. package/dist/config/config.js.map +1 -0
  24. package/dist/connect/chrisConnection.d.ts +121 -0
  25. package/dist/connect/chrisConnection.js +303 -0
  26. package/dist/connect/chrisConnection.js.map +1 -0
  27. package/dist/context/chrisContext.d.ts +110 -0
  28. package/dist/context/chrisContext.js +324 -0
  29. package/dist/context/chrisContext.js.map +1 -0
  30. package/dist/error/errorStack.d.ts +115 -0
  31. package/dist/error/errorStack.js +175 -0
  32. package/dist/error/errorStack.js.map +1 -0
  33. package/dist/feeds/chrisFeed.d.ts +188 -0
  34. package/dist/feeds/chrisFeed.js +432 -0
  35. package/dist/feeds/chrisFeed.js.map +1 -0
  36. package/dist/filebrowser/chrisFileBrowser.d.ts +77 -0
  37. package/dist/filebrowser/chrisFileBrowser.js +134 -0
  38. package/dist/filebrowser/chrisFileBrowser.js.map +1 -0
  39. package/dist/filebrowser/chrisFiles.d.ts +67 -0
  40. package/dist/filebrowser/chrisFiles.js +130 -0
  41. package/dist/filebrowser/chrisFiles.js.map +1 -0
  42. package/dist/filebrowser/chrisPACS.d.ts +43 -0
  43. package/dist/filebrowser/chrisPACS.js +103 -0
  44. package/dist/filebrowser/chrisPACS.js.map +1 -0
  45. package/dist/filebrowser/chrisPipeline.d.ts +47 -0
  46. package/dist/filebrowser/chrisPipeline.js +118 -0
  47. package/dist/filebrowser/chrisPipeline.js.map +1 -0
  48. package/dist/groups/chrisGroups.d.ts +11 -0
  49. package/dist/groups/chrisGroups.js +18 -0
  50. package/dist/groups/chrisGroups.js.map +1 -0
  51. package/dist/index.d.ts +68 -0
  52. package/dist/index.js +86 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/io/browser_io.d.ts +97 -0
  55. package/dist/io/browser_io.js +149 -0
  56. package/dist/io/browser_io.js.map +1 -0
  57. package/dist/io/chrisIO.d.ts +110 -0
  58. package/dist/io/chrisIO.js +415 -0
  59. package/dist/io/chrisIO.js.map +1 -0
  60. package/dist/io/io.d.ts +21 -0
  61. package/dist/io/io.js +6 -0
  62. package/dist/io/io.js.map +1 -0
  63. package/dist/io/node_io.d.ts +30 -0
  64. package/dist/io/node_io.js +188 -0
  65. package/dist/io/node_io.js.map +1 -0
  66. package/dist/jobs/chrisJob.d.ts +43 -0
  67. package/dist/jobs/chrisJob.js +169 -0
  68. package/dist/jobs/chrisJob.js.map +1 -0
  69. package/dist/jobs/index.d.ts +7 -0
  70. package/dist/jobs/index.js +24 -0
  71. package/dist/jobs/index.js.map +1 -0
  72. package/dist/jobs/jobMonitor.d.ts +46 -0
  73. package/dist/jobs/jobMonitor.js +102 -0
  74. package/dist/jobs/jobMonitor.js.map +1 -0
  75. package/dist/pacs/chrisPACS.d.ts +200 -0
  76. package/dist/pacs/chrisPACS.js +562 -0
  77. package/dist/pacs/chrisPACS.js.map +1 -0
  78. package/dist/path/chrisPath.d.ts +78 -0
  79. package/dist/path/chrisPath.js +190 -0
  80. package/dist/path/chrisPath.js.map +1 -0
  81. package/dist/pipelines/chrisPipeline.d.ts +86 -0
  82. package/dist/pipelines/chrisPipeline.js +180 -0
  83. package/dist/pipelines/chrisPipeline.js.map +1 -0
  84. package/dist/pluginmetas/chrisPluginMetas.d.ts +11 -0
  85. package/dist/pluginmetas/chrisPluginMetas.js +18 -0
  86. package/dist/pluginmetas/chrisPluginMetas.js.map +1 -0
  87. package/dist/plugins/chrisPluginMetaPlugins.d.ts +12 -0
  88. package/dist/plugins/chrisPluginMetaPlugins.js +19 -0
  89. package/dist/plugins/chrisPluginMetaPlugins.js.map +1 -0
  90. package/dist/plugins/chrisPlugins.d.ts +127 -0
  91. package/dist/plugins/chrisPlugins.js +528 -0
  92. package/dist/plugins/chrisPlugins.js.map +1 -0
  93. package/dist/resources/chrisEmbeddedResourceGroup.d.ts +73 -0
  94. package/dist/resources/chrisEmbeddedResourceGroup.js +148 -0
  95. package/dist/resources/chrisEmbeddedResourceGroup.js.map +1 -0
  96. package/dist/resources/chrisObjContext.d.ts +16 -0
  97. package/dist/resources/chrisObjContext.js +109 -0
  98. package/dist/resources/chrisObjContext.js.map +1 -0
  99. package/dist/resources/chrisResourceGroup.d.ts +30 -0
  100. package/dist/resources/chrisResourceGroup.js +47 -0
  101. package/dist/resources/chrisResourceGroup.js.map +1 -0
  102. package/dist/resources/chrisResources.d.ts +163 -0
  103. package/dist/resources/chrisResources.js +415 -0
  104. package/dist/resources/chrisResources.js.map +1 -0
  105. package/dist/tags/chrisTags.d.ts +11 -0
  106. package/dist/tags/chrisTags.js +18 -0
  107. package/dist/tags/chrisTags.js.map +1 -0
  108. package/dist/users/chrisUsers.d.ts +34 -0
  109. package/dist/users/chrisUsers.js +57 -0
  110. package/dist/users/chrisUsers.js.map +1 -0
  111. package/dist/utils/keypair.d.ts +77 -0
  112. package/dist/utils/keypair.js +144 -0
  113. package/dist/utils/keypair.js.map +1 -0
  114. package/dist/utils/result.d.ts +77 -0
  115. package/dist/utils/result.js +58 -0
  116. package/dist/utils/result.js.map +1 -0
  117. package/dist/utils/searchable.d.ts +143 -0
  118. package/dist/utils/searchable.js +212 -0
  119. package/dist/utils/searchable.js.map +1 -0
  120. package/dist/workflows/chrisWorkflows.d.ts +11 -0
  121. package/dist/workflows/chrisWorkflows.js +18 -0
  122. package/dist/workflows/chrisWorkflows.js.map +1 -0
  123. package/package.json +55 -0
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * @file Key-Pair and CLI Option Parsing Utilities.
4
+ *
5
+ * This module provides parsing and transformation utilities for converting key-value strings,
6
+ * raw CLI parameters, and command options into standardized ChRIS query payloads and objects.
7
+ *
8
+ * @module
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.dictionary_fromCLI = dictionary_fromCLI;
12
+ exports.keyPairString_parse = keyPairString_parse;
13
+ exports.keyPairParams_apply = keyPairParams_apply;
14
+ exports.listParams_fromOptions = listParams_fromOptions;
15
+ exports.record_extract = record_extract;
16
+ /**
17
+ * Parse a CLI string into a dictionary of arguments.
18
+ *
19
+ * @param cliString - The CLI argument string.
20
+ * @returns A dictionary of parsed arguments.
21
+ */
22
+ function dictionary_fromCLI(cliString) {
23
+ const result = {};
24
+ // Split the string by spaces, but keep quoted sections together
25
+ const args = cliString.match(/('.*?'|".*?"|\S+)/g) || [];
26
+ let key = "";
27
+ for (let i = 0; i < args.length; i++) {
28
+ let arg = args[i].replace(/^['"]|['"]$/g, ""); // Remove surrounding quotes
29
+ if (arg.startsWith("-")) {
30
+ // This is a key
31
+ key = arg.replace(/^-+/, "");
32
+ result[key] = true; // Default to true, will be overwritten if there's a value
33
+ }
34
+ else if (key) {
35
+ // This is a value
36
+ const numValue = Number(arg);
37
+ result[key] = isNaN(numValue) ? arg : numValue;
38
+ key = "";
39
+ }
40
+ }
41
+ return result;
42
+ }
43
+ /**
44
+ * Parse a key-pair string (e.g., "key:value,key2:value2") into an object.
45
+ *
46
+ * @param searchString - The string containing key-value pairs.
47
+ * @returns A record of parsed key-value pairs.
48
+ */
49
+ function keyPairString_parse(searchString) {
50
+ const searchParams = {};
51
+ const pairs = searchString.split(",").map((pair) => pair.trim());
52
+ pairs.forEach((pair) => {
53
+ const [key, ...valueParts] = pair.split(":").map((s) => s.trim());
54
+ const value = valueParts.join(":").trim(); // Rejoin in case the value contains colons
55
+ if (key && value) {
56
+ searchParams[key] = value;
57
+ }
58
+ });
59
+ return searchParams;
60
+ }
61
+ /**
62
+ * Apply key-pair parameters from a search string to an existing params object.
63
+ *
64
+ * @param params - The base parameters object.
65
+ * @param searchString - Optional search string to parse and merge.
66
+ * @returns The merged parameters object.
67
+ */
68
+ function keyPairParams_apply(params, searchString) {
69
+ if (searchString) {
70
+ const searchParams = keyPairString_parse(searchString);
71
+ return { ...params, ...searchParams };
72
+ }
73
+ return params;
74
+ }
75
+ function options_reduce(options) {
76
+ if (options.returnFilter && typeof options.returnFilter === "string") {
77
+ try {
78
+ const fieldsToReturn = options.returnFilter
79
+ .split(",")
80
+ .map((field) => field.trim());
81
+ const filteredObj = {};
82
+ for (const field of fieldsToReturn) {
83
+ if (field in options && field !== "returnFilter") {
84
+ filteredObj[field] = options[field];
85
+ }
86
+ }
87
+ return filteredObj;
88
+ }
89
+ catch (error) {
90
+ console.error("Error parsing returnFilter field");
91
+ }
92
+ }
93
+ return options;
94
+ }
95
+ /**
96
+ * Convert options object to ChRIS list parameters.
97
+ * Handles pagination, offset, and key-pair filtering.
98
+ *
99
+ * @param options - The raw options object.
100
+ * @param keyPairField - The field name containing the key-pair string.
101
+ * @returns Formatted ListOptions.
102
+ */
103
+ function listParams_fromOptions(options, keyPairField = "search") {
104
+ const keyPairValue = options[keyPairField];
105
+ options.limit = options.page ? parseInt(options.page, 10) : 20;
106
+ options.offset = options.offset ? options.offset : 0;
107
+ if (typeof keyPairValue === "string") {
108
+ options = keyPairParams_apply(options, keyPairValue);
109
+ }
110
+ if (options.returnFilter && typeof options.returnFilter === "string") {
111
+ options = options_reduce(options);
112
+ }
113
+ return options;
114
+ }
115
+ /**
116
+ * Extract a specific field or fields from a list of records into a QueryHits object.
117
+ *
118
+ * @param arrayList - The list of records.
119
+ * @param record - The field name or an array of field names to extract from each record.
120
+ * @returns A QueryHits object containing the extracted values.
121
+ */
122
+ function record_extract(arrayList, record) {
123
+ if (typeof record === 'string') {
124
+ const queryHits = {
125
+ hits: arrayList.map((item) => item[record]),
126
+ };
127
+ return queryHits;
128
+ }
129
+ else {
130
+ const queryHits = {
131
+ hits: arrayList.map((item) => {
132
+ const extracted = {};
133
+ record.forEach(key => {
134
+ if (item[key] !== undefined) {
135
+ extracted[key] = item[key];
136
+ }
137
+ });
138
+ return extracted;
139
+ }),
140
+ };
141
+ return queryHits;
142
+ }
143
+ }
144
+ //# sourceMappingURL=keypair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.js","sourceRoot":"","sources":["../../src/utils/keypair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @file Result Type for Explicit Error Handling
3
+ *
4
+ * Provides a type-safe Result type that forces explicit error checking.
5
+ * Used in conjunction with errorStack for error accumulation and UI display.
6
+ *
7
+ * Pattern:
8
+ * - Functions return Result<T> instead of T | null
9
+ * - Errors are pushed to errorStack (for UI display)
10
+ * - Result type forces caller to check .ok before accessing .value
11
+ * - TypeScript prevents accessing .value when ok === false
12
+ *
13
+ * @module
14
+ */
15
+ /**
16
+ * Result type representing success or failure.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * async function getData(): Promise<Result<Data>> {
21
+ * if (error) {
22
+ * errorStack.stack_push("error", "Failed to get data");
23
+ * return Err();
24
+ * }
25
+ * return Ok(data);
26
+ * }
27
+ *
28
+ * const result = await getData();
29
+ * if (!result.ok) {
30
+ * // Can't access result.value here - TypeScript error
31
+ * console.log(errorStack.stack_search("data"));
32
+ * return;
33
+ * }
34
+ * // TypeScript knows result.ok === true, so .value exists
35
+ * useData(result.value);
36
+ * ```
37
+ */
38
+ export type Result<T> = {
39
+ ok: true;
40
+ value: T;
41
+ } | {
42
+ ok: false;
43
+ };
44
+ /**
45
+ * Creates a successful Result containing a value.
46
+ *
47
+ * @param value - The success value to wrap
48
+ * @returns A Result indicating success
49
+ */
50
+ export declare function Ok<T>(value: T): Result<T>;
51
+ /**
52
+ * Creates a failed Result.
53
+ *
54
+ * Note: Error details should be pushed to errorStack before calling this.
55
+ *
56
+ * @returns A Result indicating failure
57
+ */
58
+ export declare function Err<T>(): Result<T>;
59
+ /**
60
+ * Type guard to check if a Result is successful.
61
+ *
62
+ * @param result - The Result to check.
63
+ * @returns True if the Result contains a value.
64
+ */
65
+ export declare function result_isOk<T>(result: Result<T>): result is {
66
+ ok: true;
67
+ value: T;
68
+ };
69
+ /**
70
+ * Type guard to check if a Result is a failure.
71
+ *
72
+ * @param result - The Result to check.
73
+ * @returns True if the Result is a failure.
74
+ */
75
+ export declare function result_isErr<T>(result: Result<T>): result is {
76
+ ok: false;
77
+ };
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * @file Result Type for Explicit Error Handling
4
+ *
5
+ * Provides a type-safe Result type that forces explicit error checking.
6
+ * Used in conjunction with errorStack for error accumulation and UI display.
7
+ *
8
+ * Pattern:
9
+ * - Functions return Result<T> instead of T | null
10
+ * - Errors are pushed to errorStack (for UI display)
11
+ * - Result type forces caller to check .ok before accessing .value
12
+ * - TypeScript prevents accessing .value when ok === false
13
+ *
14
+ * @module
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Ok = Ok;
18
+ exports.Err = Err;
19
+ exports.result_isOk = result_isOk;
20
+ exports.result_isErr = result_isErr;
21
+ /**
22
+ * Creates a successful Result containing a value.
23
+ *
24
+ * @param value - The success value to wrap
25
+ * @returns A Result indicating success
26
+ */
27
+ function Ok(value) {
28
+ return { ok: true, value };
29
+ }
30
+ /**
31
+ * Creates a failed Result.
32
+ *
33
+ * Note: Error details should be pushed to errorStack before calling this.
34
+ *
35
+ * @returns A Result indicating failure
36
+ */
37
+ function Err() {
38
+ return { ok: false };
39
+ }
40
+ /**
41
+ * Type guard to check if a Result is successful.
42
+ *
43
+ * @param result - The Result to check.
44
+ * @returns True if the Result contains a value.
45
+ */
46
+ function result_isOk(result) {
47
+ return result.ok === true;
48
+ }
49
+ /**
50
+ * Type guard to check if a Result is a failure.
51
+ *
52
+ * @param result - The Result to check.
53
+ * @returns True if the Result is a failure.
54
+ */
55
+ function result_isErr(result) {
56
+ return result.ok === false;
57
+ }
58
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/utils/result.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;AAmCH,gBAEC;AASD,kBAEC;AAQD,kCAEC;AAQD,oCAEC;AAvCD;;;;;GAKG;AACH,SAAgB,EAAE,CAAI,KAAQ;IAC5B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,GAAG;IACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAI,MAAiB;IAC9C,OAAO,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAI,MAAiB;IAC/C,OAAO,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * @file Searchable String Management
3
+ *
4
+ * This module provides a unified interface for working with ChRIS "searchable" strings.
5
+ * A searchable is a flexible identifier format used to locate ChRIS resources (plugins, feeds, files).
6
+ *
7
+ * Searchable formats:
8
+ * - Simple: "pl-dircopy" → converted to "name: pl-dircopy"
9
+ * - Compound: "name: pl-dircopy, version: 1.3.2" → multiple key:value pairs
10
+ * - Batch: "id:77++id:33++name:pl-test" → multiple searchables for batch operations
11
+ *
12
+ * @module
13
+ */
14
+ /**
15
+ * Represents the type of searchable string.
16
+ */
17
+ export type SearchableType = 'simple' | 'compound' | 'batch';
18
+ /**
19
+ * Internal data structure for a searchable.
20
+ */
21
+ export interface SearchableData {
22
+ /** Original input string */
23
+ raw: string;
24
+ /** Parsed key-value pairs */
25
+ parsed: Record<string, string>;
26
+ /** Type of searchable */
27
+ type: SearchableType;
28
+ }
29
+ /**
30
+ * Represents a searchable string for ChRIS resource queries.
31
+ *
32
+ * A Searchable encapsulates the logic for parsing, validating, and converting
33
+ * search strings into formats usable by the ChRIS API.
34
+ *
35
+ * @example
36
+ * // Simple name search
37
+ * const s1 = Searchable.from("pl-dircopy");
38
+ * s1.toQueryParams(); // { name: "pl-dircopy" }
39
+ *
40
+ * @example
41
+ * // Compound search
42
+ * const s2 = Searchable.from("name: pl-dircopy, version: 1.3.2");
43
+ * s2.toQueryParams(); // { name: "pl-dircopy", version: "1.3.2" }
44
+ *
45
+ * @example
46
+ * // Batch operations
47
+ * const s3 = Searchable.from("id:77++id:33");
48
+ * s3.toBatchSearchables(); // [Searchable("id:77"), Searchable("id:33")]
49
+ */
50
+ export declare class Searchable {
51
+ private data;
52
+ private constructor();
53
+ /**
54
+ * Creates a Searchable from any input string.
55
+ * Automatically detects the type (simple, compound, or batch).
56
+ *
57
+ * @param input - The searchable string to parse.
58
+ * @returns A Searchable instance.
59
+ */
60
+ static from(input: string): Searchable;
61
+ /**
62
+ * Creates a simple searchable from a plain name.
63
+ * Converts "pl-dircopy" → "name: pl-dircopy"
64
+ *
65
+ * @param name - The resource name.
66
+ * @returns A Searchable instance.
67
+ */
68
+ static simple(name: string): Searchable;
69
+ /**
70
+ * Creates a compound searchable from key:value pairs.
71
+ * Parses "name: pl-dircopy, version: 1.3.2" → { name: "pl-dircopy", version: "1.3.2" }
72
+ *
73
+ * @param keyValueString - Comma-separated key:value pairs.
74
+ * @returns A Searchable instance.
75
+ */
76
+ static compound(keyValueString: string): Searchable;
77
+ /**
78
+ * Creates a batch searchable containing multiple searchables separated by ++.
79
+ * The parsed result is a placeholder; use toBatchSearchables() to get individual items.
80
+ *
81
+ * @param batchString - Multiple searchables separated by ++.
82
+ * @returns A Searchable instance.
83
+ */
84
+ static batch(batchString: string): Searchable;
85
+ /**
86
+ * Returns the original raw input string.
87
+ */
88
+ get raw(): string;
89
+ /**
90
+ * Returns the searchable type.
91
+ */
92
+ get type(): SearchableType;
93
+ /**
94
+ * Checks if this is a simple searchable (plain name).
95
+ */
96
+ isSimple(): boolean;
97
+ /**
98
+ * Checks if this is a compound searchable (multiple key:value pairs).
99
+ */
100
+ isCompound(): boolean;
101
+ /**
102
+ * Checks if this is a batch searchable (contains ++).
103
+ */
104
+ isBatch(): boolean;
105
+ /**
106
+ * Converts the searchable to query parameters suitable for the ChRIS API.
107
+ * For batch searchables, this returns a placeholder. Use toBatchSearchables() instead.
108
+ *
109
+ * @returns A record of key-value pairs.
110
+ */
111
+ toQueryParams(): Record<string, string>;
112
+ /**
113
+ * Splits a batch searchable into individual searchables.
114
+ * Only applicable for batch searchables (containing ++).
115
+ *
116
+ * @returns An array of Searchable instances, or a single-item array if not a batch.
117
+ */
118
+ toBatchSearchables(): Searchable[];
119
+ /**
120
+ * Converts the searchable to a normalized string format suitable for API queries.
121
+ * For simple searchables, this adds the "name:" prefix.
122
+ * For compound searchables, returns the original key:value format.
123
+ * For batch searchables, returns the original ++ separated format.
124
+ *
125
+ * @returns A normalized searchable string.
126
+ */
127
+ toNormalizedString(): string;
128
+ /**
129
+ * Validates the searchable format.
130
+ * Checks for empty strings and invalid formats.
131
+ *
132
+ * @returns True if valid, false otherwise.
133
+ */
134
+ validate(): boolean;
135
+ /**
136
+ * Returns a string representation of the searchable.
137
+ */
138
+ toString(): string;
139
+ /**
140
+ * Returns a JSON representation of the searchable.
141
+ */
142
+ toJSON(): SearchableData;
143
+ }
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ /**
3
+ * @file Searchable String Management
4
+ *
5
+ * This module provides a unified interface for working with ChRIS "searchable" strings.
6
+ * A searchable is a flexible identifier format used to locate ChRIS resources (plugins, feeds, files).
7
+ *
8
+ * Searchable formats:
9
+ * - Simple: "pl-dircopy" → converted to "name: pl-dircopy"
10
+ * - Compound: "name: pl-dircopy, version: 1.3.2" → multiple key:value pairs
11
+ * - Batch: "id:77++id:33++name:pl-test" → multiple searchables for batch operations
12
+ *
13
+ * @module
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.Searchable = void 0;
17
+ const keypair_js_1 = require("./keypair.js");
18
+ /**
19
+ * Represents a searchable string for ChRIS resource queries.
20
+ *
21
+ * A Searchable encapsulates the logic for parsing, validating, and converting
22
+ * search strings into formats usable by the ChRIS API.
23
+ *
24
+ * @example
25
+ * // Simple name search
26
+ * const s1 = Searchable.from("pl-dircopy");
27
+ * s1.toQueryParams(); // { name: "pl-dircopy" }
28
+ *
29
+ * @example
30
+ * // Compound search
31
+ * const s2 = Searchable.from("name: pl-dircopy, version: 1.3.2");
32
+ * s2.toQueryParams(); // { name: "pl-dircopy", version: "1.3.2" }
33
+ *
34
+ * @example
35
+ * // Batch operations
36
+ * const s3 = Searchable.from("id:77++id:33");
37
+ * s3.toBatchSearchables(); // [Searchable("id:77"), Searchable("id:33")]
38
+ */
39
+ class Searchable {
40
+ constructor(data) {
41
+ this.data = data;
42
+ }
43
+ /**
44
+ * Creates a Searchable from any input string.
45
+ * Automatically detects the type (simple, compound, or batch).
46
+ *
47
+ * @param input - The searchable string to parse.
48
+ * @returns A Searchable instance.
49
+ */
50
+ static from(input) {
51
+ const trimmed = input.trim();
52
+ // Batch: contains ++
53
+ if (trimmed.includes('++')) {
54
+ return Searchable.batch(trimmed);
55
+ }
56
+ // Compound: contains : (key:value format)
57
+ if (trimmed.includes(':')) {
58
+ return Searchable.compound(trimmed);
59
+ }
60
+ // Simple: plain name
61
+ return Searchable.simple(trimmed);
62
+ }
63
+ /**
64
+ * Creates a simple searchable from a plain name.
65
+ * Converts "pl-dircopy" → "name: pl-dircopy"
66
+ *
67
+ * @param name - The resource name.
68
+ * @returns A Searchable instance.
69
+ */
70
+ static simple(name) {
71
+ const trimmed = name.trim();
72
+ const normalized = `name: ${trimmed}`;
73
+ return new Searchable({
74
+ raw: trimmed,
75
+ parsed: { name: trimmed },
76
+ type: 'simple',
77
+ });
78
+ }
79
+ /**
80
+ * Creates a compound searchable from key:value pairs.
81
+ * Parses "name: pl-dircopy, version: 1.3.2" → { name: "pl-dircopy", version: "1.3.2" }
82
+ *
83
+ * @param keyValueString - Comma-separated key:value pairs.
84
+ * @returns A Searchable instance.
85
+ */
86
+ static compound(keyValueString) {
87
+ const trimmed = keyValueString.trim();
88
+ const parsed = (0, keypair_js_1.keyPairString_parse)(trimmed);
89
+ return new Searchable({
90
+ raw: trimmed,
91
+ parsed,
92
+ type: 'compound',
93
+ });
94
+ }
95
+ /**
96
+ * Creates a batch searchable containing multiple searchables separated by ++.
97
+ * The parsed result is a placeholder; use toBatchSearchables() to get individual items.
98
+ *
99
+ * @param batchString - Multiple searchables separated by ++.
100
+ * @returns A Searchable instance.
101
+ */
102
+ static batch(batchString) {
103
+ const trimmed = batchString.trim();
104
+ return new Searchable({
105
+ raw: trimmed,
106
+ parsed: { _batch: trimmed }, // Placeholder
107
+ type: 'batch',
108
+ });
109
+ }
110
+ /**
111
+ * Returns the original raw input string.
112
+ */
113
+ get raw() {
114
+ return this.data.raw;
115
+ }
116
+ /**
117
+ * Returns the searchable type.
118
+ */
119
+ get type() {
120
+ return this.data.type;
121
+ }
122
+ /**
123
+ * Checks if this is a simple searchable (plain name).
124
+ */
125
+ isSimple() {
126
+ return this.data.type === 'simple';
127
+ }
128
+ /**
129
+ * Checks if this is a compound searchable (multiple key:value pairs).
130
+ */
131
+ isCompound() {
132
+ return this.data.type === 'compound';
133
+ }
134
+ /**
135
+ * Checks if this is a batch searchable (contains ++).
136
+ */
137
+ isBatch() {
138
+ return this.data.type === 'batch';
139
+ }
140
+ /**
141
+ * Converts the searchable to query parameters suitable for the ChRIS API.
142
+ * For batch searchables, this returns a placeholder. Use toBatchSearchables() instead.
143
+ *
144
+ * @returns A record of key-value pairs.
145
+ */
146
+ toQueryParams() {
147
+ return { ...this.data.parsed };
148
+ }
149
+ /**
150
+ * Splits a batch searchable into individual searchables.
151
+ * Only applicable for batch searchables (containing ++).
152
+ *
153
+ * @returns An array of Searchable instances, or a single-item array if not a batch.
154
+ */
155
+ toBatchSearchables() {
156
+ if (!this.isBatch()) {
157
+ return [this];
158
+ }
159
+ const parts = this.data.raw.split('++').map((part) => part.trim());
160
+ return parts.map((part) => Searchable.from(part));
161
+ }
162
+ /**
163
+ * Converts the searchable to a normalized string format suitable for API queries.
164
+ * For simple searchables, this adds the "name:" prefix.
165
+ * For compound searchables, returns the original key:value format.
166
+ * For batch searchables, returns the original ++ separated format.
167
+ *
168
+ * @returns A normalized searchable string.
169
+ */
170
+ toNormalizedString() {
171
+ if (this.isSimple()) {
172
+ return `name: ${this.data.parsed.name}`;
173
+ }
174
+ return this.data.raw;
175
+ }
176
+ /**
177
+ * Validates the searchable format.
178
+ * Checks for empty strings and invalid formats.
179
+ *
180
+ * @returns True if valid, false otherwise.
181
+ */
182
+ validate() {
183
+ if (!this.data.raw || this.data.raw.trim().length === 0) {
184
+ return false;
185
+ }
186
+ if (this.isBatch()) {
187
+ // Ensure all batch parts are valid
188
+ const parts = this.toBatchSearchables();
189
+ return parts.every((s) => s.validate());
190
+ }
191
+ if (this.isCompound()) {
192
+ // Ensure at least one key-value pair was parsed
193
+ return Object.keys(this.data.parsed).length > 0;
194
+ }
195
+ // Simple searchables are valid if they have a name
196
+ return !!this.data.parsed.name;
197
+ }
198
+ /**
199
+ * Returns a string representation of the searchable.
200
+ */
201
+ toString() {
202
+ return `Searchable(type=${this.data.type}, raw="${this.data.raw}")`;
203
+ }
204
+ /**
205
+ * Returns a JSON representation of the searchable.
206
+ */
207
+ toJSON() {
208
+ return { ...this.data };
209
+ }
210
+ }
211
+ exports.Searchable = Searchable;
212
+ //# sourceMappingURL=searchable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchable.js","sourceRoot":"","sources":["../../src/utils/searchable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @file ChRIS Workflow resources.
3
+ * @module
4
+ */
5
+ import { ChRISResourceGroup } from '../resources/chrisResourceGroup.js';
6
+ /**
7
+ * Group handler for ChRIS workflows.
8
+ */
9
+ export declare class ChRISWorkflowGroup extends ChRISResourceGroup {
10
+ constructor();
11
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * @file ChRIS Workflow resources.
4
+ * @module
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ChRISWorkflowGroup = void 0;
8
+ const chrisResourceGroup_js_1 = require("../resources/chrisResourceGroup.js");
9
+ /**
10
+ * Group handler for ChRIS workflows.
11
+ */
12
+ class ChRISWorkflowGroup extends chrisResourceGroup_js_1.ChRISResourceGroup {
13
+ constructor() {
14
+ super('Workflows', 'getWorkflows');
15
+ }
16
+ }
17
+ exports.ChRISWorkflowGroup = ChRISWorkflowGroup;
18
+ //# sourceMappingURL=chrisWorkflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrisWorkflows.js","sourceRoot":"","sources":["../../src/workflows/chrisWorkflows.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,8EAAwE;AAExE;;GAEG;AACH,MAAa,kBAAmB,SAAQ,0CAAkB;IACxD;QACE,KAAK,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACrC,CAAC;CACF;AAJD,gDAIC"}