@fnndsc/salsa 4.5.4 → 4.5.5

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.
@@ -1,9 +1,23 @@
1
1
  import { Result } from '@fnndsc/cumin';
2
+ /**
3
+ * Runs work in which each folder's file ids are listed once: a transfer of
4
+ * many files. A scope inside a scope shares the outer one.
5
+ *
6
+ * @param operation - The work.
7
+ * @returns What the work returns.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const ids: number[] = await fileIds_memoRun(async () => resolveAll(paths));
12
+ * ```
13
+ */
14
+ export declare function fileIds_memoRun<T>(operation: () => Promise<T>): Promise<T>;
2
15
  /**
3
16
  * Resolves an absolute ChRIS file path to its numeric file id.
4
17
  *
5
18
  * Lists the parent directory and matches on basename, tolerating the `? <name>`
6
- * placeholder form the API sometimes returns.
19
+ * placeholder form the API sometimes returns. Inside {@link fileIds_memoRun}
20
+ * the listing is the transfer's, made once per folder.
7
21
  *
8
22
  * @param filePath - Absolute ChRIS file path.
9
23
  * @returns Ok(fileId), or Err (with a message pushed to errorStack) on failure.
@@ -33,20 +33,106 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.fileIds_memoRun = fileIds_memoRun;
36
37
  exports.pathFileId_resolve = pathFileId_resolve;
37
38
  /**
38
39
  * @file Resolve an absolute ChRIS file path to its numeric file id.
39
40
  *
41
+ * CUBE reads a file by id, and the id comes from listing the file's folder.
42
+ * One file read lists its folder once; a transfer of a whole folder would
43
+ * list that folder again for every file in it (223 files, 223 listings of
44
+ * 223 rows). A transfer runs inside {@link fileIds_memoRun}, where each
45
+ * folder is listed once and every file in it, in flight together or one
46
+ * after another, takes its id from that listing. Outside a transfer nothing
47
+ * is kept, so a read after an edit always lists afresh.
48
+ *
49
+ * Key components:
50
+ * - pathFileId_resolve: a file path's id.
51
+ * - fileIds_memoRun: runs work in which each folder's ids are listed once.
52
+ *
53
+ * Typical usage:
54
+ * ```ts
55
+ * await fileIds_memoRun(async () => {
56
+ * for (const path of paths) await pathFileId_resolve(path);
57
+ * });
58
+ * ```
59
+ *
60
+ * Dependencies: cumin's file browser groups.
61
+ *
40
62
  * @module
41
63
  */
64
+ const node_async_hooks_1 = require("node:async_hooks");
42
65
  const path = __importStar(require("path"));
43
66
  const cumin_1 = require("@fnndsc/cumin");
44
67
  const index_js_1 = require("./index.js");
68
+ /** The memo of the transfer running on this async path, when one is. */
69
+ const memoScope = new node_async_hooks_1.AsyncLocalStorage();
70
+ /**
71
+ * Runs work in which each folder's file ids are listed once: a transfer of
72
+ * many files. A scope inside a scope shares the outer one.
73
+ *
74
+ * @param operation - The work.
75
+ * @returns What the work returns.
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * const ids: number[] = await fileIds_memoRun(async () => resolveAll(paths));
80
+ * ```
81
+ */
82
+ async function fileIds_memoRun(operation) {
83
+ if (memoScope.getStore() !== undefined)
84
+ return operation();
85
+ return memoScope.run(new Map(), operation);
86
+ }
87
+ /**
88
+ * Lists one folder's files by basename.
89
+ *
90
+ * @param dir - The folder.
91
+ * @returns The ids by basename (null for a row with no id), or why it could not be listed.
92
+ */
93
+ async function folderIds_list(dir) {
94
+ const group = await (0, index_js_1.files_getGroup)('files', dir);
95
+ if (!group)
96
+ return { refused: '' };
97
+ const results = await group.asset.resources_getAll();
98
+ if (!results || !results.tableData)
99
+ return { refused: `No files found in directory: ${dir}` };
100
+ const ids = new Map();
101
+ for (const row of results.tableData) {
102
+ const basename = path.posix.basename(row.fname || '');
103
+ const name = basename.startsWith('? ') ? basename.slice(2) : basename;
104
+ if (!ids.has(name))
105
+ ids.set(name, typeof row.id === 'number' ? row.id : null);
106
+ }
107
+ return { ids };
108
+ }
109
+ /**
110
+ * One folder's ids: from the transfer's memo when one runs, else listed now.
111
+ * A folder that could not be listed is not kept, so a retry lists again.
112
+ *
113
+ * @param dir - The folder.
114
+ * @returns Its ids, or why it could not be listed.
115
+ */
116
+ async function folderIds_get(dir) {
117
+ const memo = memoScope.getStore();
118
+ if (memo === undefined)
119
+ return folderIds_list(dir);
120
+ const kept = memo.get(dir);
121
+ if (kept !== undefined)
122
+ return kept;
123
+ const listing = folderIds_list(dir);
124
+ memo.set(dir, listing);
125
+ const answer = await listing;
126
+ if ('refused' in answer)
127
+ memo.delete(dir);
128
+ return answer;
129
+ }
45
130
  /**
46
131
  * Resolves an absolute ChRIS file path to its numeric file id.
47
132
  *
48
133
  * Lists the parent directory and matches on basename, tolerating the `? <name>`
49
- * placeholder form the API sometimes returns.
134
+ * placeholder form the API sometimes returns. Inside {@link fileIds_memoRun}
135
+ * the listing is the transfer's, made once per folder.
50
136
  *
51
137
  * @param filePath - Absolute ChRIS file path.
52
138
  * @returns Ok(fileId), or Err (with a message pushed to errorStack) on failure.
@@ -54,27 +140,21 @@ const index_js_1 = require("./index.js");
54
140
  async function pathFileId_resolve(filePath) {
55
141
  const dir = path.posix.dirname(filePath);
56
142
  const name = path.posix.basename(filePath);
57
- const group = await (0, index_js_1.files_getGroup)('files', dir);
58
- if (!group) {
59
- return (0, cumin_1.Err)();
60
- }
61
- const results = await group.asset.resources_getAll();
62
- if (!results || !results.tableData) {
63
- cumin_1.errorStack.stack_push('error', `No files found in directory: ${dir}`);
143
+ const folder = await folderIds_get(dir);
144
+ if ('refused' in folder) {
145
+ if (folder.refused !== '')
146
+ cumin_1.errorStack.stack_push('error', folder.refused);
64
147
  return (0, cumin_1.Err)();
65
148
  }
66
- const file = results.tableData.find((f) => {
67
- const basename = path.posix.basename(f.fname || '');
68
- return basename === name || basename === `? ${name}`;
69
- });
70
- if (!file) {
149
+ if (!folder.ids.has(name)) {
71
150
  cumin_1.errorStack.stack_push('error', `File not found: ${name} in ${dir}`);
72
151
  return (0, cumin_1.Err)();
73
152
  }
74
- if (typeof file.id !== 'number') {
153
+ const id = folder.ids.get(name);
154
+ if (typeof id !== 'number') {
75
155
  cumin_1.errorStack.stack_push('error', `File has no valid ID: ${name}`);
76
156
  return (0, cumin_1.Err)();
77
157
  }
78
- return (0, cumin_1.Ok)(file.id);
158
+ return (0, cumin_1.Ok)(id);
79
159
  }
80
160
  //# sourceMappingURL=fileLookup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fileLookup.js","sourceRoot":"","sources":["../../src/files/fileLookup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,gDA+BC;AA/DD;;;;GAIG;AACH,2CAA6B;AAC7B,yCAQuB;AACvB,yCAA4C;AAQ5C;;;;;;;;GAQG;AACI,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IACvD,MAAM,GAAG,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAqD,MAAM,IAAA,yBAAc,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnG,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAA,WAAG,GAAE,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAgC,MAAM,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAClF,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,kBAAU,CAAC,UAAU,CAAC,OAAO,EAAE,gCAAgC,GAAG,EAAE,CAAC,CAAC;QACtE,OAAO,IAAA,WAAG,GAAE,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAyB,OAAO,CAAC,SAAuB,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE;QACrF,MAAM,QAAQ,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,IAAI,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,kBAAU,CAAC,UAAU,CAAC,OAAO,EAAE,mBAAmB,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC;QACpE,OAAO,IAAA,WAAG,GAAE,CAAC;IACf,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAChC,kBAAU,CAAC,UAAU,CAAC,OAAO,EAAE,yBAAyB,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,IAAA,WAAG,GAAE,CAAC;IACf,CAAC;IAED,OAAO,IAAA,UAAE,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"fileLookup.js","sourceRoot":"","sources":["../../src/files/fileLookup.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  export * from './feeds/index.js';
6
6
  export * from './plugins/index.js';
7
7
  export * from './files/index.js';
8
+ export { fileIds_memoRun } from './files/fileLookup.js';
8
9
  export { PathMapper, pathMapper_get, logicalPath_resolve, linkCache_clear, type CacheStats } from './files/pathMapper.js';
9
10
  export * from './connect/index.js';
10
11
  export * from './context/index.js';
package/dist/index.js CHANGED
@@ -18,10 +18,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.DATA_FACTS_READER = exports.dataFormat_deriveFromName = exports.dataFactsIO_build = exports.sourceFeed_parse = exports.procDataFacts_settled = exports.procDataFacts_feed = exports.procDataFacts_sweep = exports.feedDataFacts_read = exports.feedGraphData_ensure = exports.nodeJoins_resolve = exports.feedJoins_ensure = exports.signature_compute = exports.feedGraph_build = exports.PROC_TAGS_PREFIX = exports.FEED_VISIT_COALESCE_MS = exports.ROSTER_DELTA_PAGE = exports.ROSTER_FULL_WALK_MS = exports.FEED_RECHECK_MS = exports.procDataFacts_start = exports.procVisitState_reset = exports.procRoster_bootSync = exports.procRoster_syncStart = exports.procRoster_sync = exports.feedCached_isSettled = exports.feedVisit_sync = exports.feedStatus_refresh = exports.procTarget_parse = exports.procTarget_locate = exports.procFeed_probe = exports.feedMeta_ensure = exports.procFeed_refreshStart = exports.feedInstances_ensureStarted = exports.feedInstances_ensureLoaded = exports.procFeed_ensureLoaded = exports.procPipelineBackfill_status = exports.procTopologyCatchup_await = exports.procTopologyCatchup_status = exports.procTopologyCatchup_enqueue = exports.procTopology_await = exports.procTopology_status = exports.procTopology_retry = exports.procTopology_reconcileFeeds = exports.procTopology_warmup = exports.procCache_refresh = exports.linkCache_clear = exports.logicalPath_resolve = exports.pathMapper_get = exports.PathMapper = void 0;
21
+ exports.DATA_FACTS_READER = exports.dataFormat_deriveFromName = exports.dataFactsIO_build = exports.sourceFeed_parse = exports.procDataFacts_settled = exports.procDataFacts_feed = exports.procDataFacts_sweep = exports.feedDataFacts_read = exports.feedGraphData_ensure = exports.nodeJoins_resolve = exports.feedJoins_ensure = exports.signature_compute = exports.feedGraph_build = exports.PROC_TAGS_PREFIX = exports.FEED_VISIT_COALESCE_MS = exports.ROSTER_DELTA_PAGE = exports.ROSTER_FULL_WALK_MS = exports.FEED_RECHECK_MS = exports.procDataFacts_start = exports.procVisitState_reset = exports.procRoster_bootSync = exports.procRoster_syncStart = exports.procRoster_sync = exports.feedCached_isSettled = exports.feedVisit_sync = exports.feedStatus_refresh = exports.procTarget_parse = exports.procTarget_locate = exports.procFeed_probe = exports.feedMeta_ensure = exports.procFeed_refreshStart = exports.feedInstances_ensureStarted = exports.feedInstances_ensureLoaded = exports.procFeed_ensureLoaded = exports.procPipelineBackfill_status = exports.procTopologyCatchup_await = exports.procTopologyCatchup_status = exports.procTopologyCatchup_enqueue = exports.procTopology_await = exports.procTopology_status = exports.procTopology_retry = exports.procTopology_reconcileFeeds = exports.procTopology_warmup = exports.procCache_refresh = exports.linkCache_clear = exports.logicalPath_resolve = exports.pathMapper_get = exports.PathMapper = exports.fileIds_memoRun = void 0;
22
22
  __exportStar(require("./feeds/index.js"), exports);
23
23
  __exportStar(require("./plugins/index.js"), exports);
24
24
  __exportStar(require("./files/index.js"), exports);
25
+ var fileLookup_js_1 = require("./files/fileLookup.js");
26
+ Object.defineProperty(exports, "fileIds_memoRun", { enumerable: true, get: function () { return fileLookup_js_1.fileIds_memoRun; } });
25
27
  var pathMapper_js_1 = require("./files/pathMapper.js");
26
28
  Object.defineProperty(exports, "PathMapper", { enumerable: true, get: function () { return pathMapper_js_1.PathMapper; } });
27
29
  Object.defineProperty(exports, "pathMapper_get", { enumerable: true, get: function () { return pathMapper_js_1.pathMapper_get; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,mDAAiC;AACjC,qDAAmC;AACnC,mDAAiC;AACjC,uDAA0H;AAAjH,2GAAA,UAAU,OAAA;AAAE,+GAAA,cAAc,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAAE,gHAAA,eAAe,OAAA;AACzE,qDAAmC;AACnC,qDAAmC;AACnC,mDAAiC;AACjC,uDAAqC;AACrC,kDAAgC;AAChC,mDAAiC;AACjC,sDAAoC;AACpC,iDAA+B;AAC/B,kDAAgC;AAChC,oDAAkC;AAClC,yDAAuC;AACvC,6DAA2C;AAC3C,uDAAqC;AACrC,qDAAmC;AACnC,kDAAgC;AAChC,mDAAiC;AACjC,mDAA0uB;AAAjuB,4GAAA,iBAAiB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,sHAAA,2BAA2B,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,sHAAA,2BAA2B,OAAA;AAAE,qHAAA,0BAA0B,OAAA;AAAE,oHAAA,yBAAyB,OAAA;AAAE,sHAAA,2BAA2B,OAAA;AAAE,gHAAA,qBAAqB,OAAA;AAAE,qHAAA,0BAA0B,OAAA;AAAE,sHAAA,2BAA2B,OAAA;AAAE,gHAAA,qBAAqB,OAAA;AAA8B,0GAAA,eAAe,OAAA;AAAE,yGAAA,cAAc,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAqB,6GAAA,kBAAkB,OAAA;AAAE,yGAAA,cAAc,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAExsB,2DAA+D;AAAtD,+GAAA,gBAAgB,OAAA;AACzB,mDAAwE;AAA/D,+GAAA,eAAe,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAE3C,mDAAyE;AAAhE,gHAAA,gBAAgB,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAC5C,iDAAyD;AAAhD,mHAAA,oBAAoB,OAAA;AAC7B,iDAA4N;AAAnN,iHAAA,kBAAkB,OAAA;AAAE,kHAAA,mBAAmB,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAAE,gHAAA,iBAAiB,OAAA;AAAE,wHAAA,yBAAyB,OAAA;AAAE,gHAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,mDAAiC;AACjC,qDAAmC;AACnC,mDAAiC;AACjC,uDAAwD;AAA/C,gHAAA,eAAe,OAAA;AACxB,uDAA0H;AAAjH,2GAAA,UAAU,OAAA;AAAE,+GAAA,cAAc,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAAE,gHAAA,eAAe,OAAA;AACzE,qDAAmC;AACnC,qDAAmC;AACnC,mDAAiC;AACjC,uDAAqC;AACrC,kDAAgC;AAChC,mDAAiC;AACjC,sDAAoC;AACpC,iDAA+B;AAC/B,kDAAgC;AAChC,oDAAkC;AAClC,yDAAuC;AACvC,6DAA2C;AAC3C,uDAAqC;AACrC,qDAAmC;AACnC,kDAAgC;AAChC,mDAAiC;AACjC,mDAA0uB;AAAjuB,4GAAA,iBAAiB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,sHAAA,2BAA2B,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,sHAAA,2BAA2B,OAAA;AAAE,qHAAA,0BAA0B,OAAA;AAAE,oHAAA,yBAAyB,OAAA;AAAE,sHAAA,2BAA2B,OAAA;AAAE,gHAAA,qBAAqB,OAAA;AAAE,qHAAA,0BAA0B,OAAA;AAAE,sHAAA,2BAA2B,OAAA;AAAE,gHAAA,qBAAqB,OAAA;AAA8B,0GAAA,eAAe,OAAA;AAAE,yGAAA,cAAc,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAqB,6GAAA,kBAAkB,OAAA;AAAE,yGAAA,cAAc,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAExsB,2DAA+D;AAAtD,+GAAA,gBAAgB,OAAA;AACzB,mDAAwE;AAA/D,+GAAA,eAAe,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAE3C,mDAAyE;AAAhE,gHAAA,gBAAgB,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAC5C,iDAAyD;AAAhD,mHAAA,oBAAoB,OAAA;AAC7B,iDAA4N;AAAnN,iHAAA,kBAAkB,OAAA;AAAE,kHAAA,mBAAmB,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AAAE,+GAAA,gBAAgB,OAAA;AAAE,gHAAA,iBAAiB,OAAA;AAAE,wHAAA,yBAAyB,OAAA;AAAE,gHAAA,iBAAiB,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnndsc/salsa",
3
- "version": "4.5.4",
3
+ "version": "4.5.5",
4
4
  "description": "Shared Application Logic and Service Assets for ChRIS",
5
5
  "repository": {
6
6
  "type": "git",
@@ -60,8 +60,8 @@
60
60
  "adm-zip": "npm:empty-npm-package@1.0.0"
61
61
  },
62
62
  "dependencies": {
63
- "@fnndsc/cumin": "^3.30.0",
64
- "@fnndsc/fond": "^0.6.1",
63
+ "@fnndsc/cumin": "^3.30.6",
64
+ "@fnndsc/fond": "^0.6.2",
65
65
  "ajv": "^8.17.1",
66
66
  "axios": "^1.6.8",
67
67
  "dcmjs": "^0.52.0",