@dxos/random-access-storage 0.4.9 → 0.4.10-main.05b9ab6

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,19 +1,287 @@
1
1
  import "@dxos/node-std/globals";
2
+ import import$random_access_storage from 'random-access-storage';
3
+ import import$inherits from 'inherits';
4
+ import import$next_tick from 'next-tick';
5
+ import import$once from 'once';
6
+ import import$buffer_from from 'buffer-from';
7
+ import import$buffer_alloc from 'buffer-alloc';
8
+ var __create = Object.create;
9
+ var __defProp = Object.defineProperty;
10
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11
+ var __getOwnPropNames = Object.getOwnPropertyNames;
12
+ var __getProtoOf = Object.getPrototypeOf;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
15
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
16
+ }) : x)(function(x) {
17
+ if (typeof require !== "undefined")
18
+ return require.apply(this, arguments);
19
+ throw Error('Dynamic require of "' + x + '" is not supported');
20
+ });
21
+ var __esm = (fn, res) => function __init() {
22
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
23
+ };
24
+ var __commonJS = (cb, mod) => function __require2() {
25
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
26
+ };
27
+ var __copyProps = (to, from, except, desc) => {
28
+ if (from && typeof from === "object" || typeof from === "function") {
29
+ for (let key of __getOwnPropNames(from))
30
+ if (!__hasOwnProp.call(to, key) && key !== except)
31
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
32
+ }
33
+ return to;
34
+ };
35
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
36
+ // If the importer is in node compatibility mode or this is not an ESM
37
+ // file that has been converted to a CommonJS file using a Babel-
38
+ // compatible transform (i.e. "__esModule" has not been set), then set
39
+ // "default" to the CommonJS "module.exports" for node compatibility.
40
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
41
+ mod
42
+ ));
2
43
 
3
44
  // inject-globals:@inject-globals
4
45
  import {
5
46
  global,
6
- Buffer,
47
+ Buffer as Buffer2,
7
48
  process
8
49
  } from "@dxos/node-std/inject-globals";
50
+ var init_inject_globals = __esm({
51
+ "inject-globals:@inject-globals"() {
52
+ }
53
+ });
54
+
55
+ // node_modules/.pnpm/random-access-idb@1.2.2_patch_hash=mqfhtwnltd5kq5s4kb4gk7k2k4/node_modules/random-access-idb/lib/blocks.js
56
+ var require_blocks = __commonJS({
57
+ "node_modules/.pnpm/random-access-idb@1.2.2_patch_hash=mqfhtwnltd5kq5s4kb4gk7k2k4/node_modules/random-access-idb/lib/blocks.js"(exports, module) {
58
+ init_inject_globals();
59
+ module.exports = function(size, start, end) {
60
+ var result = [];
61
+ for (var n = Math.floor(start / size) * size; n < end; n += size) {
62
+ result.push({
63
+ block: Math.floor(n / size),
64
+ start: Math.max(n, start) % size,
65
+ end: Math.min(n + size, end) % size || size
66
+ });
67
+ }
68
+ return result;
69
+ };
70
+ }
71
+ });
72
+
73
+ // node_modules/.pnpm/random-access-idb@1.2.2_patch_hash=mqfhtwnltd5kq5s4kb4gk7k2k4/node_modules/random-access-idb/index.js
74
+ var require_random_access_idb = __commonJS({
75
+ "node_modules/.pnpm/random-access-idb@1.2.2_patch_hash=mqfhtwnltd5kq5s4kb4gk7k2k4/node_modules/random-access-idb/index.js"(exports, module) {
76
+ init_inject_globals();
77
+ var RandomAccess = import$random_access_storage;
78
+ var inherits = import$inherits;
79
+ var nextTick = import$next_tick;
80
+ var once = import$once;
81
+ var blocks = require_blocks();
82
+ var bufferFrom = import$buffer_from;
83
+ var bufferAlloc = import$buffer_alloc;
84
+ var DELIM2 = "\0";
85
+ var win = typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {};
86
+ module.exports = function(dbname, xopts) {
87
+ if (!xopts)
88
+ xopts = {};
89
+ var idb2 = xopts.idb || (typeof win !== "undefined" ? win.indexedDB || win.mozIndexedDB || win.webkitIndexedDB || win.msIndexedDB : null);
90
+ if (!idb2)
91
+ throw new Error("indexedDB not present and not given");
92
+ var db = null, dbqueue = [];
93
+ if (typeof idb2.open === "function") {
94
+ var req = idb2.open(dbname);
95
+ req.addEventListener("upgradeneeded", function() {
96
+ db = req.result;
97
+ db.createObjectStore("data");
98
+ });
99
+ req.addEventListener("success", function() {
100
+ db = req.result;
101
+ dbqueue.forEach(function(cb) {
102
+ cb(db);
103
+ });
104
+ dbqueue = null;
105
+ });
106
+ } else {
107
+ db = idb2;
108
+ }
109
+ function getdb(cb) {
110
+ if (db)
111
+ nextTick(function() {
112
+ cb(db);
113
+ });
114
+ else
115
+ dbqueue.push(cb);
116
+ }
117
+ return {
118
+ create: function(name, opts) {
119
+ if (typeof name === "object") {
120
+ opts = name;
121
+ name = opts.name;
122
+ }
123
+ if (!opts)
124
+ opts = {};
125
+ opts.name = name;
126
+ return new Store(Object.assign({ db: getdb }, xopts, opts));
127
+ },
128
+ getdb
129
+ };
130
+ };
131
+ function Store(opts) {
132
+ if (!(this instanceof Store))
133
+ return new Store(opts);
134
+ RandomAccess.call(this);
135
+ if (!opts)
136
+ opts = {};
137
+ if (typeof opts === "string")
138
+ opts = { name: opts };
139
+ this.size = opts.size || 4096;
140
+ this.name = opts.name;
141
+ this.length = opts.length || 0;
142
+ this._getdb = opts.db;
143
+ }
144
+ inherits(Store, RandomAccess);
145
+ Store.prototype._blocks = function(i, j) {
146
+ return blocks(this.size, i, j);
147
+ };
148
+ Store.prototype._read = function(req) {
149
+ var self2 = this;
150
+ var buffers = [];
151
+ self2._store("readonly", function(err, store) {
152
+ if ((self2.length || 0) < req.offset + req.size) {
153
+ return req.callback(new Error("Could not satisfy length"));
154
+ }
155
+ if (err)
156
+ return req.callback(err);
157
+ var offsets = self2._blocks(req.offset, req.offset + req.size);
158
+ var pending = offsets.length + 1;
159
+ var firstBlock = offsets.length > 0 ? offsets[0].block : 0;
160
+ var j = 0;
161
+ for (var i = 0; i < offsets.length; i++)
162
+ (function(o) {
163
+ var key = self2.name + DELIM2 + o.block;
164
+ backify(store.get(key), function(err2, ev) {
165
+ if (err2)
166
+ return req.callback(err2);
167
+ buffers[o.block - firstBlock] = ev.target.result ? bufferFrom(ev.target.result.subarray(o.start, o.end)) : bufferAlloc(o.end - o.start);
168
+ if (--pending === 0)
169
+ req.callback(null, Buffer2.concat(buffers));
170
+ });
171
+ })(offsets[i]);
172
+ if (--pending === 0)
173
+ req.callback(null, Buffer2.concat(buffers));
174
+ });
175
+ };
176
+ Store.prototype._write = function(req) {
177
+ var self2 = this;
178
+ self2._store("readwrite", function(err, store) {
179
+ if (err)
180
+ return req.callback(err);
181
+ var offsets = self2._blocks(req.offset, req.offset + req.data.length);
182
+ var pending = 1;
183
+ var buffers = {};
184
+ for (var i = 0; i < offsets.length; i++)
185
+ (function(o, i2) {
186
+ if (o.end - o.start === self2.size)
187
+ return;
188
+ pending++;
189
+ var key = self2.name + DELIM2 + o.block;
190
+ backify(store.get(key), function(err2, ev) {
191
+ if (err2)
192
+ return req.callback(err2);
193
+ buffers[i2] = bufferFrom(ev.target.result || bufferAlloc(self2.size));
194
+ if (--pending === 0)
195
+ write(store, offsets, buffers);
196
+ });
197
+ })(offsets[i], i);
198
+ if (--pending === 0)
199
+ write(store, offsets, buffers);
200
+ });
201
+ function write(store, offsets, buffers) {
202
+ var block;
203
+ for (var i = 0, j = 0; i < offsets.length; i++) {
204
+ var o = offsets[i];
205
+ var len = o.end - o.start;
206
+ if (len === self2.size) {
207
+ block = bufferFrom(req.data.slice(j, j + len));
208
+ } else {
209
+ block = buffers[i];
210
+ req.data.copy(block, o.start, j, j + len);
211
+ }
212
+ store.put(block, self2.name + DELIM2 + o.block);
213
+ j += len;
214
+ }
215
+ var length = Math.max(self2.length || 0, req.offset + req.data.length);
216
+ store.put(length, self2.name + DELIM2 + "length");
217
+ store.transaction.addEventListener("complete", function() {
218
+ self2.length = length;
219
+ req.callback(null);
220
+ });
221
+ store.transaction.addEventListener("error", function(err) {
222
+ req.callback(err);
223
+ });
224
+ }
225
+ };
226
+ Store.prototype._store = function(mode, cb) {
227
+ cb = once(cb);
228
+ var self2 = this;
229
+ self2._getdb(function(db) {
230
+ var tx = db.transaction(["data"], mode);
231
+ var store = tx.objectStore("data");
232
+ tx.addEventListener("error", cb);
233
+ cb(null, store);
234
+ });
235
+ };
236
+ Store.prototype._open = function(req) {
237
+ var self2 = this;
238
+ this._getdb(function(db) {
239
+ self2._store("readonly", function(err, store) {
240
+ backify(store.get(self2.name + DELIM2 + "length"), function(err2, ev) {
241
+ self2.length = ev.target.result || 0;
242
+ req.callback(null);
243
+ });
244
+ });
245
+ });
246
+ };
247
+ Store.prototype._close = function(req) {
248
+ this._getdb(function(db) {
249
+ req.callback();
250
+ });
251
+ };
252
+ Store.prototype._stat = function(req) {
253
+ var self2 = this;
254
+ nextTick(function() {
255
+ req.callback(null, { size: self2.length });
256
+ });
257
+ };
258
+ function backify(r, cb) {
259
+ r.addEventListener("success", function(ev) {
260
+ cb(null, ev);
261
+ });
262
+ r.addEventListener("error", cb);
263
+ }
264
+ }
265
+ });
266
+
267
+ // packages/common/random-access-storage/src/browser/index.ts
268
+ init_inject_globals();
269
+
270
+ // packages/common/random-access-storage/src/common/index.ts
271
+ init_inject_globals();
9
272
 
10
273
  // packages/common/random-access-storage/src/common/abstract-storage.ts
274
+ init_inject_globals();
11
275
  import { join as join2 } from "@dxos/node-std/path";
12
276
  import { inspect } from "@dxos/node-std/util";
13
277
  import { inspectObject } from "@dxos/debug";
14
278
  import { log as log2 } from "@dxos/log";
15
279
 
280
+ // packages/common/random-access-storage/src/common/directory.ts
281
+ init_inject_globals();
282
+
16
283
  // packages/common/random-access-storage/src/common/utils.ts
284
+ init_inject_globals();
17
285
  import { join } from "@dxos/node-std/path";
18
286
  var stringDiff = (first, second) => first.split(second).join("");
19
287
  var getFullPath = (root, path) => join(root, stringDiff(path, root));
@@ -70,6 +338,7 @@ var Directory = class _Directory {
70
338
  };
71
339
 
72
340
  // packages/common/random-access-storage/src/common/file.ts
341
+ init_inject_globals();
73
342
  import pify from "pify";
74
343
  import { log } from "@dxos/log";
75
344
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/random-access-storage/src/common/file.ts";
@@ -154,7 +423,7 @@ var AbstractStorage = class {
154
423
  try {
155
424
  log2.info("Erasing all data...", void 0, {
156
425
  F: __dxlog_file2,
157
- L: 59,
426
+ L: 60,
158
427
  S: this,
159
428
  C: (f, a) => f(...a)
160
429
  });
@@ -163,14 +432,14 @@ var AbstractStorage = class {
163
432
  await this._destroy();
164
433
  log2("Erased...", void 0, {
165
434
  F: __dxlog_file2,
166
- L: 63,
435
+ L: 64,
167
436
  S: this,
168
437
  C: (f, a) => f(...a)
169
438
  });
170
439
  } catch (err) {
171
440
  log2.catch(err, void 0, {
172
441
  F: __dxlog_file2,
173
- L: 65,
442
+ L: 66,
174
443
  S: this,
175
444
  C: (f, a) => f(...a)
176
445
  });
@@ -228,7 +497,7 @@ var AbstractStorage = class {
228
497
  async _closeFilesInPath(path) {
229
498
  await Promise.all(Array.from((await this._getFiles(path)).values()).map((file) => file.close().catch((err) => log2.catch(err, void 0, {
230
499
  F: __dxlog_file2,
231
- L: 133,
500
+ L: 134,
232
501
  S: this,
233
502
  C: (f, a) => f(...a)
234
503
  }))));
@@ -241,7 +510,7 @@ var AbstractStorage = class {
241
510
  await Promise.all(Array.from(await this._getFiles(path)).map(([path2, file]) => {
242
511
  return file.destroy().then(() => this._files.delete(path2)).catch((err) => log2.error(err.message, void 0, {
243
512
  F: __dxlog_file2,
244
- L: 148,
513
+ L: 149,
245
514
  S: this,
246
515
  C: (f, a) => f(...a)
247
516
  }));
@@ -250,10 +519,12 @@ var AbstractStorage = class {
250
519
  };
251
520
 
252
521
  // packages/common/random-access-storage/src/common/memory-storage.ts
522
+ init_inject_globals();
253
523
  import ram from "random-access-memory";
254
524
  import { arrayToBuffer } from "@dxos/util";
255
525
 
256
526
  // packages/common/random-access-storage/src/common/storage.ts
527
+ init_inject_globals();
257
528
  var StorageType;
258
529
  (function(StorageType2) {
259
530
  StorageType2["RAM"] = "ram";
@@ -301,65 +572,25 @@ var MemoryStorage = class extends AbstractStorage {
301
572
  }
302
573
  };
303
574
 
304
- // packages/common/random-access-storage/src/browser/firefox-storage.ts
305
- import raw from "random-access-web/mutable-file-wrapper.js";
306
-
307
- // packages/common/random-access-storage/src/browser/browser-storage.ts
308
- var BrowserStorage = class extends AbstractStorage {
309
- constructor(path) {
310
- super(path);
311
- this._fileStorage = this._createFileStorage(path);
312
- }
313
- _createFile(path, filename) {
314
- const fullPath = getFullPath(path, filename);
315
- return this._fileStorage(fullPath);
316
- }
317
- async _destroy() {
318
- return new Promise((resolve, reject) => {
319
- const request = indexedDB.deleteDatabase(this.path);
320
- request.onsuccess = () => {
321
- resolve();
322
- };
323
- request.onupgradeneeded = () => {
324
- reject(new Error("Upgrade needed."));
325
- };
326
- request.onblocked = () => {
327
- reject(new Error("Blocked."));
328
- };
329
- request.onerror = (err) => {
330
- reject(err);
331
- };
332
- });
333
- }
334
- };
335
-
336
- // packages/common/random-access-storage/src/browser/firefox-storage.ts
337
- var FirefoxStorage = class extends BrowserStorage {
338
- constructor() {
339
- super(...arguments);
340
- this.type = StorageType.FIREFOX;
341
- }
342
- _createFileStorage(path) {
343
- return raw({
344
- name: path
345
- });
346
- }
347
- };
575
+ // packages/common/random-access-storage/src/browser/storage.ts
576
+ init_inject_globals();
348
577
 
349
578
  // packages/common/random-access-storage/src/browser/idb-storage.ts
350
- import idb from "random-access-idb";
579
+ init_inject_globals();
580
+ var import_random_access_idb = __toESM(require_random_access_idb());
351
581
  import { invariant } from "@dxos/invariant";
352
582
  var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/common/random-access-storage/src/browser/idb-storage.ts";
353
583
  var DELIM = "\0";
354
- var IDbStorage = class extends BrowserStorage {
355
- constructor() {
356
- super(...arguments);
584
+ var IDbStorage = class extends AbstractStorage {
585
+ constructor(path) {
586
+ super(path);
357
587
  this.type = StorageType.IDB;
358
588
  this._store = "data";
359
589
  this._initialized = false;
590
+ this._fileStorage = this._createFileStorage(path);
360
591
  }
361
592
  _createFileStorage(path) {
362
- const database = idb(path);
593
+ const database = (0, import_random_access_idb.default)(path);
363
594
  let res;
364
595
  this._db = new Promise((resolve) => {
365
596
  res = resolve;
@@ -367,6 +598,16 @@ var IDbStorage = class extends BrowserStorage {
367
598
  database.getdb(res);
368
599
  return database.create;
369
600
  }
601
+ async close() {
602
+ await this._closeFilesInPath("");
603
+ }
604
+ async reset() {
605
+ await this._closeFilesInPath("");
606
+ await this._remove("");
607
+ }
608
+ async _destroy() {
609
+ throw new Error("Unreachable");
610
+ }
370
611
  _createFile(path, filename) {
371
612
  const file = this._fileStorage(getFullPath(path, filename));
372
613
  file.destroy = (cb) => {
@@ -393,7 +634,7 @@ var IDbStorage = class extends BrowserStorage {
393
634
  const db = await this._db;
394
635
  invariant(db, "Database is not initialized.", {
395
636
  F: __dxlog_file3,
396
- L: 63,
637
+ L: 85,
397
638
  S: this,
398
639
  A: [
399
640
  "db",
@@ -435,6 +676,7 @@ var IDbStorage = class extends BrowserStorage {
435
676
  };
436
677
 
437
678
  // packages/common/random-access-storage/src/browser/web-fs.ts
679
+ init_inject_globals();
438
680
  import { EventEmitter } from "@dxos/node-std/events";
439
681
  import { callbackify } from "@dxos/node-std/util";
440
682
  import { synchronized } from "@dxos/async";
@@ -749,7 +991,7 @@ var WebFile = class extends EventEmitter {
749
991
  if (offset + size > this._buffer.length) {
750
992
  throw new Error("Read out of bounds");
751
993
  }
752
- return Buffer.from(this._buffer.slice(offset, offset + size));
994
+ return Buffer2.from(this._buffer.slice(offset, offset + size));
753
995
  }
754
996
  async write(offset, data) {
755
997
  this.assertNotDestroyed("Write");
@@ -898,22 +1140,16 @@ _ts_decorate([
898
1140
  // packages/common/random-access-storage/src/browser/storage.ts
899
1141
  var createStorage = ({ type, root = "" } = {}) => {
900
1142
  if (type === void 0) {
901
- if (navigator && navigator.storage && typeof navigator.storage.getDirectory === "function" && FileSystemFileHandle && typeof FileSystemFileHandle.prototype.createWritable === "function") {
902
- return new WebFS(root);
903
- } else {
904
- return new IDbStorage(root);
905
- }
1143
+ return new IDbStorage(root);
906
1144
  }
907
1145
  switch (type) {
908
1146
  case StorageType.RAM: {
909
1147
  return new MemoryStorage(root);
910
1148
  }
911
1149
  case StorageType.IDB:
912
- case StorageType.CHROME: {
913
- return new IDbStorage(root);
914
- }
1150
+ case StorageType.CHROME:
915
1151
  case StorageType.FIREFOX: {
916
- return new FirefoxStorage(root);
1152
+ return new IDbStorage(root);
917
1153
  }
918
1154
  case StorageType.WEBFS: {
919
1155
  return new WebFS(root);