@crawlee/memory-storage 3.0.0-alpha.34
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.md +201 -0
- package/README.md +214 -0
- package/body-parser.d.ts +13 -0
- package/body-parser.d.ts.map +1 -0
- package/body-parser.js +65 -0
- package/body-parser.js.map +1 -0
- package/consts.d.ts +17 -0
- package/consts.d.ts.map +1 -0
- package/consts.js +22 -0
- package/consts.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.d.ts.map +1 -0
- package/index.js +5 -0
- package/index.js.map +1 -0
- package/index.mjs +4 -0
- package/memory-storage.d.ts +29 -0
- package/memory-storage.d.ts.map +1 -0
- package/memory-storage.js +102 -0
- package/memory-storage.js.map +1 -0
- package/package.json +60 -0
- package/resource-clients/common/base-client.d.ts +8 -0
- package/resource-clients/common/base-client.d.ts.map +1 -0
- package/resource-clients/common/base-client.js +22 -0
- package/resource-clients/common/base-client.js.map +1 -0
- package/resource-clients/dataset-collection.d.ts +14 -0
- package/resource-clients/dataset-collection.d.ts.map +1 -0
- package/resource-clients/dataset-collection.js +60 -0
- package/resource-clients/dataset-collection.js.map +1 -0
- package/resource-clients/dataset.d.ts +42 -0
- package/resource-clients/dataset.d.ts.map +1 -0
- package/resource-clients/dataset.js +235 -0
- package/resource-clients/dataset.js.map +1 -0
- package/resource-clients/key-value-store-collection.d.ts +14 -0
- package/resource-clients/key-value-store-collection.d.ts.map +1 -0
- package/resource-clients/key-value-store-collection.js +60 -0
- package/resource-clients/key-value-store-collection.js.map +1 -0
- package/resource-clients/key-value-store.d.ts +36 -0
- package/resource-clients/key-value-store.d.ts.map +1 -0
- package/resource-clients/key-value-store.js +300 -0
- package/resource-clients/key-value-store.js.map +1 -0
- package/resource-clients/request-queue-collection.d.ts +14 -0
- package/resource-clients/request-queue-collection.d.ts.map +1 -0
- package/resource-clients/request-queue-collection.js +60 -0
- package/resource-clients/request-queue-collection.js.map +1 -0
- package/resource-clients/request-queue.d.ts +48 -0
- package/resource-clients/request-queue.d.ts.map +1 -0
- package/resource-clients/request-queue.js +353 -0
- package/resource-clients/request-queue.js.map +1 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/utils.d.ts +44 -0
- package/utils.d.ts.map +1 -0
- package/utils.js +59 -0
- package/utils.js.map +1 -0
- package/workers/file-storage-worker-emulator.d.ts +5 -0
- package/workers/file-storage-worker-emulator.d.ts.map +1 -0
- package/workers/file-storage-worker-emulator.js +12 -0
- package/workers/file-storage-worker-emulator.js.map +1 -0
- package/workers/file-storage-worker.d.ts +2 -0
- package/workers/file-storage-worker.d.ts.map +1 -0
- package/workers/file-storage-worker.js +15 -0
- package/workers/file-storage-worker.js.map +1 -0
- package/workers/instance.d.ts +4 -0
- package/workers/instance.d.ts.map +1 -0
- package/workers/instance.js +35 -0
- package/workers/instance.js.map +1 -0
- package/workers/worker-utils.d.ts +9 -0
- package/workers/worker-utils.d.ts.map +1 -0
- package/workers/worker-utils.js +79 -0
- package/workers/worker-utils.js.map +1 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyValueStoreCollectionClient = void 0;
|
|
4
|
+
const shapeshift_1 = require("@sapphire/shapeshift");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const instance_1 = require("../workers/instance");
|
|
7
|
+
const key_value_store_1 = require("./key-value-store");
|
|
8
|
+
class KeyValueStoreCollectionClient {
|
|
9
|
+
constructor({ baseStorageDirectory, client }) {
|
|
10
|
+
Object.defineProperty(this, "keyValueStoresDirectory", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: void 0
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(this, "client", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: void 0
|
|
21
|
+
});
|
|
22
|
+
this.keyValueStoresDirectory = (0, node_path_1.resolve)(baseStorageDirectory);
|
|
23
|
+
this.client = client;
|
|
24
|
+
}
|
|
25
|
+
async list() {
|
|
26
|
+
return {
|
|
27
|
+
total: this.client.keyValueStoresHandled.length,
|
|
28
|
+
count: this.client.keyValueStoresHandled.length,
|
|
29
|
+
offset: 0,
|
|
30
|
+
limit: this.client.keyValueStoresHandled.length,
|
|
31
|
+
desc: false,
|
|
32
|
+
items: this.client.keyValueStoresHandled.map((store) => store.toKeyValueStoreInfo())
|
|
33
|
+
.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime()),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async getOrCreate(name) {
|
|
37
|
+
shapeshift_1.s.string.optional.parse(name);
|
|
38
|
+
if (name) {
|
|
39
|
+
const found = this.client.keyValueStoresHandled.find((store) => store.name === name);
|
|
40
|
+
if (found) {
|
|
41
|
+
return found.toKeyValueStoreInfo();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const newStore = new key_value_store_1.KeyValueStoreClient({ name, baseStorageDirectory: this.keyValueStoresDirectory, client: this.client });
|
|
45
|
+
this.client.keyValueStoresHandled.push(newStore);
|
|
46
|
+
// Schedule the worker to write to the disk
|
|
47
|
+
const kvStoreInfo = newStore.toKeyValueStoreInfo();
|
|
48
|
+
// eslint-disable-next-line dot-notation
|
|
49
|
+
(0, instance_1.sendWorkerMessage)({
|
|
50
|
+
action: 'update-metadata',
|
|
51
|
+
entityType: 'keyValueStores',
|
|
52
|
+
entityDirectory: newStore.keyValueStoreDirectory,
|
|
53
|
+
id: kvStoreInfo.name ?? kvStoreInfo.id,
|
|
54
|
+
data: kvStoreInfo,
|
|
55
|
+
});
|
|
56
|
+
return kvStoreInfo;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.KeyValueStoreCollectionClient = KeyValueStoreCollectionClient;
|
|
60
|
+
//# sourceMappingURL=key-value-store-collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-value-store-collection.js","sourceRoot":"","sources":["../../src/resource-clients/key-value-store-collection.ts"],"names":[],"mappings":";;;AACA,qDAAyC;AACzC,yCAAoC;AAEpC,kDAAwD;AACxD,uDAAwD;AAOxD,MAAa,6BAA6B;IAItC,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAwC;QAHlF;;;;;WAAiD;QACjD;;;;;WAAuC;QAGnC,IAAI,CAAC,uBAAuB,GAAG,IAAA,mBAAO,EAAC,oBAAoB,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI;QACN,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM;YAC/C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM;YAC/C,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM;YAC/C,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CACxC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;iBACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;SACrE,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAa;QAC3B,cAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,IAAI,EAAE;YACN,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAErF,IAAI,KAAK,EAAE;gBACP,OAAO,KAAK,CAAC,mBAAmB,EAAE,CAAC;aACtC;SACJ;QAED,MAAM,QAAQ,GAAG,IAAI,qCAAmB,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5H,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEjD,2CAA2C;QAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACnD,wCAAwC;QACxC,IAAA,4BAAiB,EAAC;YACd,MAAM,EAAE,iBAAiB;YACzB,UAAU,EAAE,gBAAgB;YAC5B,eAAe,EAAE,QAAQ,CAAC,sBAAsB;YAChD,EAAE,EAAE,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,EAAE;YACtC,IAAI,EAAE,WAAW;SACpB,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACvB,CAAC;CACJ;AAjDD,sEAiDC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type * as storage from '@crawlee/types';
|
|
3
|
+
import { MemoryStorage } from '../index';
|
|
4
|
+
import { BaseClient } from './common/base-client';
|
|
5
|
+
export interface KeyValueStoreClientOptions {
|
|
6
|
+
name?: string;
|
|
7
|
+
id?: string;
|
|
8
|
+
baseStorageDirectory: string;
|
|
9
|
+
client: MemoryStorage;
|
|
10
|
+
}
|
|
11
|
+
export interface InternalKeyRecord {
|
|
12
|
+
key: string;
|
|
13
|
+
value: Buffer | string;
|
|
14
|
+
contentType?: string;
|
|
15
|
+
extension: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class KeyValueStoreClient extends BaseClient {
|
|
18
|
+
name?: string;
|
|
19
|
+
createdAt: Date;
|
|
20
|
+
accessedAt: Date;
|
|
21
|
+
modifiedAt: Date;
|
|
22
|
+
keyValueStoreDirectory: string;
|
|
23
|
+
private readonly keyValueEntries;
|
|
24
|
+
private readonly client;
|
|
25
|
+
constructor(options: KeyValueStoreClientOptions);
|
|
26
|
+
get(): Promise<storage.KeyValueStoreInfo | undefined>;
|
|
27
|
+
update(newFields?: storage.KeyValueStoreClientUpdateOptions): Promise<storage.KeyValueStoreInfo>;
|
|
28
|
+
delete(): Promise<void>;
|
|
29
|
+
listKeys(options?: storage.KeyValueStoreClientListOptions): Promise<storage.KeyValueStoreClientListData>;
|
|
30
|
+
getRecord(key: string, options?: storage.KeyValueStoreClientGetRecordOptions): Promise<storage.KeyValueStoreRecord | undefined>;
|
|
31
|
+
setRecord(record: storage.KeyValueStoreRecord): Promise<void>;
|
|
32
|
+
deleteRecord(key: string): Promise<void>;
|
|
33
|
+
toKeyValueStoreInfo(): storage.KeyValueStoreInfo;
|
|
34
|
+
private updateTimestamps;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=key-value-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-value-store.d.ts","sourceRoot":"","sources":["../../src/resource-clients/key-value-store.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAQ/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKlD,MAAM,WAAW,0BAA0B;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAoB,SAAQ,UAAU;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,OAAc;IACvB,UAAU,OAAc;IACxB,UAAU,OAAc;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwC;IACxE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,OAAO,EAAE,0BAA0B;IAOzC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAWrD,MAAM,CAAC,SAAS,GAAE,OAAO,CAAC,gCAAqC,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAsCpG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAWvB,QAAQ,CAAC,OAAO,GAAE,OAAO,CAAC,8BAAmC,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC;IA2D5G,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC,mCAAwC,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IA0CnI,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsE7D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B9C,mBAAmB,IAAI,OAAO,CAAC,iBAAiB;IAWhD,OAAO,CAAC,gBAAgB;CAgB3B"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyValueStoreClient = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const shapeshift_1 = require("@sapphire/shapeshift");
|
|
6
|
+
const mime_types_1 = tslib_1.__importDefault(require("mime-types"));
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
const node_stream_1 = require("node:stream");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const promises_1 = require("node:fs/promises");
|
|
11
|
+
const fs_extra_1 = require("fs-extra");
|
|
12
|
+
const body_parser_1 = require("../body-parser");
|
|
13
|
+
const consts_1 = require("../consts");
|
|
14
|
+
const utils_1 = require("../utils");
|
|
15
|
+
const base_client_1 = require("./common/base-client");
|
|
16
|
+
const instance_1 = require("../workers/instance");
|
|
17
|
+
const DEFAULT_LOCAL_FILE_EXTENSION = 'bin';
|
|
18
|
+
class KeyValueStoreClient extends base_client_1.BaseClient {
|
|
19
|
+
constructor(options) {
|
|
20
|
+
super(options.id ?? (0, node_crypto_1.randomUUID)());
|
|
21
|
+
Object.defineProperty(this, "name", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
configurable: true,
|
|
24
|
+
writable: true,
|
|
25
|
+
value: void 0
|
|
26
|
+
});
|
|
27
|
+
Object.defineProperty(this, "createdAt", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: new Date()
|
|
32
|
+
});
|
|
33
|
+
Object.defineProperty(this, "accessedAt", {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
writable: true,
|
|
37
|
+
value: new Date()
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(this, "modifiedAt", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true,
|
|
43
|
+
value: new Date()
|
|
44
|
+
});
|
|
45
|
+
Object.defineProperty(this, "keyValueStoreDirectory", {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
configurable: true,
|
|
48
|
+
writable: true,
|
|
49
|
+
value: void 0
|
|
50
|
+
});
|
|
51
|
+
Object.defineProperty(this, "keyValueEntries", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
configurable: true,
|
|
54
|
+
writable: true,
|
|
55
|
+
value: new Map()
|
|
56
|
+
});
|
|
57
|
+
Object.defineProperty(this, "client", {
|
|
58
|
+
enumerable: true,
|
|
59
|
+
configurable: true,
|
|
60
|
+
writable: true,
|
|
61
|
+
value: void 0
|
|
62
|
+
});
|
|
63
|
+
this.name = options.name;
|
|
64
|
+
this.keyValueStoreDirectory = (0, node_path_1.resolve)(options.baseStorageDirectory, this.name ?? this.id);
|
|
65
|
+
this.client = options.client;
|
|
66
|
+
}
|
|
67
|
+
async get() {
|
|
68
|
+
const found = this.client.keyValueStoresHandled.find((store) => store.id === this.id);
|
|
69
|
+
if (found) {
|
|
70
|
+
found.updateTimestamps(false);
|
|
71
|
+
return found.toKeyValueStoreInfo();
|
|
72
|
+
}
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
async update(newFields = {}) {
|
|
76
|
+
const parsed = shapeshift_1.s.object({
|
|
77
|
+
name: shapeshift_1.s.string.lengthGreaterThan(0).optional,
|
|
78
|
+
}).parse(newFields);
|
|
79
|
+
// Check by id
|
|
80
|
+
const existingStoreById = this.client.keyValueStoresHandled.find((store) => store.id === this.id);
|
|
81
|
+
if (!existingStoreById) {
|
|
82
|
+
this.throwOnNonExisting(consts_1.StorageTypes.KeyValueStore);
|
|
83
|
+
}
|
|
84
|
+
// Skip if no changes
|
|
85
|
+
if (!parsed.name) {
|
|
86
|
+
return existingStoreById.toKeyValueStoreInfo();
|
|
87
|
+
}
|
|
88
|
+
// Check that name is not in use already
|
|
89
|
+
const existingStoreByName = this.client.keyValueStoresHandled.find((store) => store.name?.toLowerCase() === parsed.name.toLowerCase());
|
|
90
|
+
if (existingStoreByName) {
|
|
91
|
+
this.throwOnDuplicateEntry(consts_1.StorageTypes.KeyValueStore, 'name', parsed.name);
|
|
92
|
+
}
|
|
93
|
+
existingStoreById.name = parsed.name;
|
|
94
|
+
const previousDir = existingStoreById.keyValueStoreDirectory;
|
|
95
|
+
existingStoreById.keyValueStoreDirectory = (0, node_path_1.resolve)(this.client.keyValueStoresDirectory, parsed.name ?? existingStoreById.name ?? existingStoreById.id);
|
|
96
|
+
await (0, fs_extra_1.move)(previousDir, existingStoreById.keyValueStoreDirectory, { overwrite: true });
|
|
97
|
+
// Update timestamps
|
|
98
|
+
existingStoreById.updateTimestamps(true);
|
|
99
|
+
return existingStoreById.toKeyValueStoreInfo();
|
|
100
|
+
}
|
|
101
|
+
async delete() {
|
|
102
|
+
const storeIndex = this.client.keyValueStoresHandled.findIndex((store) => store.id === this.id);
|
|
103
|
+
if (storeIndex !== -1) {
|
|
104
|
+
const [oldClient] = this.client.keyValueStoresHandled.splice(storeIndex, 1);
|
|
105
|
+
oldClient.keyValueEntries.clear();
|
|
106
|
+
await (0, promises_1.rm)(oldClient.keyValueStoreDirectory, { recursive: true });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async listKeys(options = {}) {
|
|
110
|
+
const { limit = consts_1.DEFAULT_API_PARAM_LIMIT, exclusiveStartKey, } = shapeshift_1.s.object({
|
|
111
|
+
limit: shapeshift_1.s.number.greaterThan(0).optional,
|
|
112
|
+
exclusiveStartKey: shapeshift_1.s.string.optional,
|
|
113
|
+
}).parse(options);
|
|
114
|
+
// Check by id
|
|
115
|
+
const existingStoreById = this.client.keyValueStoresHandled.find((store) => store.id === this.id);
|
|
116
|
+
if (!existingStoreById) {
|
|
117
|
+
this.throwOnNonExisting(consts_1.StorageTypes.KeyValueStore);
|
|
118
|
+
}
|
|
119
|
+
const items = [];
|
|
120
|
+
for (const record of existingStoreById.keyValueEntries.values()) {
|
|
121
|
+
const size = Buffer.byteLength(record.value);
|
|
122
|
+
items.push({
|
|
123
|
+
key: record.key,
|
|
124
|
+
size,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
// Lexically sort to emulate API.
|
|
128
|
+
// TODO(vladfrangu): ensure the sorting works the same way as before (if it matters)
|
|
129
|
+
items.sort((a, b) => {
|
|
130
|
+
return a.key.localeCompare(b.key);
|
|
131
|
+
});
|
|
132
|
+
let truncatedItems = items;
|
|
133
|
+
if (exclusiveStartKey) {
|
|
134
|
+
const keyPos = items.findIndex((item) => item.key === exclusiveStartKey);
|
|
135
|
+
if (keyPos !== -1)
|
|
136
|
+
truncatedItems = items.slice(keyPos + 1);
|
|
137
|
+
}
|
|
138
|
+
const limitedItems = truncatedItems.slice(0, limit);
|
|
139
|
+
const lastItemInStore = items[items.length - 1];
|
|
140
|
+
const lastSelectedItem = limitedItems[limitedItems.length - 1];
|
|
141
|
+
const isLastSelectedItemAbsolutelyLast = lastItemInStore === lastSelectedItem;
|
|
142
|
+
const nextExclusiveStartKey = isLastSelectedItemAbsolutelyLast
|
|
143
|
+
? undefined
|
|
144
|
+
: lastSelectedItem.key;
|
|
145
|
+
existingStoreById.updateTimestamps(false);
|
|
146
|
+
return {
|
|
147
|
+
count: items.length,
|
|
148
|
+
limit,
|
|
149
|
+
exclusiveStartKey,
|
|
150
|
+
isTruncated: !isLastSelectedItemAbsolutelyLast,
|
|
151
|
+
nextExclusiveStartKey,
|
|
152
|
+
items: limitedItems,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
async getRecord(key, options = {}) {
|
|
156
|
+
shapeshift_1.s.string.parse(key);
|
|
157
|
+
shapeshift_1.s.object({
|
|
158
|
+
buffer: shapeshift_1.s.boolean.optional,
|
|
159
|
+
// These options are ignored, but kept here
|
|
160
|
+
// for validation consistency with API client.
|
|
161
|
+
stream: shapeshift_1.s.boolean.optional,
|
|
162
|
+
disableRedirect: shapeshift_1.s.boolean.optional,
|
|
163
|
+
}).parse(options);
|
|
164
|
+
// Check by id
|
|
165
|
+
const existingStoreById = this.client.keyValueStoresHandled.find((store) => store.id === this.id);
|
|
166
|
+
if (!existingStoreById) {
|
|
167
|
+
this.throwOnNonExisting(consts_1.StorageTypes.KeyValueStore);
|
|
168
|
+
}
|
|
169
|
+
const entry = existingStoreById.keyValueEntries.get(key);
|
|
170
|
+
if (!entry) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
const record = {
|
|
174
|
+
key: entry.key,
|
|
175
|
+
value: entry.value,
|
|
176
|
+
contentType: entry.contentType ?? mime_types_1.default.contentType(entry.extension),
|
|
177
|
+
};
|
|
178
|
+
if (options.stream) {
|
|
179
|
+
record.value = node_stream_1.Readable.from(record.value);
|
|
180
|
+
}
|
|
181
|
+
else if (options.buffer) {
|
|
182
|
+
record.value = Buffer.from(record.value);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
record.value = (0, body_parser_1.maybeParseBody)(record.value, record.contentType);
|
|
186
|
+
}
|
|
187
|
+
existingStoreById.updateTimestamps(false);
|
|
188
|
+
return record;
|
|
189
|
+
}
|
|
190
|
+
async setRecord(record) {
|
|
191
|
+
shapeshift_1.s.object({
|
|
192
|
+
key: shapeshift_1.s.string.lengthGreaterThan(0),
|
|
193
|
+
value: shapeshift_1.s.union(shapeshift_1.s.null, shapeshift_1.s.string, shapeshift_1.s.number, shapeshift_1.s.object({}).passthrough),
|
|
194
|
+
contentType: shapeshift_1.s.string.lengthGreaterThan(0).optional,
|
|
195
|
+
}).parse(record);
|
|
196
|
+
// Check by id
|
|
197
|
+
const existingStoreById = this.client.keyValueStoresHandled.find((store) => store.id === this.id);
|
|
198
|
+
if (!existingStoreById) {
|
|
199
|
+
this.throwOnNonExisting(consts_1.StorageTypes.KeyValueStore);
|
|
200
|
+
}
|
|
201
|
+
const { key } = record;
|
|
202
|
+
let { value, contentType } = record;
|
|
203
|
+
const valueIsStream = (0, utils_1.isStream)(value);
|
|
204
|
+
const isValueStreamOrBuffer = valueIsStream || (0, utils_1.isBuffer)(value);
|
|
205
|
+
// To allow saving Objects to JSON without providing content type
|
|
206
|
+
if (!contentType) {
|
|
207
|
+
if (isValueStreamOrBuffer)
|
|
208
|
+
contentType = 'application/octet-stream';
|
|
209
|
+
else if (typeof value === 'string')
|
|
210
|
+
contentType = 'text/plain; charset=utf-8';
|
|
211
|
+
else
|
|
212
|
+
contentType = 'application/json; charset=utf-8';
|
|
213
|
+
}
|
|
214
|
+
const extension = mime_types_1.default.extension(contentType) || DEFAULT_LOCAL_FILE_EXTENSION;
|
|
215
|
+
const isContentTypeJson = extension === 'json';
|
|
216
|
+
if (isContentTypeJson && !isValueStreamOrBuffer && typeof value !== 'string') {
|
|
217
|
+
try {
|
|
218
|
+
value = JSON.stringify(value, null, 2);
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
const msg = `The record value cannot be stringified to JSON. Please provide other content type.\nCause: ${err.message}`;
|
|
222
|
+
throw new Error(msg);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (valueIsStream) {
|
|
226
|
+
const chunks = [];
|
|
227
|
+
for await (const chunk of value) {
|
|
228
|
+
chunks.push(chunk);
|
|
229
|
+
}
|
|
230
|
+
value = Buffer.concat(chunks);
|
|
231
|
+
}
|
|
232
|
+
const entry = {
|
|
233
|
+
extension,
|
|
234
|
+
key,
|
|
235
|
+
value,
|
|
236
|
+
contentType,
|
|
237
|
+
};
|
|
238
|
+
existingStoreById.keyValueEntries.set(key, entry);
|
|
239
|
+
existingStoreById.updateTimestamps(true);
|
|
240
|
+
(0, instance_1.sendWorkerMessage)({
|
|
241
|
+
action: 'update-entries',
|
|
242
|
+
data: {
|
|
243
|
+
action: 'set',
|
|
244
|
+
record: entry,
|
|
245
|
+
},
|
|
246
|
+
entityType: 'keyValueStores',
|
|
247
|
+
entityDirectory: existingStoreById.keyValueStoreDirectory,
|
|
248
|
+
id: existingStoreById.name ?? existingStoreById.id,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
async deleteRecord(key) {
|
|
252
|
+
shapeshift_1.s.string.parse(key);
|
|
253
|
+
// Check by id
|
|
254
|
+
const existingStoreById = this.client.keyValueStoresHandled.find((store) => store.id === this.id);
|
|
255
|
+
if (!existingStoreById) {
|
|
256
|
+
this.throwOnNonExisting(consts_1.StorageTypes.KeyValueStore);
|
|
257
|
+
}
|
|
258
|
+
const entry = existingStoreById.keyValueEntries.get(key);
|
|
259
|
+
if (entry) {
|
|
260
|
+
existingStoreById.keyValueEntries.delete(key);
|
|
261
|
+
existingStoreById.updateTimestamps(true);
|
|
262
|
+
(0, instance_1.sendWorkerMessage)({
|
|
263
|
+
action: 'update-entries',
|
|
264
|
+
data: {
|
|
265
|
+
action: 'delete',
|
|
266
|
+
record: entry,
|
|
267
|
+
},
|
|
268
|
+
entityType: 'keyValueStores',
|
|
269
|
+
entityDirectory: existingStoreById.keyValueStoreDirectory,
|
|
270
|
+
id: existingStoreById.name ?? existingStoreById.id,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
toKeyValueStoreInfo() {
|
|
275
|
+
return {
|
|
276
|
+
id: this.id,
|
|
277
|
+
name: this.name,
|
|
278
|
+
accessedAt: this.accessedAt,
|
|
279
|
+
createdAt: this.createdAt,
|
|
280
|
+
modifiedAt: this.modifiedAt,
|
|
281
|
+
userId: '1',
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
updateTimestamps(hasBeenModified) {
|
|
285
|
+
this.accessedAt = new Date();
|
|
286
|
+
if (hasBeenModified) {
|
|
287
|
+
this.modifiedAt = new Date();
|
|
288
|
+
}
|
|
289
|
+
const data = this.toKeyValueStoreInfo();
|
|
290
|
+
(0, instance_1.sendWorkerMessage)({
|
|
291
|
+
action: 'update-metadata',
|
|
292
|
+
data,
|
|
293
|
+
entityType: 'keyValueStores',
|
|
294
|
+
entityDirectory: this.keyValueStoreDirectory,
|
|
295
|
+
id: this.name ?? this.id,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
exports.KeyValueStoreClient = KeyValueStoreClient;
|
|
300
|
+
//# sourceMappingURL=key-value-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-value-store.js","sourceRoot":"","sources":["../../src/resource-clients/key-value-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type * as storage from '@crawlee/types';
|
|
2
|
+
import { MemoryStorage } from '../index';
|
|
3
|
+
export interface RequestQueueCollectionClientOptions {
|
|
4
|
+
baseStorageDirectory: string;
|
|
5
|
+
client: MemoryStorage;
|
|
6
|
+
}
|
|
7
|
+
export declare class RequestQueueCollectionClient implements storage.RequestQueueCollectionClient {
|
|
8
|
+
private readonly requestQueuesDirectory;
|
|
9
|
+
private readonly client;
|
|
10
|
+
constructor({ baseStorageDirectory, client }: RequestQueueCollectionClientOptions);
|
|
11
|
+
list(): ReturnType<storage.RequestQueueCollectionClient['list']>;
|
|
12
|
+
getOrCreate(name?: string): Promise<storage.RequestQueueInfo>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=request-queue-collection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-queue-collection.d.ts","sourceRoot":"","sources":["../../src/resource-clients/request-queue-collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,MAAM,WAAW,mCAAmC;IAChD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;CACzB;AAED,qBAAa,4BAA6B,YAAW,OAAO,CAAC,4BAA4B;IACrF,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,EAAE,oBAAoB,EAAE,MAAM,EAAE,EAAE,mCAAmC;IAK3E,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAahE,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;CA2BtE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestQueueCollectionClient = void 0;
|
|
4
|
+
const shapeshift_1 = require("@sapphire/shapeshift");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const instance_1 = require("../workers/instance");
|
|
7
|
+
const request_queue_1 = require("./request-queue");
|
|
8
|
+
class RequestQueueCollectionClient {
|
|
9
|
+
constructor({ baseStorageDirectory, client }) {
|
|
10
|
+
Object.defineProperty(this, "requestQueuesDirectory", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: void 0
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(this, "client", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: void 0
|
|
21
|
+
});
|
|
22
|
+
this.requestQueuesDirectory = (0, node_path_1.resolve)(baseStorageDirectory);
|
|
23
|
+
this.client = client;
|
|
24
|
+
}
|
|
25
|
+
async list() {
|
|
26
|
+
return {
|
|
27
|
+
total: this.client.requestQueuesHandled.length,
|
|
28
|
+
count: this.client.requestQueuesHandled.length,
|
|
29
|
+
offset: 0,
|
|
30
|
+
limit: this.client.requestQueuesHandled.length,
|
|
31
|
+
desc: false,
|
|
32
|
+
items: this.client.requestQueuesHandled.map((store) => store.toRequestQueueInfo())
|
|
33
|
+
.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime()),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async getOrCreate(name) {
|
|
37
|
+
shapeshift_1.s.string.optional.parse(name);
|
|
38
|
+
if (name) {
|
|
39
|
+
const found = this.client.requestQueuesHandled.find((store) => store.name === name);
|
|
40
|
+
if (found) {
|
|
41
|
+
return found.toRequestQueueInfo();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const newStore = new request_queue_1.RequestQueueClient({ name, baseStorageDirectory: this.requestQueuesDirectory, client: this.client });
|
|
45
|
+
this.client.requestQueuesHandled.push(newStore);
|
|
46
|
+
// Schedule the worker to write to the disk
|
|
47
|
+
const queueInfo = newStore.toRequestQueueInfo();
|
|
48
|
+
// eslint-disable-next-line dot-notation
|
|
49
|
+
(0, instance_1.sendWorkerMessage)({
|
|
50
|
+
action: 'update-metadata',
|
|
51
|
+
entityType: 'requestQueues',
|
|
52
|
+
entityDirectory: newStore.requestQueueDirectory,
|
|
53
|
+
id: queueInfo.name ?? queueInfo.id,
|
|
54
|
+
data: queueInfo,
|
|
55
|
+
});
|
|
56
|
+
return queueInfo;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.RequestQueueCollectionClient = RequestQueueCollectionClient;
|
|
60
|
+
//# sourceMappingURL=request-queue-collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-queue-collection.js","sourceRoot":"","sources":["../../src/resource-clients/request-queue-collection.ts"],"names":[],"mappings":";;;AACA,qDAAyC;AACzC,yCAAoC;AAEpC,kDAAwD;AACxD,mDAAqD;AAOrD,MAAa,4BAA4B;IAIrC,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAuC;QAHjF;;;;;WAAgD;QAChD;;;;;WAAuC;QAGnC,IAAI,CAAC,sBAAsB,GAAG,IAAA,mBAAO,EAAC,oBAAoB,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI;QACN,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM;YAC9C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM;YAC9C,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM;YAC9C,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;iBACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;SACrE,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAa;QAC3B,cAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,IAAI,EAAE;YACN,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAEpF,IAAI,KAAK,EAAE;gBACP,OAAO,KAAK,CAAC,kBAAkB,EAAE,CAAC;aACrC;SACJ;QAED,MAAM,QAAQ,GAAG,IAAI,kCAAkB,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1H,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEhD,2CAA2C;QAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAChD,wCAAwC;QACxC,IAAA,4BAAiB,EAAC;YACd,MAAM,EAAE,iBAAiB;YACzB,UAAU,EAAE,eAAe;YAC3B,eAAe,EAAE,QAAQ,CAAC,qBAAqB;YAC/C,EAAE,EAAE,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE;YAClC,IAAI,EAAE,SAAS;SAClB,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AAjDD,oEAiDC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type * as storage from '@crawlee/types';
|
|
2
|
+
import { MemoryStorage } from '../index';
|
|
3
|
+
import { BaseClient } from './common/base-client';
|
|
4
|
+
export interface RequestQueueClientOptions {
|
|
5
|
+
name?: string;
|
|
6
|
+
id?: string;
|
|
7
|
+
baseStorageDirectory: string;
|
|
8
|
+
client: MemoryStorage;
|
|
9
|
+
}
|
|
10
|
+
export interface InternalRequest {
|
|
11
|
+
id: string;
|
|
12
|
+
orderNo: number | null;
|
|
13
|
+
url: string;
|
|
14
|
+
uniqueKey: string;
|
|
15
|
+
method: Exclude<storage.RequestOptions['method'], undefined>;
|
|
16
|
+
retryCount: number;
|
|
17
|
+
json: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class RequestQueueClient extends BaseClient implements storage.RequestQueueClient {
|
|
20
|
+
name?: string;
|
|
21
|
+
createdAt: Date;
|
|
22
|
+
accessedAt: Date;
|
|
23
|
+
modifiedAt: Date;
|
|
24
|
+
handledRequestCount: number;
|
|
25
|
+
pendingRequestCount: number;
|
|
26
|
+
requestQueueDirectory: string;
|
|
27
|
+
private readonly requests;
|
|
28
|
+
private readonly client;
|
|
29
|
+
constructor(options: RequestQueueClientOptions);
|
|
30
|
+
get(): Promise<storage.RequestQueueInfo | undefined>;
|
|
31
|
+
update(newFields: {
|
|
32
|
+
name?: string | undefined;
|
|
33
|
+
}): Promise<storage.RequestQueueInfo | undefined>;
|
|
34
|
+
delete(): Promise<void>;
|
|
35
|
+
listHead(options?: storage.ListOptions): Promise<storage.QueueHead>;
|
|
36
|
+
addRequest(request: storage.RequestSchema, options?: storage.RequestOptions): Promise<storage.QueueOperationInfo>;
|
|
37
|
+
batchAddRequests(requests: storage.RequestSchema[], options?: storage.RequestOptions): Promise<storage.BatchAddRequestsResult>;
|
|
38
|
+
getRequest(id: string): Promise<storage.RequestOptions | undefined>;
|
|
39
|
+
updateRequest(request: storage.UpdateRequestSchema, options?: storage.RequestOptions): Promise<storage.QueueOperationInfo>;
|
|
40
|
+
deleteRequest(id: string): Promise<void>;
|
|
41
|
+
toRequestQueueInfo(): storage.RequestQueueInfo;
|
|
42
|
+
private updateTimestamps;
|
|
43
|
+
private updateItems;
|
|
44
|
+
private _jsonToRequest;
|
|
45
|
+
private _createInternalRequest;
|
|
46
|
+
private _calculateOrderNo;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=request-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-queue.d.ts","sourceRoot":"","sources":["../../src/resource-clients/request-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAM/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAsBlD,MAAM,WAAW,yBAAyB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAmB,SAAQ,UAAW,YAAW,OAAO,CAAC,kBAAkB;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,OAAc;IACvB,UAAU,OAAc;IACxB,UAAU,OAAc;IACxB,mBAAmB,SAAK;IACxB,mBAAmB,SAAK;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,OAAO,EAAE,yBAAyB;IAOxC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAWpD,MAAM,CAAC,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAuC/F,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAYvB,QAAQ,CAAC,OAAO,GAAE,OAAO,CAAC,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IAiCvE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,GAAE,OAAO,CAAC,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;IAuCrH,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC;IAiDlI,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAcnE,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE,OAAO,GAAE,OAAO,CAAC,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;IA6C9H,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9C,kBAAkB,IAAI,OAAO,CAAC,gBAAgB;IAgB9C,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,iBAAiB;CAO5B"}
|