@squiz/optimization-utils 7.0.0 → 7.1.0

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/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export * from './types/class-utilities-types';
2
2
  export * from './retries/Retries';
3
+ export * from './queue/LRUQueue';
4
+ export * from './queue/LRUQueueFactory';
3
5
  export * from './promises/PromiseMaxConcurrency';
4
6
  export * from './object/getProperty';
5
7
  export * from './metadata/CopyReflection';
package/dist/index.js CHANGED
@@ -16,6 +16,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./types/class-utilities-types"), exports);
18
18
  __exportStar(require("./retries/Retries"), exports);
19
+ __exportStar(require("./queue/LRUQueue"), exports);
20
+ __exportStar(require("./queue/LRUQueueFactory"), exports);
19
21
  __exportStar(require("./promises/PromiseMaxConcurrency"), exports);
20
22
  __exportStar(require("./object/getProperty"), exports);
21
23
  __exportStar(require("./metadata/CopyReflection"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,oDAAkC;AAClC,mEAAiD;AACjD,uDAAqC;AACrC,4DAA0C;AAC1C,4DAA0C;AAC1C,gDAA8B;AAC9B,2DAAyC;AACzC,iEAA+C;AAC/C,mDAAiC;AACjC,iDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,oDAAkC;AAClC,mDAAiC;AACjC,0DAAwC;AACxC,mEAAiD;AACjD,uDAAqC;AACrC,4DAA0C;AAC1C,4DAA0C;AAC1C,gDAA8B;AAC9B,2DAAyC;AACzC,iEAA+C;AAC/C,mDAAiC;AACjC,iDAA+B"}
@@ -0,0 +1,31 @@
1
+ export type LRUQueueSetOptions<T> = {
2
+ keySelector: (value: T) => string;
3
+ /** Defaults to JSON.stringify when omitted. */
4
+ serialize?: (value: T) => string;
5
+ /** Defaults to JSON.parse when omitted. */
6
+ deserialize?: (payload: string) => T;
7
+ };
8
+ /**
9
+ * Least Recently Used (LRU) queue implementation using SQLite.
10
+ */
11
+ export declare class LRUQueue<T> implements Disposable {
12
+ private readonly db;
13
+ private readonly keySelector;
14
+ private readonly serialize;
15
+ private readonly deserialize;
16
+ private readonly insertQueue;
17
+ private readonly selectOldestN;
18
+ private readonly markFetchedById;
19
+ private readonly selectPeekOldest;
20
+ private readonly selectPeekNewest;
21
+ private readonly selectCount;
22
+ get size(): number;
23
+ constructor({ keySelector, serialize, deserialize }: LRUQueueSetOptions<T>);
24
+ enqueue(...values: Array<T>): number;
25
+ dequeue(count?: number): Array<T>;
26
+ peekOldest(): T | undefined;
27
+ peekNewest(): T | undefined;
28
+ clone(): LRUQueue<T>;
29
+ toFile(filePath?: string): string;
30
+ [Symbol.dispose](): void;
31
+ }
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LRUQueue = void 0;
37
+ const node_crypto_1 = require("node:crypto");
38
+ const path = __importStar(require("node:path"));
39
+ const node_path_1 = require("node:path");
40
+ const node_sqlite_1 = require("node:sqlite");
41
+ /**
42
+ * Least Recently Used (LRU) queue implementation using SQLite.
43
+ */
44
+ class LRUQueue {
45
+ db;
46
+ keySelector;
47
+ serialize;
48
+ deserialize;
49
+ insertQueue;
50
+ selectOldestN;
51
+ markFetchedById;
52
+ selectPeekOldest;
53
+ selectPeekNewest;
54
+ selectCount;
55
+ get size() {
56
+ const row = this.selectCount.get();
57
+ return row?.c ?? 0;
58
+ }
59
+ constructor({ keySelector, serialize, deserialize }) {
60
+ this.db = new node_sqlite_1.DatabaseSync(':memory:');
61
+ this.db.exec(`
62
+ PRAGMA journal_mode = MEMORY;
63
+ PRAGMA synchronous = OFF;
64
+
65
+ CREATE TABLE queue (
66
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
67
+ item_key TEXT NOT NULL UNIQUE,
68
+ payload TEXT NOT NULL,
69
+ fetched INTEGER NOT NULL DEFAULT 0
70
+ CHECK (fetched IN (0, 1))
71
+ );
72
+
73
+ CREATE INDEX idx_queue_pending ON queue (fetched, id);
74
+ `);
75
+ this.keySelector = keySelector;
76
+ this.serialize = serialize ?? ((value) => JSON.stringify(value));
77
+ this.deserialize =
78
+ deserialize ?? ((payload) => JSON.parse(payload));
79
+ this.insertQueue = this.db.prepare('INSERT OR IGNORE INTO queue (item_key, payload) VALUES (?, ?)');
80
+ this.selectOldestN = this.db.prepare(`SELECT id, payload FROM queue
81
+ WHERE fetched = 0 ORDER BY id ASC LIMIT ?`);
82
+ this.markFetchedById = this.db.prepare('UPDATE queue SET fetched = 1 WHERE id = ? AND fetched = 0');
83
+ this.selectPeekOldest = this.db.prepare(`SELECT payload FROM queue
84
+ WHERE fetched = 0 ORDER BY id ASC LIMIT 1`);
85
+ this.selectPeekNewest = this.db.prepare(`SELECT payload FROM queue
86
+ WHERE fetched = 0 ORDER BY id DESC LIMIT 1`);
87
+ this.selectCount = this.db.prepare('SELECT COUNT(*) AS c FROM queue WHERE fetched = 0');
88
+ }
89
+ enqueue(...values) {
90
+ let added = 0;
91
+ this.db.exec('BEGIN IMMEDIATE');
92
+ try {
93
+ for (const value of values) {
94
+ const key = this.keySelector(value);
95
+ const payload = this.serialize(value);
96
+ const insertResult = this.insertQueue.run(key, payload);
97
+ if (insertResult.changes === 0) {
98
+ continue;
99
+ }
100
+ added++;
101
+ }
102
+ this.db.exec('COMMIT');
103
+ }
104
+ catch (error) {
105
+ this.db.exec('ROLLBACK');
106
+ throw error;
107
+ }
108
+ return added;
109
+ }
110
+ dequeue(count = 1) {
111
+ if (!Number.isInteger(count) || count < 0) {
112
+ throw new Error('count must be a non-negative integer');
113
+ }
114
+ if (count === 0) {
115
+ return [];
116
+ }
117
+ this.db.exec('BEGIN IMMEDIATE');
118
+ try {
119
+ const rows = this.selectOldestN.all(count);
120
+ if (rows.length === 0) {
121
+ this.db.exec('COMMIT');
122
+ return [];
123
+ }
124
+ for (const row of rows) {
125
+ this.markFetchedById.run(row.id);
126
+ }
127
+ this.db.exec('COMMIT');
128
+ return rows.map((row) => this.deserialize(row.payload));
129
+ }
130
+ catch (error) {
131
+ this.db.exec('ROLLBACK');
132
+ throw error;
133
+ }
134
+ }
135
+ peekOldest() {
136
+ const row = this.selectPeekOldest.get();
137
+ return row ? this.deserialize(row.payload) : undefined;
138
+ }
139
+ peekNewest() {
140
+ const row = this.selectPeekNewest.get();
141
+ return row ? this.deserialize(row.payload) : undefined;
142
+ }
143
+ clone() {
144
+ const cloned = new LRUQueue({
145
+ keySelector: this.keySelector,
146
+ serialize: this.serialize,
147
+ deserialize: this.deserialize,
148
+ });
149
+ const rows = this.db
150
+ .prepare('SELECT item_key, payload, fetched FROM queue ORDER BY id ASC')
151
+ .all();
152
+ if (rows.length === 0) {
153
+ return cloned;
154
+ }
155
+ const insert = cloned.db.prepare('INSERT INTO queue (item_key, payload, fetched) VALUES (?, ?, ?)');
156
+ cloned.db.exec('BEGIN IMMEDIATE');
157
+ try {
158
+ for (const row of rows) {
159
+ insert.run(row.item_key, row.payload, row.fetched);
160
+ }
161
+ cloned.db.exec('COMMIT');
162
+ }
163
+ catch (error) {
164
+ cloned.db.exec('ROLLBACK');
165
+ throw error;
166
+ }
167
+ return cloned;
168
+ }
169
+ toFile(filePath) {
170
+ const absolutePath = (0, node_path_1.resolve)(filePath ?? path.join(process.cwd(), `${(0, node_crypto_1.randomUUID)()}.sqlite`));
171
+ const escaped = absolutePath.replace(/'/g, `''`);
172
+ this.db.exec(`VACUUM INTO '${escaped}'`);
173
+ return absolutePath;
174
+ }
175
+ [Symbol.dispose]() {
176
+ this.db[Symbol.dispose]();
177
+ }
178
+ }
179
+ exports.LRUQueue = LRUQueue;
180
+ //# sourceMappingURL=LRUQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LRUQueue.js","sourceRoot":"","sources":["../../src/queue/LRUQueue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { LRUQueue, LRUQueueSetOptions } from './LRUQueue';
2
+ export declare class LRUQueueFactory {
3
+ create<T>(options: LRUQueueSetOptions<T>): LRUQueue<T>;
4
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LRUQueueFactory = void 0;
10
+ const LRUQueue_1 = require("./LRUQueue");
11
+ const inversify_1 = require("inversify");
12
+ let LRUQueueFactory = class LRUQueueFactory {
13
+ create(options) {
14
+ return new LRUQueue_1.LRUQueue(options);
15
+ }
16
+ };
17
+ exports.LRUQueueFactory = LRUQueueFactory;
18
+ exports.LRUQueueFactory = LRUQueueFactory = __decorate([
19
+ (0, inversify_1.injectable)()
20
+ ], LRUQueueFactory);
21
+ //# sourceMappingURL=LRUQueueFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LRUQueueFactory.js","sourceRoot":"","sources":["../../src/queue/LRUQueueFactory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yCAA0D;AAC1D,yCAAuC;AAGhC,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,MAAM,CAAI,OAA8B;QACtC,OAAO,IAAI,mBAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AAJY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,sBAAU,GAAE;GACA,eAAe,CAI3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squiz/optimization-utils",
3
- "version": "7.0.0",
3
+ "version": "7.1.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -35,7 +35,7 @@
35
35
  "devDependencies": {},
36
36
  "peerDependencies": {
37
37
  "inversify": "^7.11.0",
38
- "@squiz/optimization-logger": "^1.11.0"
38
+ "@squiz/optimization-logger": "^1.11.3"
39
39
  },
40
40
  "author": "",
41
41
  "license": "ISC"