@milaboratories/pl-drivers 1.14.7 → 1.14.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/drivers/helpers/ls_storage_entry.cjs +1 -1
- package/dist/drivers/helpers/ls_storage_entry.cjs.map +1 -1
- package/dist/drivers/helpers/ls_storage_entry.js +2 -2
- package/dist/drivers/helpers/ls_storage_entry.js.map +1 -1
- package/package.json +8 -8
- package/src/drivers/helpers/ls_storage_entry.ts +6 -2
- package/src/drivers/upload.test.ts +10 -12
|
@@ -42,7 +42,7 @@ function parseRemoteStorageHandle(handle) {
|
|
|
42
42
|
isRemote: true,
|
|
43
43
|
storageId,
|
|
44
44
|
resourceType: (0, _milaboratories_pl_client.parseResourceType)(decodeURIComponent(encodedRType)),
|
|
45
|
-
resourceId: decodeURIComponent(encodedRId)
|
|
45
|
+
resourceId: (0, _milaboratories_pl_client.asSignedResourceId)(decodeURIComponent(encodedRId))
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls_storage_entry.cjs","names":[],"sources":["../../../src/drivers/helpers/ls_storage_entry.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { ResourceType, SignedResourceId, StorageInfo } from \"@milaboratories/pl-client\";\nimport {
|
|
1
|
+
{"version":3,"file":"ls_storage_entry.cjs","names":[],"sources":["../../../src/drivers/helpers/ls_storage_entry.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { ResourceType, SignedResourceId, StorageInfo } from \"@milaboratories/pl-client\";\nimport {\n resourceTypeToString,\n parseResourceType,\n asSignedResourceId,\n} from \"@milaboratories/pl-client\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\n\nexport type StorageHandleData = RemoteStorageHandleData | LocalStorageHandleData;\n\n/**\n * Gets a storage handle and gives an underlying data from it.\n */\nexport function parseStorageHandle(handle: sdk.StorageHandle): StorageHandleData {\n if (isRemoteStorageHandle(handle)) {\n return parseRemoteStorageHandle(handle);\n } else if (isLocalStorageHandle(handle)) {\n return parseLocalStorageHandle(handle);\n }\n\n assertNever(handle);\n}\n\n//\n// Local storage:\n//\n\nexport type LocalStorageHandleData = {\n isRemote: false;\n name: string;\n rootPath: string;\n};\n\nconst localHandleRegex = /^local:\\/\\/(?<name>.*)\\/(?<path>.*)$/;\n\nexport function isLocalStorageHandle(handle: sdk.StorageHandle): handle is sdk.StorageHandleLocal {\n return localHandleRegex.test(handle);\n}\n\nexport function createLocalStorageHandle(name: string, path: string): sdk.StorageHandleLocal {\n return `local://${name}/${encodeURIComponent(path)}`;\n}\n\nfunction parseLocalStorageHandle(handle: string): LocalStorageHandleData {\n const parsed = handle.match(localHandleRegex);\n if (parsed == null) throw new Error(`Local list handle wasn't parsed: ${handle}`);\n\n const { name, path } = parsed.groups!;\n\n return {\n isRemote: false,\n rootPath: decodeURIComponent(path),\n name,\n };\n}\n\n//\n// Remote storage:\n//\n\nexport type RemoteStorageHandleData = {\n isRemote: true;\n storageId: string;\n resourceType: ResourceType;\n resourceId: SignedResourceId;\n};\n\nconst remoteHandleRegex = /^remote:\\/\\/(?<storageId>.*)\\/(?<resourceType>.*)\\/(?<resourceId>.*)$/;\n\nexport function isRemoteStorageHandle(\n handle: sdk.StorageHandle,\n): handle is sdk.StorageHandleRemote {\n return remoteHandleRegex.test(handle);\n}\n\nexport function createRemoteStorageHandle(info: StorageInfo): sdk.StorageHandleRemote {\n return `remote://${info.storageId}/${encodeURIComponent(resourceTypeToString(info.resourceType))}/${encodeURIComponent(info.resourceId)}`;\n}\n\nfunction parseRemoteStorageHandle(handle: string): RemoteStorageHandleData {\n const parsed = handle.match(remoteHandleRegex);\n if (parsed == null) throw new Error(`Remote list handle wasn't parsed: ${handle}`);\n const { storageId, resourceType: encodedRType, resourceId: encodedRId } = parsed.groups!;\n\n const resourceType = parseResourceType(decodeURIComponent(encodedRType));\n const resourceId = asSignedResourceId(decodeURIComponent(encodedRId));\n return {\n isRemote: true,\n storageId,\n resourceType: resourceType,\n resourceId: resourceId,\n };\n}\n"],"mappings":";;;;;;;AAcA,SAAgB,mBAAmB,QAA8C;AAC/E,KAAI,sBAAsB,OAAO,CAC/B,QAAO,yBAAyB,OAAO;UAC9B,qBAAqB,OAAO,CACrC,QAAO,wBAAwB,OAAO;AAGxC,EAAA,GAAA,2BAAA,aAAY,OAAO;;AAarB,MAAM,mBAAmB;AAEzB,SAAgB,qBAAqB,QAA6D;AAChG,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,yBAAyB,MAAc,MAAsC;AAC3F,QAAO,WAAW,KAAK,GAAG,mBAAmB,KAAK;;AAGpD,SAAS,wBAAwB,QAAwC;CACvE,MAAM,SAAS,OAAO,MAAM,iBAAiB;AAC7C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,oCAAoC,SAAS;CAEjF,MAAM,EAAE,MAAM,SAAS,OAAO;AAE9B,QAAO;EACL,UAAU;EACV,UAAU,mBAAmB,KAAK;EAClC;EACD;;AAcH,MAAM,oBAAoB;AAE1B,SAAgB,sBACd,QACmC;AACnC,QAAO,kBAAkB,KAAK,OAAO;;AAGvC,SAAgB,0BAA0B,MAA4C;AACpF,QAAO,YAAY,KAAK,UAAU,GAAG,oBAAA,GAAA,0BAAA,sBAAwC,KAAK,aAAa,CAAC,CAAC,GAAG,mBAAmB,KAAK,WAAW;;AAGzI,SAAS,yBAAyB,QAAyC;CACzE,MAAM,SAAS,OAAO,MAAM,kBAAkB;AAC9C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,qCAAqC,SAAS;CAClF,MAAM,EAAE,WAAW,cAAc,cAAc,YAAY,eAAe,OAAO;AAIjF,QAAO;EACL,UAAU;EACV;EACA,eAAA,GAAA,0BAAA,mBALqC,mBAAmB,aAAa,CAAC;EAMtE,aAAA,GAAA,0BAAA,oBALoC,mBAAmB,WAAW,CAAC;EAMpE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseResourceType, resourceTypeToString } from "@milaboratories/pl-client";
|
|
1
|
+
import { asSignedResourceId, parseResourceType, resourceTypeToString } from "@milaboratories/pl-client";
|
|
2
2
|
import { assertNever } from "@milaboratories/ts-helpers";
|
|
3
3
|
//#region src/drivers/helpers/ls_storage_entry.ts
|
|
4
4
|
/**
|
|
@@ -41,7 +41,7 @@ function parseRemoteStorageHandle(handle) {
|
|
|
41
41
|
isRemote: true,
|
|
42
42
|
storageId,
|
|
43
43
|
resourceType: parseResourceType(decodeURIComponent(encodedRType)),
|
|
44
|
-
resourceId: decodeURIComponent(encodedRId)
|
|
44
|
+
resourceId: asSignedResourceId(decodeURIComponent(encodedRId))
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
47
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls_storage_entry.js","names":[],"sources":["../../../src/drivers/helpers/ls_storage_entry.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { ResourceType, SignedResourceId, StorageInfo } from \"@milaboratories/pl-client\";\nimport {
|
|
1
|
+
{"version":3,"file":"ls_storage_entry.js","names":[],"sources":["../../../src/drivers/helpers/ls_storage_entry.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { ResourceType, SignedResourceId, StorageInfo } from \"@milaboratories/pl-client\";\nimport {\n resourceTypeToString,\n parseResourceType,\n asSignedResourceId,\n} from \"@milaboratories/pl-client\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\n\nexport type StorageHandleData = RemoteStorageHandleData | LocalStorageHandleData;\n\n/**\n * Gets a storage handle and gives an underlying data from it.\n */\nexport function parseStorageHandle(handle: sdk.StorageHandle): StorageHandleData {\n if (isRemoteStorageHandle(handle)) {\n return parseRemoteStorageHandle(handle);\n } else if (isLocalStorageHandle(handle)) {\n return parseLocalStorageHandle(handle);\n }\n\n assertNever(handle);\n}\n\n//\n// Local storage:\n//\n\nexport type LocalStorageHandleData = {\n isRemote: false;\n name: string;\n rootPath: string;\n};\n\nconst localHandleRegex = /^local:\\/\\/(?<name>.*)\\/(?<path>.*)$/;\n\nexport function isLocalStorageHandle(handle: sdk.StorageHandle): handle is sdk.StorageHandleLocal {\n return localHandleRegex.test(handle);\n}\n\nexport function createLocalStorageHandle(name: string, path: string): sdk.StorageHandleLocal {\n return `local://${name}/${encodeURIComponent(path)}`;\n}\n\nfunction parseLocalStorageHandle(handle: string): LocalStorageHandleData {\n const parsed = handle.match(localHandleRegex);\n if (parsed == null) throw new Error(`Local list handle wasn't parsed: ${handle}`);\n\n const { name, path } = parsed.groups!;\n\n return {\n isRemote: false,\n rootPath: decodeURIComponent(path),\n name,\n };\n}\n\n//\n// Remote storage:\n//\n\nexport type RemoteStorageHandleData = {\n isRemote: true;\n storageId: string;\n resourceType: ResourceType;\n resourceId: SignedResourceId;\n};\n\nconst remoteHandleRegex = /^remote:\\/\\/(?<storageId>.*)\\/(?<resourceType>.*)\\/(?<resourceId>.*)$/;\n\nexport function isRemoteStorageHandle(\n handle: sdk.StorageHandle,\n): handle is sdk.StorageHandleRemote {\n return remoteHandleRegex.test(handle);\n}\n\nexport function createRemoteStorageHandle(info: StorageInfo): sdk.StorageHandleRemote {\n return `remote://${info.storageId}/${encodeURIComponent(resourceTypeToString(info.resourceType))}/${encodeURIComponent(info.resourceId)}`;\n}\n\nfunction parseRemoteStorageHandle(handle: string): RemoteStorageHandleData {\n const parsed = handle.match(remoteHandleRegex);\n if (parsed == null) throw new Error(`Remote list handle wasn't parsed: ${handle}`);\n const { storageId, resourceType: encodedRType, resourceId: encodedRId } = parsed.groups!;\n\n const resourceType = parseResourceType(decodeURIComponent(encodedRType));\n const resourceId = asSignedResourceId(decodeURIComponent(encodedRId));\n return {\n isRemote: true,\n storageId,\n resourceType: resourceType,\n resourceId: resourceId,\n };\n}\n"],"mappings":";;;;;;AAcA,SAAgB,mBAAmB,QAA8C;AAC/E,KAAI,sBAAsB,OAAO,CAC/B,QAAO,yBAAyB,OAAO;UAC9B,qBAAqB,OAAO,CACrC,QAAO,wBAAwB,OAAO;AAGxC,aAAY,OAAO;;AAarB,MAAM,mBAAmB;AAEzB,SAAgB,qBAAqB,QAA6D;AAChG,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,yBAAyB,MAAc,MAAsC;AAC3F,QAAO,WAAW,KAAK,GAAG,mBAAmB,KAAK;;AAGpD,SAAS,wBAAwB,QAAwC;CACvE,MAAM,SAAS,OAAO,MAAM,iBAAiB;AAC7C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,oCAAoC,SAAS;CAEjF,MAAM,EAAE,MAAM,SAAS,OAAO;AAE9B,QAAO;EACL,UAAU;EACV,UAAU,mBAAmB,KAAK;EAClC;EACD;;AAcH,MAAM,oBAAoB;AAE1B,SAAgB,sBACd,QACmC;AACnC,QAAO,kBAAkB,KAAK,OAAO;;AAGvC,SAAgB,0BAA0B,MAA4C;AACpF,QAAO,YAAY,KAAK,UAAU,GAAG,mBAAmB,qBAAqB,KAAK,aAAa,CAAC,CAAC,GAAG,mBAAmB,KAAK,WAAW;;AAGzI,SAAS,yBAAyB,QAAyC;CACzE,MAAM,SAAS,OAAO,MAAM,kBAAkB;AAC9C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,qCAAqC,SAAS;CAClF,MAAM,EAAE,WAAW,cAAc,cAAc,YAAY,eAAe,OAAO;AAIjF,QAAO;EACL,UAAU;EACV;EACA,cALmB,kBAAkB,mBAAmB,aAAa,CAAC;EAMtE,YALiB,mBAAmB,mBAAmB,WAAW,CAAC;EAMpE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pl-drivers",
|
|
3
|
-
"version": "1.14.
|
|
3
|
+
"version": "1.14.9",
|
|
4
4
|
"description": "Drivers and a low-level clients for log streaming, downloading and uploading files from and to pl",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/**/*",
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
"tar-fs": "^3.0.9",
|
|
29
29
|
"undici": "~7.16.0",
|
|
30
30
|
"zod": "~3.25.76",
|
|
31
|
-
"@milaboratories/
|
|
31
|
+
"@milaboratories/computable": "2.9.4",
|
|
32
|
+
"@milaboratories/helpers": "1.14.2",
|
|
32
33
|
"@milaboratories/pl-model-common": "1.42.0",
|
|
34
|
+
"@milaboratories/pl-client": "3.7.0",
|
|
33
35
|
"@milaboratories/ts-helpers": "1.8.2",
|
|
34
|
-
"@milaboratories/
|
|
35
|
-
"@milaboratories/pl-tree": "1.11.0",
|
|
36
|
-
"@milaboratories/computable": "2.9.4"
|
|
36
|
+
"@milaboratories/pl-tree": "1.11.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/decompress": "^4.2.7",
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
"openapi-typescript": "^7.10.0",
|
|
44
44
|
"typescript": "~5.9.3",
|
|
45
45
|
"vitest": "^4.1.3",
|
|
46
|
-
"@milaboratories/build-configs": "2.0.0",
|
|
47
|
-
"@milaboratories/ts-builder": "1.4.0",
|
|
48
46
|
"@milaboratories/test-helpers": "1.2.2",
|
|
49
|
-
"@milaboratories/
|
|
47
|
+
"@milaboratories/build-configs": "2.0.0",
|
|
48
|
+
"@milaboratories/ts-configs": "1.2.3",
|
|
49
|
+
"@milaboratories/ts-builder": "1.5.0"
|
|
50
50
|
},
|
|
51
51
|
"engines": {
|
|
52
52
|
"node": ">=22"
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type * as sdk from "@milaboratories/pl-model-common";
|
|
2
2
|
import type { ResourceType, SignedResourceId, StorageInfo } from "@milaboratories/pl-client";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
resourceTypeToString,
|
|
5
|
+
parseResourceType,
|
|
6
|
+
asSignedResourceId,
|
|
7
|
+
} from "@milaboratories/pl-client";
|
|
4
8
|
import { assertNever } from "@milaboratories/ts-helpers";
|
|
5
9
|
|
|
6
10
|
export type StorageHandleData = RemoteStorageHandleData | LocalStorageHandleData;
|
|
@@ -80,7 +84,7 @@ function parseRemoteStorageHandle(handle: string): RemoteStorageHandleData {
|
|
|
80
84
|
const { storageId, resourceType: encodedRType, resourceId: encodedRId } = parsed.groups!;
|
|
81
85
|
|
|
82
86
|
const resourceType = parseResourceType(decodeURIComponent(encodedRType));
|
|
83
|
-
const resourceId = decodeURIComponent(encodedRId)
|
|
87
|
+
const resourceId = asSignedResourceId(decodeURIComponent(encodedRId));
|
|
84
88
|
return {
|
|
85
89
|
isRemote: true,
|
|
86
90
|
storageId,
|
|
@@ -184,23 +184,21 @@ test("upload lots of duplicate blobs concurrently", async () => {
|
|
|
184
184
|
const handles = await Promise.all(uploadIds.map((id) => getSnapshot(client, id)));
|
|
185
185
|
const computables = handles.map((handle) => uploader.getProgressId(handle));
|
|
186
186
|
|
|
187
|
-
|
|
187
|
+
const waitDone = async (c: (typeof computables)[number]) => {
|
|
188
188
|
while (true) {
|
|
189
189
|
const p = await c.getValue();
|
|
190
|
-
|
|
191
|
-
if (p.done) {
|
|
192
|
-
expect(p.isUploadSignMatch).toBeTruthy();
|
|
193
|
-
expect(p.lastError).toBeUndefined();
|
|
194
|
-
expect(p.status?.bytesProcessed).toBe(25);
|
|
195
|
-
expect(p.status?.bytesTotal).toBe(25);
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
|
|
190
|
+
if (p.done) return p;
|
|
199
191
|
await c.awaitChange();
|
|
200
192
|
}
|
|
201
|
-
}
|
|
193
|
+
};
|
|
202
194
|
|
|
203
|
-
await
|
|
195
|
+
const p = await Promise.race(computables.map(waitDone));
|
|
196
|
+
expect(p.isUploadSignMatch).toBeTruthy();
|
|
197
|
+
expect(p.lastError).toBeUndefined();
|
|
198
|
+
expect(p.status?.bytesProcessed).toBe(25);
|
|
199
|
+
expect(p.status?.bytesTotal).toBe(25);
|
|
200
|
+
|
|
201
|
+
// await uploader.releaseAll();
|
|
204
202
|
});
|
|
205
203
|
});
|
|
206
204
|
|