sliftutils 0.9.0 → 0.11.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/.cursorrules +2 -0
- package/.gitignore +38 -0
- package/assets/icon128.png +0 -0
- package/assets/icon16.png +0 -0
- package/assets/icon48.png +0 -0
- package/build-electron/assets/icon128.png +0 -0
- package/build-electron/assets/icon16.png +0 -0
- package/build-electron/assets/icon48.png +0 -0
- package/build-electron/electron/electronIndex.html +12 -0
- package/build-electron/electronMain.js +5185 -0
- package/build-electron/electronRenderer.js +20852 -0
- package/build-extension/assets/icon128.png +0 -0
- package/build-extension/assets/icon16.png +0 -0
- package/build-extension/assets/icon48.png +0 -0
- package/build-extension/extBackground.js +5246 -0
- package/build-extension/extContentScript.js +5243 -0
- package/build-extension/manifest.json +29 -0
- package/build-nodejs/server.js +198610 -0
- package/build-web/assets/icon128.png +0 -0
- package/build-web/assets/icon16.png +0 -0
- package/build-web/assets/icon48.png +0 -0
- package/build-web/browser.js +199266 -0
- package/build-web/web/index.html +32 -0
- package/builders/dist/electronBuild.ts.cache +105 -0
- package/builders/dist/extensionBuild.ts.cache +146 -0
- package/builders/dist/generateIndexDts.ts.cache +74 -0
- package/builders/dist/hotReload.ts.cache +93 -0
- package/builders/dist/nodeJSBuild.ts.cache +29 -0
- package/builders/dist/watch.ts.cache +163 -0
- package/builders/dist/webBuild.ts.cache +81 -0
- package/builders/generateIndexDts.ts +63 -0
- package/bundler/dist/bundleEntry.ts.cache +48 -0
- package/bundler/dist/bundleEntryCaller.ts.cache +18 -0
- package/bundler/dist/bundleRequire.ts.cache +246 -0
- package/bundler/dist/bundleWrapper.ts.cache +101 -0
- package/bundler/dist/bundler.ts.cache +66 -0
- package/bundler/dist/sourceMaps.ts.cache +210 -0
- package/dist/electronMain.ts.cache +27 -0
- package/dist/electronRenderer.tsx.cache +62 -0
- package/electron/dist/electronMain.ts.cache +26 -0
- package/electron/dist/electronRenderer.tsx.cache +64 -0
- package/extension/dist/extBackground.ts.cache +20 -0
- package/extension/dist/extContentScript.ts.cache +17 -0
- package/index.d.ts +46 -0
- package/misc/dist/environment.ts.cache +50 -0
- package/misc/dist/fs.ts.cache +29 -0
- package/misc/environment.d.ts +8 -0
- package/misc/fs.d.ts +1 -0
- package/misc/getSecret.d.ts +8 -0
- package/misc/getSecret.ts +0 -4
- package/misc/types.d.ts +1 -0
- package/misc/zip.d.ts +7 -0
- package/nodejs/dist/exampleFile.ts.cache +11 -0
- package/nodejs/dist/server.ts.cache +15 -0
- package/package.json +8 -3
- package/render-utils/SyncedController.d.ts +1 -0
- package/render-utils/dist/observer.tsx.cache +33 -0
- package/storage/dist/CachedStorage.ts.cache +31 -0
- package/storage/dist/DelayedStorage.ts.cache +35 -0
- package/storage/dist/DiskCollection.ts.cache +241 -0
- package/storage/dist/FileFolderAPI.tsx.cache +345 -0
- package/storage/dist/IndexedDBFileFolderAPI.ts.cache +142 -0
- package/storage/dist/JSONStorage.ts.cache +38 -0
- package/storage/dist/PendingManager.tsx.cache +73 -0
- package/storage/dist/PendingStorage.ts.cache +49 -0
- package/storage/dist/PrivateFileSystemStorage.ts.cache +178 -0
- package/storage/dist/StorageObservable.ts.cache +120 -0
- package/storage/dist/TransactionStorage.ts.cache +421 -0
- package/storage/dist/fileSystemPointer.ts.cache +77 -0
- package/tsconfig.declarations.json +3 -1
- package/web/dist/browser.tsx.cache +66 -0
- package/yarn.lock +1752 -0
- package/builders/generateIndexDts.js +0 -50
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
12
|
+
//exports.PendingDisplay = exports.hasPending = exports.setPending = void 0;
|
|
13
|
+
const misc_1 = require("socket-function/src/misc");
|
|
14
|
+
const mobxTyped_1 = require("../misc/mobxTyped");
|
|
15
|
+
const preact_1 = __importDefault(require("preact"));
|
|
16
|
+
const typesafecss_1 = require("typesafecss");
|
|
17
|
+
const observer_1 = require("../misc/observer");
|
|
18
|
+
const format_1 = require("socket-function/src/formatting/format");
|
|
19
|
+
let watchState = (0, mobxTyped_1.observable)({
|
|
20
|
+
pending: {}
|
|
21
|
+
});
|
|
22
|
+
let pendingLastSets = new Map();
|
|
23
|
+
let pendingCache = new Map();
|
|
24
|
+
// "" clears the pending value
|
|
25
|
+
function setPending(group, message) {
|
|
26
|
+
pendingCache.set(group, message);
|
|
27
|
+
void setPendingBase();
|
|
28
|
+
}
|
|
29
|
+
exports.setPending = setPending;
|
|
30
|
+
function hasPending() {
|
|
31
|
+
return Object.keys(watchState.pending).length > 0;
|
|
32
|
+
}
|
|
33
|
+
exports.hasPending = hasPending;
|
|
34
|
+
// NOTE: This not only prevents render overload, but also means any pending that are < this
|
|
35
|
+
// delay don't show up (which is useful to reduce unnecessary pending messages).
|
|
36
|
+
const setPendingBase = (0, misc_1.throttleFunction)(500, function setPendingBase() {
|
|
37
|
+
for (let [group, message] of pendingCache) {
|
|
38
|
+
if (!message) {
|
|
39
|
+
let lastSet = pendingLastSets.get(group);
|
|
40
|
+
if (lastSet) {
|
|
41
|
+
let duration = Date.now() - lastSet;
|
|
42
|
+
if (duration > 500) {
|
|
43
|
+
console.log(`Finished slow task after ${(0, format_1.formatTime)(duration)}: ${JSON.stringify(group)}, last is ${JSON.stringify(watchState.pending[group])}`);
|
|
44
|
+
}
|
|
45
|
+
pendingLastSets.delete(group);
|
|
46
|
+
}
|
|
47
|
+
delete watchState.pending[group];
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
//console.log("setPending", group, message);
|
|
51
|
+
if (!(group in watchState.pending)) {
|
|
52
|
+
pendingLastSets.set(group, Date.now());
|
|
53
|
+
}
|
|
54
|
+
watchState.pending[group] = message;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
pendingCache.clear();
|
|
58
|
+
});
|
|
59
|
+
let PendingDisplay = class PendingDisplay extends preact_1.default.Component {
|
|
60
|
+
render() {
|
|
61
|
+
// Single line, giving equal space, and ellipsis for overflow
|
|
62
|
+
return preact_1.default.createElement("div", { className: typesafecss_1.css.hbox(10) }, Object.keys(watchState.pending).map(group => (preact_1.default.createElement("div", { className: typesafecss_1.css.center.textOverflow("ellipsis").border("1px solid black").pad2(6, 2) },
|
|
63
|
+
group,
|
|
64
|
+
": ",
|
|
65
|
+
watchState.pending[group]))));
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
exports.PendingDisplay = PendingDisplay;
|
|
69
|
+
exports.PendingDisplay = PendingDisplay = __decorate([
|
|
70
|
+
observer_1.observer
|
|
71
|
+
], PendingDisplay);
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVuZGluZ01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJQZW5kaW5nTWFuYWdlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsbURBQTREO0FBQzVELGlEQUErQztBQUMvQyxvREFBNEI7QUFDNUIsNkNBQWtDO0FBQ2xDLCtDQUE0QztBQUM1QyxrRUFBbUU7QUFFbkUsSUFBSSxVQUFVLEdBQUcsSUFBQSxzQkFBVSxFQUFDO0lBQ3hCLE9BQU8sRUFBRSxFQUFpQztDQUM3QyxDQUFDLENBQUM7QUFDSCxJQUFJLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUVoRCxJQUFJLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUU3Qyw4QkFBOEI7QUFDOUIsU0FBZ0IsVUFBVSxDQUFDLEtBQWEsRUFBRSxPQUFlO0lBQ3JELFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLEtBQUssY0FBYyxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUhELGdDQUdDO0FBRUQsU0FBZ0IsVUFBVTtJQUN0QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUZELGdDQUVDO0FBRUQsMkZBQTJGO0FBQzNGLGlGQUFpRjtBQUNqRixNQUFNLGNBQWMsR0FBRyxJQUFBLHVCQUFnQixFQUFDLEdBQUcsRUFBRSxTQUFTLGNBQWM7SUFDaEUsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNYLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDVixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO2dCQUNwQyxJQUFJLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwSixDQUFDO2dCQUNELGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNKLDRDQUE0QztZQUM1QyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUNELFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QixDQUFDLENBQUMsQ0FBQztBQUdJLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWUsU0FBUSxnQkFBTSxDQUFDLFNBQVM7SUFDaEQsTUFBTTtRQUNGLDZEQUE2RDtRQUM3RCxPQUFPLHdDQUFLLFNBQVMsRUFBRSxpQkFBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDMUMsd0NBQUssU0FBUyxFQUFFLGlCQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRixLQUFLOztZQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQ2pDLENBQ1QsQ0FBQyxDQUNBLENBQUM7SUFDWCxDQUFDO0NBQ0osQ0FBQTtBQVhZLHdDQUFjO3lCQUFkLGNBQWM7SUFEMUIsbUJBQVE7R0FDSSxjQUFjLENBVzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGhyb3R0bGVGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwiLi4vbWlzYy9tb2J4VHlwZWRcIjtcbmltcG9ydCBwcmVhY3QgZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSBcInR5cGVzYWZlY3NzXCI7XG5pbXBvcnQgeyBvYnNlcnZlciB9IGZyb20gXCIuLi9taXNjL29ic2VydmVyXCI7XG5pbXBvcnQgeyBmb3JtYXRUaW1lIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcblxubGV0IHdhdGNoU3RhdGUgPSBvYnNlcnZhYmxlKHtcbiAgICBwZW5kaW5nOiB7fSBhcyB7IFtncm91cDogc3RyaW5nXTogc3RyaW5nIH1cbn0pO1xubGV0IHBlbmRpbmdMYXN0U2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbmxldCBwZW5kaW5nQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vLyBcIlwiIGNsZWFycyB0aGUgcGVuZGluZyB2YWx1ZVxuZXhwb3J0IGZ1bmN0aW9uIHNldFBlbmRpbmcoZ3JvdXA6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgcGVuZGluZ0NhY2hlLnNldChncm91cCwgbWVzc2FnZSk7XG4gICAgdm9pZCBzZXRQZW5kaW5nQmFzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzUGVuZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMod2F0Y2hTdGF0ZS5wZW5kaW5nKS5sZW5ndGggPiAwO1xufVxuXG4vLyBOT1RFOiBUaGlzIG5vdCBvbmx5IHByZXZlbnRzIHJlbmRlciBvdmVybG9hZCwgYnV0IGFsc28gbWVhbnMgYW55IHBlbmRpbmcgdGhhdCBhcmUgPCB0aGlzXG4vLyAgZGVsYXkgZG9uJ3Qgc2hvdyB1cCAod2hpY2ggaXMgdXNlZnVsIHRvIHJlZHVjZSB1bm5lY2Vzc2FyeSBwZW5kaW5nIG1lc3NhZ2VzKS5cbmNvbnN0IHNldFBlbmRpbmdCYXNlID0gdGhyb3R0bGVGdW5jdGlvbig1MDAsIGZ1bmN0aW9uIHNldFBlbmRpbmdCYXNlKCkge1xuICAgIGZvciAobGV0IFtncm91cCwgbWVzc2FnZV0gb2YgcGVuZGluZ0NhY2hlKSB7XG5cbiAgICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgICAgICBsZXQgbGFzdFNldCA9IHBlbmRpbmdMYXN0U2V0cy5nZXQoZ3JvdXApO1xuICAgICAgICAgICAgaWYgKGxhc3RTZXQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gbGFzdFNldDtcbiAgICAgICAgICAgICAgICBpZiAoZHVyYXRpb24gPiA1MDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZpbmlzaGVkIHNsb3cgdGFzayBhZnRlciAke2Zvcm1hdFRpbWUoZHVyYXRpb24pfTogJHtKU09OLnN0cmluZ2lmeShncm91cCl9LCBsYXN0IGlzICR7SlNPTi5zdHJpbmdpZnkod2F0Y2hTdGF0ZS5wZW5kaW5nW2dyb3VwXSl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlbmRpbmdMYXN0U2V0cy5kZWxldGUoZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHdhdGNoU3RhdGUucGVuZGluZ1tncm91cF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwic2V0UGVuZGluZ1wiLCBncm91cCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoIShncm91cCBpbiB3YXRjaFN0YXRlLnBlbmRpbmcpKSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ0xhc3RTZXRzLnNldChncm91cCwgRGF0ZS5ub3coKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YXRjaFN0YXRlLnBlbmRpbmdbZ3JvdXBdID0gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwZW5kaW5nQ2FjaGUuY2xlYXIoKTtcbn0pO1xuXG5Ab2JzZXJ2ZXJcbmV4cG9ydCBjbGFzcyBQZW5kaW5nRGlzcGxheSBleHRlbmRzIHByZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgLy8gU2luZ2xlIGxpbmUsIGdpdmluZyBlcXVhbCBzcGFjZSwgYW5kIGVsbGlwc2lzIGZvciBvdmVyZmxvd1xuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzcy5oYm94KDEwKX0+XG4gICAgICAgICAgICB7T2JqZWN0LmtleXMod2F0Y2hTdGF0ZS5wZW5kaW5nKS5tYXAoZ3JvdXAgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuY2VudGVyLnRleHRPdmVyZmxvdyhcImVsbGlwc2lzXCIpLmJvcmRlcihcIjFweCBzb2xpZCBibGFja1wiKS5wYWQyKDYsIDIpfT5cbiAgICAgICAgICAgICAgICAgICAge2dyb3VwfToge3dhdGNoU3RhdGUucGVuZGluZ1tncm91cF19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+O1xuICAgIH1cbn0iXX0=
|
|
73
|
+
/* _JS_SOURCE_HASH = "8f559dbbe9527016120e06db80675bb022384607e057609b93840bc57618742e"; */
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
+
//exports.PendingStorage = void 0;
|
|
4
|
+
const misc_1 = require("socket-function/src/misc");
|
|
5
|
+
const PendingManager_1 = require("./PendingManager");
|
|
6
|
+
class PendingStorage {
|
|
7
|
+
constructor(pendingGroup, storage) {
|
|
8
|
+
this.pendingGroup = pendingGroup;
|
|
9
|
+
this.storage = storage;
|
|
10
|
+
this.pending = new Map();
|
|
11
|
+
this.updatePending = (0, misc_1.throttleFunction)(100, () => {
|
|
12
|
+
let text = Array.from(this.pending.entries()).map(([key, value]) => `${key}: ${value}`).join(", ");
|
|
13
|
+
(0, PendingManager_1.setPending)(this.pendingGroup, text);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
async get(key) {
|
|
17
|
+
return this.watchPending("get", this.storage.get(key));
|
|
18
|
+
}
|
|
19
|
+
async set(key, value) {
|
|
20
|
+
return this.watchPending("set", this.storage.set(key, value));
|
|
21
|
+
}
|
|
22
|
+
async remove(key) {
|
|
23
|
+
return this.watchPending("remove", this.storage.remove(key));
|
|
24
|
+
}
|
|
25
|
+
async getKeys() {
|
|
26
|
+
return this.watchPending("getKeys", this.storage.getKeys());
|
|
27
|
+
}
|
|
28
|
+
async getInfo(key) {
|
|
29
|
+
return this.watchPending("getInfo", this.storage.getInfo(key));
|
|
30
|
+
}
|
|
31
|
+
watchPending(type, promise) {
|
|
32
|
+
this.pending.set(type, (this.pending.get(type) || 0) + 1);
|
|
33
|
+
void this.updatePending();
|
|
34
|
+
void promise.finally(() => {
|
|
35
|
+
this.pending.set(type, (this.pending.get(type) || 0) - 1);
|
|
36
|
+
if (this.pending.get(type) === 0) {
|
|
37
|
+
this.pending.delete(type);
|
|
38
|
+
}
|
|
39
|
+
void this.updatePending();
|
|
40
|
+
});
|
|
41
|
+
return promise;
|
|
42
|
+
}
|
|
43
|
+
async reset() {
|
|
44
|
+
return this.storage.reset();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.PendingStorage = PendingStorage;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVuZGluZ1N0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJQZW5kaW5nU3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBNEQ7QUFFNUQscURBQThDO0FBRTlDLE1BQWEsY0FBYztJQUV2QixZQUNZLFlBQW9CLEVBQ3BCLE9BQW9CO1FBRHBCLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFIaEMsWUFBTyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBaUM1QixrQkFBYSxHQUFHLElBQUEsdUJBQWdCLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkcsSUFBQSwyQkFBVSxFQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFoQ0MsQ0FBQztJQUNFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVE7UUFDbEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ00sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFXO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ00sS0FBSyxDQUFDLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNNLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBVztRQUM1QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLFlBQVksQ0FBSSxJQUFZLEVBQUUsT0FBbUI7UUFDckQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUQsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUIsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBQ0QsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBTU0sS0FBSyxDQUFDLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNKO0FBMUNELHdDQTBDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRocm90dGxlRnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBJU3RvcmFnZSB9IGZyb20gXCIuL0lTdG9yYWdlXCI7XG5pbXBvcnQgeyBzZXRQZW5kaW5nIH0gZnJvbSBcIi4vUGVuZGluZ01hbmFnZXJcIjtcblxuZXhwb3J0IGNsYXNzIFBlbmRpbmdTdG9yYWdlPFQ+IGltcGxlbWVudHMgSVN0b3JhZ2U8VD4ge1xuICAgIHBlbmRpbmcgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHBlbmRpbmdHcm91cDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHN0b3JhZ2U6IElTdG9yYWdlPFQ+LFxuICAgICkgeyB9XG4gICAgcHVibGljIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy53YXRjaFBlbmRpbmcoXCJnZXRcIiwgdGhpcy5zdG9yYWdlLmdldChrZXkpKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2F0Y2hQZW5kaW5nKFwic2V0XCIsIHRoaXMuc3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgcmVtb3ZlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLndhdGNoUGVuZGluZyhcInJlbW92ZVwiLCB0aGlzLnN0b3JhZ2UucmVtb3ZlKGtleSkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0S2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLndhdGNoUGVuZGluZyhcImdldEtleXNcIiwgdGhpcy5zdG9yYWdlLmdldEtleXMoKSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndhdGNoUGVuZGluZyhcImdldEluZm9cIiwgdGhpcy5zdG9yYWdlLmdldEluZm8oa2V5KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3YXRjaFBlbmRpbmc8VD4odHlwZTogc3RyaW5nLCBwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHRoaXMucGVuZGluZy5zZXQodHlwZSwgKHRoaXMucGVuZGluZy5nZXQodHlwZSkgfHwgMCkgKyAxKTtcbiAgICAgICAgdm9pZCB0aGlzLnVwZGF0ZVBlbmRpbmcoKTtcbiAgICAgICAgdm9pZCBwcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nLnNldCh0eXBlLCAodGhpcy5wZW5kaW5nLmdldCh0eXBlKSB8fCAwKSAtIDEpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZy5nZXQodHlwZSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmcuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm9pZCB0aGlzLnVwZGF0ZVBlbmRpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICBwcml2YXRlIHVwZGF0ZVBlbmRpbmcgPSB0aHJvdHRsZUZ1bmN0aW9uKDEwMCwgKCkgPT4ge1xuICAgICAgICBsZXQgdGV4dCA9IEFycmF5LmZyb20odGhpcy5wZW5kaW5nLmVudHJpZXMoKSkubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06ICR7dmFsdWV9YCkuam9pbihcIiwgXCIpO1xuICAgICAgICBzZXRQZW5kaW5nKHRoaXMucGVuZGluZ0dyb3VwLCB0ZXh0KTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBhc3luYyByZXNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5yZXNldCgpO1xuICAgIH1cbn0iXX0=
|
|
49
|
+
/* _JS_SOURCE_HASH = "ed2840ea8600cecb451e492c01363588df0ab65b7e5c4231cffb60d15727a4b6"; */
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
+
//exports.PrivateFileSystemStorage = void 0;
|
|
4
|
+
class PrivateFileSystemStorage {
|
|
5
|
+
constructor(path) {
|
|
6
|
+
this.path = path;
|
|
7
|
+
}
|
|
8
|
+
async ensureInitialized() {
|
|
9
|
+
var _a;
|
|
10
|
+
if (!this.rootHandle) {
|
|
11
|
+
if (!((_a = navigator.storage) === null || _a === void 0 ? void 0 : _a.getDirectory)) {
|
|
12
|
+
throw new Error("Private File System Access API not supported in this browser");
|
|
13
|
+
}
|
|
14
|
+
this.rootHandle = await navigator.storage.getDirectory();
|
|
15
|
+
}
|
|
16
|
+
return this.rootHandle;
|
|
17
|
+
}
|
|
18
|
+
async directoryExists() {
|
|
19
|
+
try {
|
|
20
|
+
const root = await this.ensureInitialized();
|
|
21
|
+
if (!this.path || this.path === "" || this.path === "/") {
|
|
22
|
+
return true; // Root always exists
|
|
23
|
+
}
|
|
24
|
+
const pathParts = this.path.split("/").filter(part => part.length > 0);
|
|
25
|
+
let currentHandle = root;
|
|
26
|
+
for (const part of pathParts) {
|
|
27
|
+
try {
|
|
28
|
+
currentHandle = await currentHandle.getDirectoryHandle(part);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async getDirectoryHandle(createPath = true) {
|
|
41
|
+
const root = await this.ensureInitialized();
|
|
42
|
+
if (!this.path || this.path === "" || this.path === "/") {
|
|
43
|
+
return root;
|
|
44
|
+
}
|
|
45
|
+
const pathParts = this.path.split("/").filter(part => part.length > 0);
|
|
46
|
+
let currentHandle = root;
|
|
47
|
+
for (const part of pathParts) {
|
|
48
|
+
try {
|
|
49
|
+
currentHandle = await currentHandle.getDirectoryHandle(part, { create: createPath });
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (!createPath) {
|
|
53
|
+
throw new Error(`Directory not found: ${this.path}`);
|
|
54
|
+
}
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return currentHandle;
|
|
59
|
+
}
|
|
60
|
+
async getFileHandle(key, create = false) {
|
|
61
|
+
try {
|
|
62
|
+
const dirHandle = await this.getDirectoryHandle(create);
|
|
63
|
+
return await dirHandle.getFileHandle(key, { create });
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async fileExists(key) {
|
|
70
|
+
try {
|
|
71
|
+
// First check if directory exists
|
|
72
|
+
if (!(await this.directoryExists())) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const dirHandle = await this.getDirectoryHandle(false);
|
|
76
|
+
await dirHandle.getFileHandle(key);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async get(key) {
|
|
84
|
+
// Check if file exists first to avoid unnecessary errors
|
|
85
|
+
if (!(await this.fileExists(key))) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const fileHandle = await this.getFileHandle(key, false);
|
|
90
|
+
if (!fileHandle) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
const file = await fileHandle.getFile();
|
|
94
|
+
const arrayBuffer = await file.arrayBuffer();
|
|
95
|
+
return Buffer.from(arrayBuffer);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.warn(`Error reading file ${key}:`, error);
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async set(key, value) {
|
|
103
|
+
try {
|
|
104
|
+
const fileHandle = await this.getFileHandle(key, true);
|
|
105
|
+
if (!fileHandle) {
|
|
106
|
+
throw new Error(`Failed to create file handle for key: ${key}`);
|
|
107
|
+
}
|
|
108
|
+
const writable = await fileHandle.createWritable();
|
|
109
|
+
await writable.write(value);
|
|
110
|
+
await writable.close();
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
throw new Error(`Failed to write file ${key}: ${error}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async append(key, value) {
|
|
117
|
+
const existingContent = await this.get(key);
|
|
118
|
+
let newContent;
|
|
119
|
+
if (existingContent) {
|
|
120
|
+
newContent = Buffer.concat([existingContent, value]);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
newContent = value;
|
|
124
|
+
}
|
|
125
|
+
await this.set(key, newContent);
|
|
126
|
+
}
|
|
127
|
+
async remove(key) {
|
|
128
|
+
// Check if file exists first to avoid unnecessary errors
|
|
129
|
+
if (!(await this.fileExists(key))) {
|
|
130
|
+
return; // File doesn't exist, nothing to remove
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const dirHandle = await this.getDirectoryHandle(false);
|
|
134
|
+
await dirHandle.removeEntry(key);
|
|
135
|
+
}
|
|
136
|
+
catch (_a) { }
|
|
137
|
+
}
|
|
138
|
+
async getKeys() {
|
|
139
|
+
// Check if directory exists first to avoid unnecessary errors
|
|
140
|
+
if (!(await this.directoryExists())) {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const dirHandle = await this.getDirectoryHandle(false);
|
|
145
|
+
const keys = [];
|
|
146
|
+
// Use the async iterator protocol for FileSystemDirectoryHandle
|
|
147
|
+
for await (const [name, handle] of dirHandle.entries()) {
|
|
148
|
+
if (handle.kind === "file") {
|
|
149
|
+
keys.push(name);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return keys.sort();
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (error instanceof Error && error.message.includes("Directory not found")) {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
throw new Error(`Failed to list files: ${error}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async getInfo(key) {
|
|
162
|
+
let fileHandle = await this.getFileHandle(key, false);
|
|
163
|
+
if (!fileHandle) {
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
let file = await fileHandle.getFile();
|
|
167
|
+
return {
|
|
168
|
+
size: file.size,
|
|
169
|
+
lastModified: file.lastModified,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
async reset() {
|
|
173
|
+
throw new Error("Not implemented");
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.PrivateFileSystemStorage = PrivateFileSystemStorage;
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpdmF0ZUZpbGVTeXN0ZW1TdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUHJpdmF0ZUZpbGVTeXN0ZW1TdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsd0JBQXdCO0lBR2pDLFlBQW9CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO0lBQUksQ0FBQztJQUU3QixLQUFLLENBQUMsaUJBQWlCOztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxDQUFBLE1BQUEsU0FBUyxDQUFDLE9BQU8sMENBQUUsWUFBWSxDQUFBLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZTtRQUN6QixJQUFJLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTVDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3RELE9BQU8sSUFBSSxDQUFDLENBQUMscUJBQXFCO1lBQ3RDLENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksYUFBYSxHQUFHLElBQUksQ0FB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WyJpbXBvcnQgeyBJU3RvcmFnZVJhdyB9IGZyb20gXCIuL0lTdG9yYWdlXCI7XG5cbmV4cG9ydCBjbGFzcyBQcml2YXRlRmlsZVN5c3RlbVN0b3JhZ2UgaW1wbGVtZW50cyBJU3RvcmFnZVJhdyB7XG4gICAgcHJpdmF0ZSByb290SGFuZGxlOiBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXRoOiBzdHJpbmcpIHsgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBlbnN1cmVJbml0aWFsaXplZCgpOiBQcm9taXNlPEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJvb3RIYW5kbGUpIHtcbiAgICAgICAgICAgIGlmICghbmF2aWdhdG9yLnN0b3JhZ2U/LmdldERpcmVjdG9yeSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByaXZhdGUgRmlsZSBTeXN0ZW0gQWNjZXNzIEFQSSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm9vdEhhbmRsZSA9IGF3YWl0IG5hdmlnYXRvci5zdG9yYWdlLmdldERpcmVjdG9yeSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3RIYW5kbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBkaXJlY3RvcnlFeGlzdHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByb290ID0gYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMucGF0aCB8fCB0aGlzLnBhdGggPT09IFwiXCIgfHwgdGhpcy5wYXRoID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBSb290IGFsd2F5cyBleGlzdHNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5wYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIocGFydCA9PiBwYXJ0Lmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRIYW5kbGUgPSByb290O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0aFBhcnRzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEhhbmRsZSA9IGF3YWl0IGN1cnJlbnRIYW5kbGUuZ2V0RGlyZWN0b3J5SGFuZGxlKHBhcnQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREaXJlY3RvcnlIYW5kbGUoY3JlYXRlUGF0aDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcblxuICAgICAgICBpZiAoIXRoaXMucGF0aCB8fCB0aGlzLnBhdGggPT09IFwiXCIgfHwgdGhpcy5wYXRoID09PSBcIi9cIikge1xuICAgICAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMCk7XG4gICAgICAgIGxldCBjdXJyZW50SGFuZGxlID0gcm9vdDtcblxuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0aFBhcnRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRIYW5kbGUgPSBhd2FpdCBjdXJyZW50SGFuZGxlLmdldERpcmVjdG9yeUhhbmRsZShwYXJ0LCB7IGNyZWF0ZTogY3JlYXRlUGF0aCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGlyZWN0b3J5IG5vdCBmb3VuZDogJHt0aGlzLnBhdGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRIYW5kbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRGaWxlSGFuZGxlKGtleTogc3RyaW5nLCBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8RmlsZVN5c3RlbUZpbGVIYW5kbGUgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRpckhhbmRsZSA9IGF3YWl0IHRoaXMuZ2V0RGlyZWN0b3J5SGFuZGxlKGNyZWF0ZSk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZGlySGFuZGxlLmdldEZpbGVIYW5kbGUoa2V5LCB7IGNyZWF0ZSB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZpbGVFeGlzdHMoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgICAgICAgIGlmICghKGF3YWl0IHRoaXMuZGlyZWN0b3J5RXhpc3RzKCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaXJIYW5kbGUgPSBhd2FpdCB0aGlzLmdldERpcmVjdG9yeUhhbmRsZShmYWxzZSk7XG4gICAgICAgICAgICBhd2FpdCBkaXJIYW5kbGUuZ2V0RmlsZUhhbmRsZShrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBleGlzdHMgZmlyc3QgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZXJyb3JzXG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuZmlsZUV4aXN0cyhrZXkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlSGFuZGxlID0gYXdhaXQgdGhpcy5nZXRGaWxlSGFuZGxlKGtleSwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFmaWxlSGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZpbGVIYW5kbGUuZ2V0RmlsZSgpO1xuICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCk7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBFcnJvciByZWFkaW5nIGZpbGUgJHtrZXl9OmAsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlSGFuZGxlID0gYXdhaXQgdGhpcy5nZXRGaWxlSGFuZGxlKGtleSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWZpbGVIYW5kbGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZmlsZSBoYW5kbGUgZm9yIGtleTogJHtrZXl9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHdyaXRhYmxlID0gYXdhaXQgZmlsZUhhbmRsZS5jcmVhdGVXcml0YWJsZSgpO1xuICAgICAgICAgICAgYXdhaXQgd3JpdGFibGUud3JpdGUodmFsdWUpO1xuICAgICAgICAgICAgYXdhaXQgd3JpdGFibGUuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHdyaXRlIGZpbGUgJHtrZXl9OiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFwcGVuZChrZXk6IHN0cmluZywgdmFsdWU6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ0NvbnRlbnQgPSBhd2FpdCB0aGlzLmdldChrZXkpO1xuICAgICAgICBsZXQgbmV3Q29udGVudDogQnVmZmVyO1xuICAgICAgICBpZiAoZXhpc3RpbmdDb250ZW50KSB7XG4gICAgICAgICAgICBuZXdDb250ZW50ID0gQnVmZmVyLmNvbmNhdChbZXhpc3RpbmdDb250ZW50LCB2YWx1ZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3Q29udGVudCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0KGtleSwgbmV3Q29udGVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0cyBmaXJzdCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBlcnJvcnNcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5maWxlRXhpc3RzKGtleSkpKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIEZpbGUgZG9lc24ndCBleGlzdCwgbm90aGluZyB0byByZW1vdmVcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkaXJIYW5kbGUgPSBhd2FpdCB0aGlzLmdldERpcmVjdG9yeUhhbmRsZShmYWxzZSk7XG4gICAgICAgICAgICBhd2FpdCBkaXJIYW5kbGUucmVtb3ZlRW50cnkoa2V5KTtcbiAgICAgICAgfSBjYXRjaCB7IH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0S2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIC8vIENoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHMgZmlyc3QgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZXJyb3JzXG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuZGlyZWN0b3J5RXhpc3RzKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGlySGFuZGxlID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlIYW5kbGUoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAgICAgLy8gVXNlIHRoZSBhc3luYyBpdGVyYXRvciBwcm90b2NvbCBmb3IgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZVxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBbbmFtZSwgaGFuZGxlXSBvZiAoZGlySGFuZGxlIGFzIGFueSkuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5raW5kID09PSBcImZpbGVcIikge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2gobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ga2V5cy5zb3J0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiRGlyZWN0b3J5IG5vdCBmb3VuZFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxpc3QgZmlsZXM6ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHVuZGVmaW5lZCB8IHtcbiAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIGxldCBmaWxlSGFuZGxlID0gYXdhaXQgdGhpcy5nZXRGaWxlSGFuZGxlKGtleSwgZmFsc2UpO1xuICAgICAgICBpZiAoIWZpbGVIYW5kbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbGUgPSBhd2FpdCBmaWxlSGFuZGxlLmdldEZpbGUoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyByZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn0iXX0=
|
|
178
|
+
/* _JS_SOURCE_HASH = "148396348ae7c1ec76d652412f67620680447daaa3a8cfe83212b76412f8bc73"; */
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
+
//exports.StorageSync = void 0;
|
|
4
|
+
const mobxTyped_1 = require("../misc/mobxTyped");
|
|
5
|
+
const types_1 = require("../misc/types");
|
|
6
|
+
// NOTE: At around 500K values (depending on their size to some degree), this will take about 2 minutes to load. But once it does it will be fast. So... keep that in mind. I recommend not exceeding 100K
|
|
7
|
+
class StorageSync {
|
|
8
|
+
constructor(storage) {
|
|
9
|
+
this.storage = storage;
|
|
10
|
+
this.cached = mobxTyped_1.observable.map(undefined, { deep: false });
|
|
11
|
+
this.infoCached = mobxTyped_1.observable.map(undefined, { deep: false });
|
|
12
|
+
this.keys = new Set();
|
|
13
|
+
this.synced = (0, mobxTyped_1.observable)({
|
|
14
|
+
keySeqNum: 0,
|
|
15
|
+
}, undefined, { deep: false });
|
|
16
|
+
this.loadedKeys = false;
|
|
17
|
+
}
|
|
18
|
+
get(key) {
|
|
19
|
+
if (!this.cached.has(key)) {
|
|
20
|
+
this.cached.set(key, undefined);
|
|
21
|
+
void this.getPromise(key);
|
|
22
|
+
}
|
|
23
|
+
if (this.cached.get(key) === undefined) {
|
|
24
|
+
this.synced.keySeqNum;
|
|
25
|
+
}
|
|
26
|
+
return this.cached.get(key);
|
|
27
|
+
}
|
|
28
|
+
set(key, value) {
|
|
29
|
+
if (!this.keys.has(key)) {
|
|
30
|
+
this.keys.add(key);
|
|
31
|
+
this.synced.keySeqNum++;
|
|
32
|
+
}
|
|
33
|
+
this.cached.set(key, value);
|
|
34
|
+
void this.storage.set(key, value);
|
|
35
|
+
}
|
|
36
|
+
remove(key) {
|
|
37
|
+
if (this.keys.has(key)) {
|
|
38
|
+
this.keys.delete(key);
|
|
39
|
+
this.synced.keySeqNum++;
|
|
40
|
+
}
|
|
41
|
+
this.cached.delete(key);
|
|
42
|
+
void this.storage.remove(key);
|
|
43
|
+
}
|
|
44
|
+
getKeys() {
|
|
45
|
+
void this.getKeysPromise();
|
|
46
|
+
this.synced.keySeqNum;
|
|
47
|
+
return Array.from(this.keys);
|
|
48
|
+
}
|
|
49
|
+
getInfo(key) {
|
|
50
|
+
if (!this.infoCached.has(key)) {
|
|
51
|
+
this.infoCached.set(key, { size: 0, lastModified: 0 });
|
|
52
|
+
void this.storage.getInfo(key).then(info => {
|
|
53
|
+
this.infoCached.set(key, info);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return this.infoCached.get(key);
|
|
57
|
+
}
|
|
58
|
+
getValues() {
|
|
59
|
+
let keys = this.getKeys();
|
|
60
|
+
return keys.map(key => this.get(key)).filter(types_1.isDefined);
|
|
61
|
+
}
|
|
62
|
+
getEntries() {
|
|
63
|
+
let keys = this.getKeys();
|
|
64
|
+
return keys.map(key => [key, this.get(key)]).filter(([_, value]) => (0, types_1.isDefined)(value));
|
|
65
|
+
}
|
|
66
|
+
async getPromise(key) {
|
|
67
|
+
let value = this.cached.get(key);
|
|
68
|
+
if (value === undefined) {
|
|
69
|
+
value = await this.storage.get(key);
|
|
70
|
+
if (this.cached.get(key) === undefined) {
|
|
71
|
+
this.cached.set(key, value);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
async getKeysPromise() {
|
|
77
|
+
if (this.pendingGetKeys) {
|
|
78
|
+
return this.pendingGetKeys;
|
|
79
|
+
}
|
|
80
|
+
if (this.loadedKeys)
|
|
81
|
+
return Array.from(this.keys);
|
|
82
|
+
this.loadedKeys = true;
|
|
83
|
+
this.pendingGetKeys = this.storage.getKeys();
|
|
84
|
+
void this.pendingGetKeys.finally(() => {
|
|
85
|
+
this.pendingGetKeys = undefined;
|
|
86
|
+
});
|
|
87
|
+
let keys = await this.pendingGetKeys;
|
|
88
|
+
if (keys.length > 0) {
|
|
89
|
+
this.keys = new Set(keys);
|
|
90
|
+
this.synced.keySeqNum++;
|
|
91
|
+
}
|
|
92
|
+
return Array.from(this.keys);
|
|
93
|
+
}
|
|
94
|
+
reload() {
|
|
95
|
+
this.loadedKeys = false;
|
|
96
|
+
this.synced.keySeqNum++;
|
|
97
|
+
this.cached.clear();
|
|
98
|
+
this.infoCached.clear();
|
|
99
|
+
this.keys.clear();
|
|
100
|
+
}
|
|
101
|
+
reloadKeys() {
|
|
102
|
+
this.loadedKeys = false;
|
|
103
|
+
this.synced.keySeqNum++;
|
|
104
|
+
}
|
|
105
|
+
reloadKey(key) {
|
|
106
|
+
this.cached.delete(key);
|
|
107
|
+
this.infoCached.delete(key);
|
|
108
|
+
this.keys.delete(key);
|
|
109
|
+
}
|
|
110
|
+
async reset() {
|
|
111
|
+
this.cached.clear();
|
|
112
|
+
this.infoCached.clear();
|
|
113
|
+
this.keys.clear();
|
|
114
|
+
this.synced.keySeqNum++;
|
|
115
|
+
await this.storage.reset();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.StorageSync = StorageSync;
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZU9ic2VydmFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJTdG9yYWdlT2JzZXJ2YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBK0M7QUFDL0MseUNBQTBDO0FBRzFDLDBNQUEwTTtBQUMxTSxNQUFhLFdBQVc7SUFRcEIsWUFBbUIsT0FBb0I7UUFBcEIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQVB2QyxXQUFNLEdBQUcsc0JBQVUsQ0FBQyxHQUFHLENBQXdCLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLGVBQVUsR0FBRyxzQkFBVSxDQUFDLEdBQUcsQ0FBNkQsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEgsU0FBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDekIsV0FBTSxHQUFHLElBQUEsc0JBQVUsRUFBQztZQUNoQixTQUFTLEVBQUUsQ0FBQztTQUNmLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUE4QnZCLGVBQVUsR0FBRyxLQUFLLENBQUM7SUE1QmdCLENBQUM7SUFFckMsR0FBRyxDQUFDLEdBQVc7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxJ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QUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLE1BQU07UUFDVCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDTSxVQUFVO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ00sU0FBUyxDQUFDLEdBQVc7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNKO0FBcEhELGtDQW9IQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwiLi4vbWlzYy9tb2J4VHlwZWRcIjtcbmltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gXCIuLi9taXNjL3R5cGVzXCI7XG5pbXBvcnQgeyBJU3RvcmFnZSwgSVN0b3JhZ2VTeW5jIH0gZnJvbSBcIi4vSVN0b3JhZ2VcIjtcblxuLy8gTk9URTogQXQgYXJvdW5kIDUwMEsgdmFsdWVzIChkZXBlbmRpbmcgb24gdGhlaXIgc2l6ZSB0byBzb21lIGRlZ3JlZSksIHRoaXMgd2lsbCB0YWtlIGFib3V0IDIgbWludXRlcyB0byBsb2FkLiBCdXQgb25jZSBpdCBkb2VzIGl0IHdpbGwgYmUgZmFzdC4gU28uLi4ga2VlcCB0aGF0IGluIG1pbmQuIEkgcmVjb21tZW5kIG5vdCBleGNlZWRpbmcgMTAwS1xuZXhwb3J0IGNsYXNzIFN0b3JhZ2VTeW5jPFQ+IGltcGxlbWVudHMgSVN0b3JhZ2VTeW5jPFQ+IHtcbiAgICBjYWNoZWQgPSBvYnNlcnZhYmxlLm1hcDxzdHJpbmcsIFQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBkZWVwOiBmYWxzZSB9KTtcbiAgICBpbmZvQ2FjaGVkID0gb2JzZXJ2YWJsZS5tYXA8c3RyaW5nLCB7IHNpemU6IG51bWJlcjsgbGFzdE1vZGlmaWVkOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGRlZXA6IGZhbHNlIH0pO1xuICAgIGtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBzeW5jZWQgPSBvYnNlcnZhYmxlKHtcbiAgICAgICAga2V5U2VxTnVtOiAwLFxuICAgIH0sIHVuZGVmaW5lZCwgeyBkZWVwOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdG9yYWdlOiBJU3RvcmFnZTxUPikgeyB9XG5cbiAgICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZWQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkLnNldChrZXksIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB2b2lkIHRoaXMuZ2V0UHJvbWlzZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZC5nZXQoa2V5KSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNlZC5rZXlTZXFOdW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkLmdldChrZXkpO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMua2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5rZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgdGhpcy5zeW5jZWQua2V5U2VxTnVtKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB2b2lkIHRoaXMuc3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMua2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5rZXlzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgdGhpcy5zeW5jZWQua2V5U2VxTnVtKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWQuZGVsZXRlKGtleSk7XG4gICAgICAgIHZvaWQgdGhpcy5zdG9yYWdlLnJlbW92ZShrZXkpO1xuICAgIH1cbiAgICBwcml2YXRlIGxvYWRlZEtleXMgPSBmYWxzZTtcbiAgICBwdWJsaWMgZ2V0S2V5cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHZvaWQgdGhpcy5nZXRLZXlzUHJvbWlzZSgpO1xuICAgICAgICB0aGlzLnN5bmNlZC5rZXlTZXFOdW07XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMua2V5cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluZm8oa2V5OiBzdHJpbmcpOiB7IHNpemU6IG51bWJlcjsgbGFzdE1vZGlmaWVkOiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy5pbmZvQ2FjaGVkLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLmluZm9DYWNoZWQuc2V0KGtleSwgeyBzaXplOiAwLCBsYXN0TW9kaWZpZWQ6IDAgfSk7XG4gICAgICAgICAgICB2b2lkIHRoaXMuc3RvcmFnZS5nZXRJbmZvKGtleSkudGhlbihpbmZvID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZm9DYWNoZWQuc2V0KGtleSwgaW5mbyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbmZvQ2FjaGVkLmdldChrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZXMoKTogVFtdIHtcbiAgICAgICAgbGV0IGtleXMgPSB0aGlzLmdldEtleXMoKTtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKGtleSA9PiB0aGlzLmdldChrZXkpKS5maWx0ZXIoaXNEZWZpbmVkKTtcbiAgICB9XG4gICAgcHVibGljIGdldEVudHJpZXMoKTogW3N0cmluZywgVF1bXSB7XG4gICAgICAgIGxldCBrZXlzID0gdGhpcy5nZXRLZXlzKCk7XG4gICAgICAgIHJldHVybiBrZXlzLm1hcChrZXkgPT4gW2tleSwgdGhpcy5nZXQoa2V5KV0pLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gaXNEZWZpbmVkKHZhbHVlKSkgYXMgW3N0cmluZywgVF1bXTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQcm9taXNlKGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuY2FjaGVkLmdldChrZXkpO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZWQuZ2V0KGtleSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHByaXZhdGUgcGVuZGluZ0dldEtleXM6IFByb21pc2U8c3RyaW5nW10+IHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyBhc3luYyBnZXRLZXlzUHJvbWlzZSgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdHZXRLZXlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wZW5kaW5nR2V0S2V5cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sb2FkZWRLZXlzKSByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmtleXMpO1xuICAgICAgICB0aGlzLmxvYWRlZEtleXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnBlbmRpbmdHZXRLZXlzID0gdGhpcy5zdG9yYWdlLmdldEtleXMoKTtcbiAgICAgICAgdm9pZCB0aGlzLnBlbmRpbmdHZXRLZXlzLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nR2V0S2V5cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBrZXlzID0gYXdhaXQgdGhpcy5wZW5kaW5nR2V0S2V5cztcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5rZXlzID0gbmV3IFNldChrZXlzKTtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmtleVNlcU51bSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMua2V5cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbG9hZCgpIHtcbiAgICAgICAgdGhpcy5sb2FkZWRLZXlzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3luY2VkLmtleVNlcU51bSsrO1xuICAgICAgICB0aGlzLmNhY2hlZC5jbGVhcigpO1xuICAgICAgICB0aGlzLmluZm9DYWNoZWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5rZXlzLmNsZWFyKCk7XG4gICAgfVxuICAgIHB1YmxpYyByZWxvYWRLZXlzKCkge1xuICAgICAgICB0aGlzLmxvYWRlZEtleXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zeW5jZWQua2V5U2VxTnVtKys7XG4gICAgfVxuICAgIHB1YmxpYyByZWxvYWRLZXkoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jYWNoZWQuZGVsZXRlKGtleSk7XG4gICAgICAgIHRoaXMuaW5mb0NhY2hlZC5kZWxldGUoa2V5KTtcbiAgICAgICAgdGhpcy5rZXlzLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZXNldCgpIHtcbiAgICAgICAgdGhpcy5jYWNoZWQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5pbmZvQ2FjaGVkLmNsZWFyKCk7XG4gICAgICAgIHRoaXMua2V5cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnN5bmNlZC5rZXlTZXFOdW0rKztcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlc2V0KCk7XG4gICAgfVxufSJdfQ==
|
|
120
|
+
/* _JS_SOURCE_HASH = "83f7e3709b75068426ee34cfb27c8af75bbde2d429ccc896355bd2c176744eaa"; */
|