@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.
- package/LICENSE +21 -0
- package/README.md +78 -0
- package/dist/activities/chrisActivity.d.ts +19 -0
- package/dist/activities/chrisActivity.js +29 -0
- package/dist/activities/chrisActivity.js.map +1 -0
- package/dist/cache/index.d.ts +9 -0
- package/dist/cache/index.js +15 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/listCache.d.ts +182 -0
- package/dist/cache/listCache.js +266 -0
- package/dist/cache/listCache.js.map +1 -0
- package/dist/cache/procCache.d.ts +150 -0
- package/dist/cache/procCache.js +257 -0
- package/dist/cache/procCache.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +43 -0
- package/dist/cli.js.map +1 -0
- package/dist/compute/computeResources.d.ts +65 -0
- package/dist/compute/computeResources.js +113 -0
- package/dist/compute/computeResources.js.map +1 -0
- package/dist/config/config.d.ts +221 -0
- package/dist/config/config.js +350 -0
- package/dist/config/config.js.map +1 -0
- package/dist/connect/chrisConnection.d.ts +121 -0
- package/dist/connect/chrisConnection.js +303 -0
- package/dist/connect/chrisConnection.js.map +1 -0
- package/dist/context/chrisContext.d.ts +110 -0
- package/dist/context/chrisContext.js +324 -0
- package/dist/context/chrisContext.js.map +1 -0
- package/dist/error/errorStack.d.ts +115 -0
- package/dist/error/errorStack.js +175 -0
- package/dist/error/errorStack.js.map +1 -0
- package/dist/feeds/chrisFeed.d.ts +188 -0
- package/dist/feeds/chrisFeed.js +432 -0
- package/dist/feeds/chrisFeed.js.map +1 -0
- package/dist/filebrowser/chrisFileBrowser.d.ts +77 -0
- package/dist/filebrowser/chrisFileBrowser.js +134 -0
- package/dist/filebrowser/chrisFileBrowser.js.map +1 -0
- package/dist/filebrowser/chrisFiles.d.ts +67 -0
- package/dist/filebrowser/chrisFiles.js +130 -0
- package/dist/filebrowser/chrisFiles.js.map +1 -0
- package/dist/filebrowser/chrisPACS.d.ts +43 -0
- package/dist/filebrowser/chrisPACS.js +103 -0
- package/dist/filebrowser/chrisPACS.js.map +1 -0
- package/dist/filebrowser/chrisPipeline.d.ts +47 -0
- package/dist/filebrowser/chrisPipeline.js +118 -0
- package/dist/filebrowser/chrisPipeline.js.map +1 -0
- package/dist/groups/chrisGroups.d.ts +11 -0
- package/dist/groups/chrisGroups.js +18 -0
- package/dist/groups/chrisGroups.js.map +1 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/io/browser_io.d.ts +97 -0
- package/dist/io/browser_io.js +149 -0
- package/dist/io/browser_io.js.map +1 -0
- package/dist/io/chrisIO.d.ts +110 -0
- package/dist/io/chrisIO.js +415 -0
- package/dist/io/chrisIO.js.map +1 -0
- package/dist/io/io.d.ts +21 -0
- package/dist/io/io.js +6 -0
- package/dist/io/io.js.map +1 -0
- package/dist/io/node_io.d.ts +30 -0
- package/dist/io/node_io.js +188 -0
- package/dist/io/node_io.js.map +1 -0
- package/dist/jobs/chrisJob.d.ts +43 -0
- package/dist/jobs/chrisJob.js +169 -0
- package/dist/jobs/chrisJob.js.map +1 -0
- package/dist/jobs/index.d.ts +7 -0
- package/dist/jobs/index.js +24 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/jobMonitor.d.ts +46 -0
- package/dist/jobs/jobMonitor.js +102 -0
- package/dist/jobs/jobMonitor.js.map +1 -0
- package/dist/pacs/chrisPACS.d.ts +200 -0
- package/dist/pacs/chrisPACS.js +562 -0
- package/dist/pacs/chrisPACS.js.map +1 -0
- package/dist/path/chrisPath.d.ts +78 -0
- package/dist/path/chrisPath.js +190 -0
- package/dist/path/chrisPath.js.map +1 -0
- package/dist/pipelines/chrisPipeline.d.ts +86 -0
- package/dist/pipelines/chrisPipeline.js +180 -0
- package/dist/pipelines/chrisPipeline.js.map +1 -0
- package/dist/pluginmetas/chrisPluginMetas.d.ts +11 -0
- package/dist/pluginmetas/chrisPluginMetas.js +18 -0
- package/dist/pluginmetas/chrisPluginMetas.js.map +1 -0
- package/dist/plugins/chrisPluginMetaPlugins.d.ts +12 -0
- package/dist/plugins/chrisPluginMetaPlugins.js +19 -0
- package/dist/plugins/chrisPluginMetaPlugins.js.map +1 -0
- package/dist/plugins/chrisPlugins.d.ts +127 -0
- package/dist/plugins/chrisPlugins.js +528 -0
- package/dist/plugins/chrisPlugins.js.map +1 -0
- package/dist/resources/chrisEmbeddedResourceGroup.d.ts +73 -0
- package/dist/resources/chrisEmbeddedResourceGroup.js +148 -0
- package/dist/resources/chrisEmbeddedResourceGroup.js.map +1 -0
- package/dist/resources/chrisObjContext.d.ts +16 -0
- package/dist/resources/chrisObjContext.js +109 -0
- package/dist/resources/chrisObjContext.js.map +1 -0
- package/dist/resources/chrisResourceGroup.d.ts +30 -0
- package/dist/resources/chrisResourceGroup.js +47 -0
- package/dist/resources/chrisResourceGroup.js.map +1 -0
- package/dist/resources/chrisResources.d.ts +163 -0
- package/dist/resources/chrisResources.js +415 -0
- package/dist/resources/chrisResources.js.map +1 -0
- package/dist/tags/chrisTags.d.ts +11 -0
- package/dist/tags/chrisTags.js +18 -0
- package/dist/tags/chrisTags.js.map +1 -0
- package/dist/users/chrisUsers.d.ts +34 -0
- package/dist/users/chrisUsers.js +57 -0
- package/dist/users/chrisUsers.js.map +1 -0
- package/dist/utils/keypair.d.ts +77 -0
- package/dist/utils/keypair.js +144 -0
- package/dist/utils/keypair.js.map +1 -0
- package/dist/utils/result.d.ts +77 -0
- package/dist/utils/result.js +58 -0
- package/dist/utils/result.js.map +1 -0
- package/dist/utils/searchable.d.ts +143 -0
- package/dist/utils/searchable.js +212 -0
- package/dist/utils/searchable.js.map +1 -0
- package/dist/workflows/chrisWorkflows.d.ts +11 -0
- package/dist/workflows/chrisWorkflows.js +18 -0
- package/dist/workflows/chrisWorkflows.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file ChRIS Pipeline Source File Operations
|
|
4
|
+
*
|
|
5
|
+
* This module provides functions for retrieving pipeline source files (YAML configuration files)
|
|
6
|
+
* from the ChRIS backend. Pipeline files are stored under /PIPELINES/<owner>/<filename>.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.pipelineFile_getByPath = pipelineFile_getByPath;
|
|
12
|
+
exports.pipelineFile_getTextByPath = pipelineFile_getTextByPath;
|
|
13
|
+
const chrisConnection_js_1 = require("../connect/chrisConnection.js");
|
|
14
|
+
const errorStack_js_1 = require("../error/errorStack.js");
|
|
15
|
+
const result_js_1 = require("../utils/result.js");
|
|
16
|
+
/**
|
|
17
|
+
* Downloads a pipeline source file by path and returns the raw binary content.
|
|
18
|
+
*
|
|
19
|
+
* Pipeline source files are typically YAML configuration files stored under /PIPELINES/<owner>/<filename>.
|
|
20
|
+
* The API returns fname as the full path like "PIPELINES/user/file.yml" (without leading slash).
|
|
21
|
+
*
|
|
22
|
+
* @param filePath - The full path to the pipeline file, e.g., /PIPELINES/user/pipeline.yml
|
|
23
|
+
* @returns A Result containing the file content as a Buffer, or an error.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const result = await pipelineFile_getByPath('/PIPELINES/user/config.yml');
|
|
28
|
+
* if (result.ok) {
|
|
29
|
+
* const buffer: Buffer = result.value;
|
|
30
|
+
* const yamlContent = buffer.toString('utf-8');
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
async function pipelineFile_getByPath(filePath) {
|
|
35
|
+
const client = await chrisConnection_js_1.chrisConnection.client_get();
|
|
36
|
+
if (!client) {
|
|
37
|
+
errorStack_js_1.errorStack.stack_push("error", "Not connected to ChRIS. Cannot fetch pipeline file.");
|
|
38
|
+
return (0, result_js_1.Err)();
|
|
39
|
+
}
|
|
40
|
+
// The API returns fname as the full path like "PIPELINES/sandip.samal/PHI_detection.yml"
|
|
41
|
+
// So we need to match against the full path minus the leading slash
|
|
42
|
+
const expectedFname = filePath.startsWith('/') ? filePath.substring(1) : filePath;
|
|
43
|
+
try {
|
|
44
|
+
// Filter server-side by fname; fall back to client-side filter on the returned items
|
|
45
|
+
// in case the backend does not support fname as a query param.
|
|
46
|
+
const pipelineSourceFileListResult = await client.getPipelineSourceFiles({ fname: expectedFname, limit: 1000 });
|
|
47
|
+
if (pipelineSourceFileListResult === null) {
|
|
48
|
+
errorStack_js_1.errorStack.stack_push("error", `Failed to retrieve pipeline source file list.`);
|
|
49
|
+
return (0, result_js_1.Err)();
|
|
50
|
+
}
|
|
51
|
+
const allItems = pipelineSourceFileListResult.getItems();
|
|
52
|
+
// Filter by full fname path (API returns full path like "PIPELINES/user/file.yml")
|
|
53
|
+
const matchingPipelineFiles = allItems.filter((item) => {
|
|
54
|
+
const itemData = item.data;
|
|
55
|
+
return itemData.fname === expectedFname;
|
|
56
|
+
});
|
|
57
|
+
if (matchingPipelineFiles.length === 0) {
|
|
58
|
+
errorStack_js_1.errorStack.stack_push("error", `Pipeline source file not found: ${filePath}`);
|
|
59
|
+
return (0, result_js_1.Err)();
|
|
60
|
+
}
|
|
61
|
+
const pipelineSourceFile = matchingPipelineFiles[0];
|
|
62
|
+
const blob = await pipelineSourceFile.getFileBlob();
|
|
63
|
+
if (!blob) {
|
|
64
|
+
errorStack_js_1.errorStack.stack_push("error", `Pipeline source file ${filePath} exists but returned no content/blob.`);
|
|
65
|
+
return (0, result_js_1.Err)();
|
|
66
|
+
}
|
|
67
|
+
// Convert blob to Buffer (handle different blob types)
|
|
68
|
+
let buffer;
|
|
69
|
+
if (typeof blob === "string") {
|
|
70
|
+
buffer = Buffer.from(blob);
|
|
71
|
+
}
|
|
72
|
+
else if (blob instanceof ArrayBuffer) {
|
|
73
|
+
buffer = Buffer.from(blob);
|
|
74
|
+
}
|
|
75
|
+
else if (blob instanceof Blob) {
|
|
76
|
+
const arrayBuffer = await blob.arrayBuffer();
|
|
77
|
+
buffer = Buffer.from(arrayBuffer);
|
|
78
|
+
}
|
|
79
|
+
else if (Buffer.isBuffer(blob)) {
|
|
80
|
+
buffer = blob;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
throw new Error(`Unexpected blob type for pipeline file: ${typeof blob}`);
|
|
84
|
+
}
|
|
85
|
+
return (0, result_js_1.Ok)(buffer);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
89
|
+
errorStack_js_1.errorStack.stack_push("error", `Failed to fetch pipeline file for ${filePath}: ${msg}`);
|
|
90
|
+
return (0, result_js_1.Err)();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Downloads a pipeline source file and returns it as a UTF-8 string.
|
|
95
|
+
*
|
|
96
|
+
* This is a convenience wrapper around `pipelineFile_getByPath()` that converts
|
|
97
|
+
* the Buffer to a string. Suitable for YAML/text files.
|
|
98
|
+
*
|
|
99
|
+
* @param filePath - The full path to the pipeline file, e.g., /PIPELINES/user/pipeline.yml
|
|
100
|
+
* @returns A Result containing the file content as a string, or an error.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const result = await pipelineFile_getTextByPath('/PIPELINES/user/config.yml');
|
|
105
|
+
* if (result.ok) {
|
|
106
|
+
* const yamlContent: string = result.value;
|
|
107
|
+
* // Parse YAML content
|
|
108
|
+
* }
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
async function pipelineFile_getTextByPath(filePath) {
|
|
112
|
+
const result = await pipelineFile_getByPath(filePath);
|
|
113
|
+
if (!result.ok) {
|
|
114
|
+
return (0, result_js_1.Err)();
|
|
115
|
+
}
|
|
116
|
+
return (0, result_js_1.Ok)(result.value.toString('utf-8'));
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=chrisPipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrisPipeline.js","sourceRoot":"","sources":["../../src/filebrowser/chrisPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ChRIS Group resources.
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import { ChRISResourceGroup } from '../resources/chrisResourceGroup.js';
|
|
6
|
+
/**
|
|
7
|
+
* Group handler for ChRIS user groups.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ChRISGroupGroup extends ChRISResourceGroup {
|
|
10
|
+
constructor();
|
|
11
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file ChRIS Group resources.
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ChRISGroupGroup = void 0;
|
|
8
|
+
const chrisResourceGroup_js_1 = require("../resources/chrisResourceGroup.js");
|
|
9
|
+
/**
|
|
10
|
+
* Group handler for ChRIS user groups.
|
|
11
|
+
*/
|
|
12
|
+
class ChRISGroupGroup extends chrisResourceGroup_js_1.ChRISResourceGroup {
|
|
13
|
+
constructor() {
|
|
14
|
+
super('Groups', 'getGroups');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.ChRISGroupGroup = ChRISGroupGroup;
|
|
18
|
+
//# sourceMappingURL=chrisGroups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrisGroups.js","sourceRoot":"","sources":["../../src/groups/chrisGroups.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,8EAAwE;AAExE;;GAEG;AACH,MAAa,eAAgB,SAAQ,0CAAkB;IACrD;QACE,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC/B,CAAC;CACF;AAJD,0CAIC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @file Cumin Package Main Entry Point.
|
|
4
|
+
*
|
|
5
|
+
* This file serves as the main entry point and export aggregator for the Cumin infrastructure
|
|
6
|
+
* library. It exports error stacks, config utilities, PACs handlers, connections, file browsers,
|
|
7
|
+
* and result Monads for downstream consumption by Salsa, Chili, and Chell.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
export * from "./";
|
|
12
|
+
export * from "./error/errorStack";
|
|
13
|
+
export * from "./config/config";
|
|
14
|
+
export * from "./feeds/chrisFeed";
|
|
15
|
+
export * from "./connect/chrisConnection";
|
|
16
|
+
export * from "./context/chrisContext";
|
|
17
|
+
export * from "./plugins/chrisPlugins";
|
|
18
|
+
export * from "./plugins/chrisPluginMetaPlugins";
|
|
19
|
+
export * from "./compute/computeResources";
|
|
20
|
+
export * from "./pacs/chrisPACS";
|
|
21
|
+
export * from "./resources/chrisResources";
|
|
22
|
+
export * from "./resources/chrisResourceGroup";
|
|
23
|
+
export * from "./resources/chrisObjContext";
|
|
24
|
+
export * from "./resources/chrisEmbeddedResourceGroup";
|
|
25
|
+
export * from "./filebrowser/chrisFileBrowser";
|
|
26
|
+
export * from "./filebrowser/chrisFiles";
|
|
27
|
+
export * from "./filebrowser/chrisPACS";
|
|
28
|
+
export * from "./filebrowser/chrisPipeline";
|
|
29
|
+
export * from "./io/chrisIO";
|
|
30
|
+
export * from "./io/io";
|
|
31
|
+
export * from "./io/node_io";
|
|
32
|
+
export * from "./utils/keypair";
|
|
33
|
+
export * from "./utils/searchable";
|
|
34
|
+
export * from "./utils/result";
|
|
35
|
+
export * from "./cache";
|
|
36
|
+
export * from "./path/chrisPath";
|
|
37
|
+
export * from "./pipelines/chrisPipeline";
|
|
38
|
+
export * from "./users/chrisUsers";
|
|
39
|
+
export * from "./tags/chrisTags";
|
|
40
|
+
export * from "./groups/chrisGroups";
|
|
41
|
+
export * from "./pluginmetas/chrisPluginMetas";
|
|
42
|
+
export * from "./workflows/chrisWorkflows";
|
|
43
|
+
/**
|
|
44
|
+
* Shape of a single node (file, directory, or link) in a ChRIS path listing.
|
|
45
|
+
*/
|
|
46
|
+
export interface ChrisPathNode {
|
|
47
|
+
path: string;
|
|
48
|
+
fname?: string;
|
|
49
|
+
fsize?: number;
|
|
50
|
+
id?: number;
|
|
51
|
+
isDir?: boolean;
|
|
52
|
+
isLink?: boolean;
|
|
53
|
+
linkTarget?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Summary metadata describing a ChRIS plugin.
|
|
57
|
+
*/
|
|
58
|
+
export interface ChrisPluginSummary {
|
|
59
|
+
id?: number;
|
|
60
|
+
name?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Gets the ChRIS version from the given URL.
|
|
64
|
+
*
|
|
65
|
+
* @param url - The URL of the ChRIS instance.
|
|
66
|
+
* @returns A Promise resolving to the version string.
|
|
67
|
+
*/
|
|
68
|
+
export declare function chrisVersion_get(url: string): Promise<string>;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* @file Cumin Package Main Entry Point.
|
|
5
|
+
*
|
|
6
|
+
* This file serves as the main entry point and export aggregator for the Cumin infrastructure
|
|
7
|
+
* library. It exports error stacks, config utilities, PACs handlers, connections, file browsers,
|
|
8
|
+
* and result Monads for downstream consumption by Salsa, Chili, and Chell.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
24
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.chrisVersion_get = chrisVersion_get;
|
|
28
|
+
__exportStar(require("./"), exports);
|
|
29
|
+
__exportStar(require("./error/errorStack"), exports);
|
|
30
|
+
__exportStar(require("./config/config"), exports);
|
|
31
|
+
__exportStar(require("./feeds/chrisFeed"), exports);
|
|
32
|
+
__exportStar(require("./connect/chrisConnection"), exports);
|
|
33
|
+
__exportStar(require("./context/chrisContext"), exports);
|
|
34
|
+
__exportStar(require("./plugins/chrisPlugins"), exports);
|
|
35
|
+
__exportStar(require("./plugins/chrisPluginMetaPlugins"), exports);
|
|
36
|
+
__exportStar(require("./compute/computeResources"), exports);
|
|
37
|
+
__exportStar(require("./pacs/chrisPACS"), exports);
|
|
38
|
+
__exportStar(require("./resources/chrisResources"), exports);
|
|
39
|
+
__exportStar(require("./resources/chrisResourceGroup"), exports);
|
|
40
|
+
__exportStar(require("./resources/chrisObjContext"), exports);
|
|
41
|
+
__exportStar(require("./resources/chrisEmbeddedResourceGroup"), exports);
|
|
42
|
+
__exportStar(require("./filebrowser/chrisFileBrowser"), exports);
|
|
43
|
+
__exportStar(require("./filebrowser/chrisFiles"), exports);
|
|
44
|
+
__exportStar(require("./filebrowser/chrisPACS"), exports);
|
|
45
|
+
__exportStar(require("./filebrowser/chrisPipeline"), exports);
|
|
46
|
+
__exportStar(require("./io/chrisIO"), exports);
|
|
47
|
+
__exportStar(require("./io/io"), exports);
|
|
48
|
+
__exportStar(require("./io/node_io"), exports);
|
|
49
|
+
__exportStar(require("./utils/keypair"), exports);
|
|
50
|
+
__exportStar(require("./utils/searchable"), exports);
|
|
51
|
+
__exportStar(require("./utils/result"), exports);
|
|
52
|
+
__exportStar(require("./cache"), exports);
|
|
53
|
+
__exportStar(require("./path/chrisPath"), exports);
|
|
54
|
+
__exportStar(require("./pipelines/chrisPipeline"), exports);
|
|
55
|
+
__exportStar(require("./users/chrisUsers"), exports);
|
|
56
|
+
__exportStar(require("./tags/chrisTags"), exports);
|
|
57
|
+
__exportStar(require("./groups/chrisGroups"), exports);
|
|
58
|
+
__exportStar(require("./pluginmetas/chrisPluginMetas"), exports);
|
|
59
|
+
__exportStar(require("./workflows/chrisWorkflows"), exports);
|
|
60
|
+
/**
|
|
61
|
+
* Gets the ChRIS version from the given URL.
|
|
62
|
+
*
|
|
63
|
+
* @param url - The URL of the ChRIS instance.
|
|
64
|
+
* @returns A Promise resolving to the version string.
|
|
65
|
+
*/
|
|
66
|
+
async function chrisVersion_get(url) {
|
|
67
|
+
const version = "1.0.0";
|
|
68
|
+
// const client = Client.getClient(url);
|
|
69
|
+
// const version = await client.getVersion();
|
|
70
|
+
return version;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Main entry point for the module when run directly.
|
|
74
|
+
*/
|
|
75
|
+
async function main() {
|
|
76
|
+
console.log("In main...");
|
|
77
|
+
}
|
|
78
|
+
// Only run the main function if this file is being run directly
|
|
79
|
+
// Use CommonJS check for main module
|
|
80
|
+
if (require.main === module) {
|
|
81
|
+
main().catch((error) => {
|
|
82
|
+
console.error("An error occurred:", error);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;;GAQG;;;;;;;;;;;;;;;;AA+DH,4CAKC;AAlED,qCAAmB;AACnB,qDAAmC;AACnC,kDAAgC;AAChC,oDAAkC;AAClC,4DAA0C;AAC1C,yDAAuC;AACvC,yDAAuC;AACvC,mEAAiD;AACjD,6DAA2C;AAC3C,mDAAiC;AACjC,6DAA2C;AAC3C,iEAA+C;AAC/C,8DAA4C;AAC5C,yEAAuD;AACvD,iEAA+C;AAC/C,2DAAyC;AACzC,0DAAwC;AACxC,8DAA4C;AAC5C,+CAA6B;AAC7B,0CAAwB;AACxB,+CAA6B;AAC7B,kDAAgC;AAChC,qDAAmC;AACnC,iDAA+B;AAC/B,0CAAwB;AACxB,mDAAiC;AACjC,4DAA0C;AAC1C,qDAAmC;AACnC,mDAAiC;AACjC,uDAAqC;AACrC,iEAA+C;AAC/C,6DAA2C;AAwB3C;;;;;GAKG;AACI,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,MAAM,OAAO,GAAW,OAAO,CAAC;IAChC,wCAAwC;IACxC,6CAA6C;IAC7C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC;AAED,gEAAgE;AAChE,qCAAqC;AACrC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Browser localStorage implementation of IStorageProvider.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { IStorageProvider } from "./io.js";
|
|
7
|
+
/**
|
|
8
|
+
* An in-memory, non-persisting storage provider suitable for browser environments
|
|
9
|
+
* where persistence is managed by the host application (GUI).
|
|
10
|
+
*
|
|
11
|
+
* This provider satisfies the `IStorageProvider` interface but does not
|
|
12
|
+
* store any data persistently. All data is held in-memory and reset
|
|
13
|
+
* when the application (e.g., browser tab) is refreshed.
|
|
14
|
+
*
|
|
15
|
+
* It effectively acts as a dummy or passthrough for storage operations,
|
|
16
|
+
* relying on the external environment to provide necessary context.
|
|
17
|
+
*/
|
|
18
|
+
export declare class BrowserStorageProvider implements IStorageProvider {
|
|
19
|
+
private store;
|
|
20
|
+
constructor();
|
|
21
|
+
/**
|
|
22
|
+
* Reads data associated with a path from the in-memory store.
|
|
23
|
+
*
|
|
24
|
+
* @param path - The virtual path of the data.
|
|
25
|
+
* @returns A Promise resolving to the data string or null if not found.
|
|
26
|
+
*/
|
|
27
|
+
read(path: string): Promise<string | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Reads binary data associated with a path.
|
|
30
|
+
*
|
|
31
|
+
* @param path - The virtual path.
|
|
32
|
+
* @returns A Promise resolving to ArrayBuffer or null.
|
|
33
|
+
*/
|
|
34
|
+
readBinary(path: string): Promise<ArrayBuffer | null>;
|
|
35
|
+
/**
|
|
36
|
+
* Writes data to the in-memory store associated with a path.
|
|
37
|
+
*
|
|
38
|
+
* @param path - The virtual path to write to.
|
|
39
|
+
* @param data - The string data to write.
|
|
40
|
+
* @returns A Promise that resolves when the operation is complete.
|
|
41
|
+
*/
|
|
42
|
+
write(path: string, data: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Removes data associated with a path from the in-memory store.
|
|
45
|
+
*
|
|
46
|
+
* @param path - The virtual path to remove.
|
|
47
|
+
* @returns A Promise that resolves when the operation is complete.
|
|
48
|
+
*/
|
|
49
|
+
remove(path: string): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Creates a "directory" in the in-memory store.
|
|
52
|
+
* For this non-persisting provider, this is a no-op as directories are not physically managed.
|
|
53
|
+
*
|
|
54
|
+
* @param path - The virtual path of the directory.
|
|
55
|
+
* @param options - Optional recursive creation (ignored).
|
|
56
|
+
* @returns A Promise that resolves when the operation is complete.
|
|
57
|
+
*/
|
|
58
|
+
mkdir(path: string, options?: {
|
|
59
|
+
recursive?: boolean;
|
|
60
|
+
}): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Checks if a path exists in the in-memory store.
|
|
63
|
+
*
|
|
64
|
+
* @param path - The virtual path to check.
|
|
65
|
+
* @returns A Promise resolving to true if the path exists, false otherwise.
|
|
66
|
+
*/
|
|
67
|
+
exists(path: string): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Reads the contents of a "directory" in the in-memory store.
|
|
70
|
+
* For this non-persisting provider, it simulates by returning keys that start with the path prefix.
|
|
71
|
+
* This is a simplified simulation and does not represent a true filesystem.
|
|
72
|
+
*
|
|
73
|
+
* @param path - The virtual path of the directory.
|
|
74
|
+
* @returns A Promise resolving to an array of file/directory names within the path.
|
|
75
|
+
*/
|
|
76
|
+
readdir(path: string): Promise<string[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Checks if a path represents a "directory" in the in-memory store.
|
|
79
|
+
* For this non-persisting provider, it checks if any keys start with the path as a prefix.
|
|
80
|
+
*
|
|
81
|
+
* @param path - The virtual path to check.
|
|
82
|
+
* @returns A Promise resolving to true if it appears to be a directory, false otherwise.
|
|
83
|
+
*/
|
|
84
|
+
isDirectory(path: string): Promise<boolean>;
|
|
85
|
+
/**
|
|
86
|
+
* Joins path segments.
|
|
87
|
+
* @param paths - The path segments.
|
|
88
|
+
* @returns Joined path.
|
|
89
|
+
*/
|
|
90
|
+
join(...paths: string[]): string;
|
|
91
|
+
/**
|
|
92
|
+
* Returns the last portion of a path.
|
|
93
|
+
* @param path - The path to extract the basename from.
|
|
94
|
+
* @returns The basename.
|
|
95
|
+
*/
|
|
96
|
+
basename(path: string): string;
|
|
97
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file Browser localStorage implementation of IStorageProvider.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.BrowserStorageProvider = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* An in-memory, non-persisting storage provider suitable for browser environments
|
|
11
|
+
* where persistence is managed by the host application (GUI).
|
|
12
|
+
*
|
|
13
|
+
* This provider satisfies the `IStorageProvider` interface but does not
|
|
14
|
+
* store any data persistently. All data is held in-memory and reset
|
|
15
|
+
* when the application (e.g., browser tab) is refreshed.
|
|
16
|
+
*
|
|
17
|
+
* It effectively acts as a dummy or passthrough for storage operations,
|
|
18
|
+
* relying on the external environment to provide necessary context.
|
|
19
|
+
*/
|
|
20
|
+
class BrowserStorageProvider {
|
|
21
|
+
constructor() {
|
|
22
|
+
// A simple in-memory store for demonstration/testing purposes
|
|
23
|
+
this.store = new Map();
|
|
24
|
+
console.log("BrowserStorageProvider initialized (in-memory, non-persisting).");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Reads data associated with a path from the in-memory store.
|
|
28
|
+
*
|
|
29
|
+
* @param path - The virtual path of the data.
|
|
30
|
+
* @returns A Promise resolving to the data string or null if not found.
|
|
31
|
+
*/
|
|
32
|
+
async read(path) {
|
|
33
|
+
const data = this.store.get(path);
|
|
34
|
+
return data === undefined ? null : data;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Reads binary data associated with a path.
|
|
38
|
+
*
|
|
39
|
+
* @param path - The virtual path.
|
|
40
|
+
* @returns A Promise resolving to ArrayBuffer or null.
|
|
41
|
+
*/
|
|
42
|
+
async readBinary(path) {
|
|
43
|
+
console.warn("[BrowserStorageProvider] readBinary not implemented for in-memory store.");
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Writes data to the in-memory store associated with a path.
|
|
48
|
+
*
|
|
49
|
+
* @param path - The virtual path to write to.
|
|
50
|
+
* @param data - The string data to write.
|
|
51
|
+
* @returns A Promise that resolves when the operation is complete.
|
|
52
|
+
*/
|
|
53
|
+
async write(path, data) {
|
|
54
|
+
this.store.set(path, data);
|
|
55
|
+
console.debug(`[BrowserStorageProvider] Wrote to: ${path}`);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Removes data associated with a path from the in-memory store.
|
|
59
|
+
*
|
|
60
|
+
* @param path - The virtual path to remove.
|
|
61
|
+
* @returns A Promise that resolves when the operation is complete.
|
|
62
|
+
*/
|
|
63
|
+
async remove(path) {
|
|
64
|
+
this.store.delete(path);
|
|
65
|
+
console.debug(`[BrowserStorageProvider] Removed: ${path}`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Creates a "directory" in the in-memory store.
|
|
69
|
+
* For this non-persisting provider, this is a no-op as directories are not physically managed.
|
|
70
|
+
*
|
|
71
|
+
* @param path - The virtual path of the directory.
|
|
72
|
+
* @param options - Optional recursive creation (ignored).
|
|
73
|
+
* @returns A Promise that resolves when the operation is complete.
|
|
74
|
+
*/
|
|
75
|
+
async mkdir(path, options) {
|
|
76
|
+
// No-op for a non-persisting in-memory store
|
|
77
|
+
console.debug(`[BrowserStorageProvider] mkdir (no-op): ${path}`);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Checks if a path exists in the in-memory store.
|
|
81
|
+
*
|
|
82
|
+
* @param path - The virtual path to check.
|
|
83
|
+
* @returns A Promise resolving to true if the path exists, false otherwise.
|
|
84
|
+
*/
|
|
85
|
+
async exists(path) {
|
|
86
|
+
return this.store.has(path);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Reads the contents of a "directory" in the in-memory store.
|
|
90
|
+
* For this non-persisting provider, it simulates by returning keys that start with the path prefix.
|
|
91
|
+
* This is a simplified simulation and does not represent a true filesystem.
|
|
92
|
+
*
|
|
93
|
+
* @param path - The virtual path of the directory.
|
|
94
|
+
* @returns A Promise resolving to an array of file/directory names within the path.
|
|
95
|
+
*/
|
|
96
|
+
async readdir(path) {
|
|
97
|
+
const prefixedPath = path.endsWith('/') ? path : `${path}/`;
|
|
98
|
+
const entries = [];
|
|
99
|
+
for (const key of this.store.keys()) {
|
|
100
|
+
if (key.startsWith(prefixedPath)) {
|
|
101
|
+
let relativePath = key.substring(prefixedPath.length);
|
|
102
|
+
// Only add the immediate child part
|
|
103
|
+
const firstSlashIndex = relativePath.indexOf('/');
|
|
104
|
+
if (firstSlashIndex !== -1) {
|
|
105
|
+
relativePath = relativePath.substring(0, firstSlashIndex);
|
|
106
|
+
}
|
|
107
|
+
if (!entries.includes(relativePath)) {
|
|
108
|
+
entries.push(relativePath);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return entries;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Checks if a path represents a "directory" in the in-memory store.
|
|
116
|
+
* For this non-persisting provider, it checks if any keys start with the path as a prefix.
|
|
117
|
+
*
|
|
118
|
+
* @param path - The virtual path to check.
|
|
119
|
+
* @returns A Promise resolving to true if it appears to be a directory, false otherwise.
|
|
120
|
+
*/
|
|
121
|
+
async isDirectory(path) {
|
|
122
|
+
const prefixedPath = path.endsWith('/') ? path : `${path}/`;
|
|
123
|
+
for (const key of this.store.keys()) {
|
|
124
|
+
if (key.startsWith(prefixedPath)) {
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Joins path segments.
|
|
132
|
+
* @param paths - The path segments.
|
|
133
|
+
* @returns Joined path.
|
|
134
|
+
*/
|
|
135
|
+
join(...paths) {
|
|
136
|
+
return paths.join('/');
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Returns the last portion of a path.
|
|
140
|
+
* @param path - The path to extract the basename from.
|
|
141
|
+
* @returns The basename.
|
|
142
|
+
*/
|
|
143
|
+
basename(path) {
|
|
144
|
+
const parts = path.split('/');
|
|
145
|
+
return parts[parts.length - 1] || '';
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.BrowserStorageProvider = BrowserStorageProvider;
|
|
149
|
+
//# sourceMappingURL=browser_io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser_io.js","sourceRoot":"","sources":["../../src/io/browser_io.ts"],"names":[],"mappings":"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"}
|