@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.
Files changed (69) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +214 -0
  3. package/body-parser.d.ts +13 -0
  4. package/body-parser.d.ts.map +1 -0
  5. package/body-parser.js +65 -0
  6. package/body-parser.js.map +1 -0
  7. package/consts.d.ts +17 -0
  8. package/consts.d.ts.map +1 -0
  9. package/consts.js +22 -0
  10. package/consts.js.map +1 -0
  11. package/index.d.ts +2 -0
  12. package/index.d.ts.map +1 -0
  13. package/index.js +5 -0
  14. package/index.js.map +1 -0
  15. package/index.mjs +4 -0
  16. package/memory-storage.d.ts +29 -0
  17. package/memory-storage.d.ts.map +1 -0
  18. package/memory-storage.js +102 -0
  19. package/memory-storage.js.map +1 -0
  20. package/package.json +60 -0
  21. package/resource-clients/common/base-client.d.ts +8 -0
  22. package/resource-clients/common/base-client.d.ts.map +1 -0
  23. package/resource-clients/common/base-client.js +22 -0
  24. package/resource-clients/common/base-client.js.map +1 -0
  25. package/resource-clients/dataset-collection.d.ts +14 -0
  26. package/resource-clients/dataset-collection.d.ts.map +1 -0
  27. package/resource-clients/dataset-collection.js +60 -0
  28. package/resource-clients/dataset-collection.js.map +1 -0
  29. package/resource-clients/dataset.d.ts +42 -0
  30. package/resource-clients/dataset.d.ts.map +1 -0
  31. package/resource-clients/dataset.js +235 -0
  32. package/resource-clients/dataset.js.map +1 -0
  33. package/resource-clients/key-value-store-collection.d.ts +14 -0
  34. package/resource-clients/key-value-store-collection.d.ts.map +1 -0
  35. package/resource-clients/key-value-store-collection.js +60 -0
  36. package/resource-clients/key-value-store-collection.js.map +1 -0
  37. package/resource-clients/key-value-store.d.ts +36 -0
  38. package/resource-clients/key-value-store.d.ts.map +1 -0
  39. package/resource-clients/key-value-store.js +300 -0
  40. package/resource-clients/key-value-store.js.map +1 -0
  41. package/resource-clients/request-queue-collection.d.ts +14 -0
  42. package/resource-clients/request-queue-collection.d.ts.map +1 -0
  43. package/resource-clients/request-queue-collection.js +60 -0
  44. package/resource-clients/request-queue-collection.js.map +1 -0
  45. package/resource-clients/request-queue.d.ts +48 -0
  46. package/resource-clients/request-queue.d.ts.map +1 -0
  47. package/resource-clients/request-queue.js +353 -0
  48. package/resource-clients/request-queue.js.map +1 -0
  49. package/tsconfig.build.tsbuildinfo +1 -0
  50. package/utils.d.ts +44 -0
  51. package/utils.d.ts.map +1 -0
  52. package/utils.js +59 -0
  53. package/utils.js.map +1 -0
  54. package/workers/file-storage-worker-emulator.d.ts +5 -0
  55. package/workers/file-storage-worker-emulator.d.ts.map +1 -0
  56. package/workers/file-storage-worker-emulator.js +12 -0
  57. package/workers/file-storage-worker-emulator.js.map +1 -0
  58. package/workers/file-storage-worker.d.ts +2 -0
  59. package/workers/file-storage-worker.d.ts.map +1 -0
  60. package/workers/file-storage-worker.js +15 -0
  61. package/workers/file-storage-worker.js.map +1 -0
  62. package/workers/instance.d.ts +4 -0
  63. package/workers/instance.d.ts.map +1 -0
  64. package/workers/instance.js +35 -0
  65. package/workers/instance.js.map +1 -0
  66. package/workers/worker-utils.d.ts +9 -0
  67. package/workers/worker-utils.d.ts.map +1 -0
  68. package/workers/worker-utils.js +79 -0
  69. 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"}