@stemy/backend 6.0.3 → 6.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/commands/clear.command.d.ts +6 -0
- package/commands/fixtures.command.d.ts +9 -0
- package/commands/move-assets.command.d.ts +10 -0
- package/common-types.d.ts +22 -12
- package/esm2022/commands/clear.command.mjs +15 -0
- package/esm2022/commands/fixtures.command.mjs +26 -0
- package/esm2022/commands/index.mjs +6 -4
- package/esm2022/commands/move-assets.command.mjs +45 -0
- package/esm2022/common-types.mjs +3 -3
- package/esm2022/public_api.mjs +18 -6
- package/esm2022/services/assets.mjs +46 -13
- package/esm2022/services/backend-provider.mjs +7 -1
- package/esm2022/services/cli-terminal.mjs +56 -0
- package/esm2022/services/configuration.mjs +11 -4
- package/esm2022/services/drivers/asset-fallback-driver.mjs +35 -0
- package/esm2022/services/drivers/asset-grid.driver.mjs +5 -7
- package/esm2022/services/drivers/asset-local.driver.mjs +19 -18
- package/esm2022/services/drivers/asset-storage-proxy.driver.mjs +48 -0
- package/esm2022/services/drivers/fallback-readable.mjs +34 -0
- package/esm2022/services/drivers/fallback-streams.mjs +34 -0
- package/esm2022/services/entities/asset.mjs +50 -15
- package/esm2022/services/entities/temp-asset.mjs +15 -3
- package/esm2022/services/terminal-manager.mjs +30 -16
- package/esm2022/socket-controllers/socket-terminal.mjs +89 -0
- package/esm2022/socket-controllers/terminal.controller.mjs +3 -3
- package/fesm2022/stemy-backend.mjs +423 -140
- package/fesm2022/stemy-backend.mjs.map +1 -1
- package/package.json +3 -2
- package/public_api.d.ts +2 -1
- package/services/assets.d.ts +13 -5
- package/services/cli-terminal.d.ts +18 -0
- package/services/configuration.d.ts +2 -0
- package/services/drivers/asset-fallback-driver.d.ts +11 -0
- package/services/drivers/asset-grid.driver.d.ts +4 -5
- package/services/drivers/asset-local.driver.d.ts +6 -6
- package/services/drivers/asset-storage-proxy.driver.d.ts +14 -0
- package/services/drivers/fallback-readable.d.ts +2 -0
- package/services/drivers/fallback-streams.d.ts +2 -0
- package/services/entities/asset.d.ts +8 -3
- package/services/entities/temp-asset.d.ts +6 -1
- package/services/terminal-manager.d.ts +3 -0
- package/socket-controllers/socket-terminal.d.ts +19 -0
- package/socket-controllers/terminal.controller.d.ts +2 -2
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as readline from "readline";
|
|
2
|
+
export class CliTerminal {
|
|
3
|
+
callbacks = new Set();
|
|
4
|
+
stdin = process.stdin;
|
|
5
|
+
constructor() {
|
|
6
|
+
// Set stdin to raw mode to get character-by-character data
|
|
7
|
+
if (this.stdin.isTTY) {
|
|
8
|
+
this.stdin.setRawMode(true);
|
|
9
|
+
}
|
|
10
|
+
this.clearScreen();
|
|
11
|
+
this.stdin.setEncoding('utf8');
|
|
12
|
+
this.stdin.on('data', this.handleInput);
|
|
13
|
+
}
|
|
14
|
+
clearScreen() {
|
|
15
|
+
readline.cursorTo(process.stdout, 0, 0);
|
|
16
|
+
readline.clearScreenDown(process.stdout);
|
|
17
|
+
}
|
|
18
|
+
handleInput = (data) => {
|
|
19
|
+
const input = data.toString();
|
|
20
|
+
// Standard "Ctrl+C" exit handling
|
|
21
|
+
if (input === '\u0003') {
|
|
22
|
+
this.clearScreen();
|
|
23
|
+
this.dispose();
|
|
24
|
+
}
|
|
25
|
+
this.callbacks.forEach((cb) => cb(input));
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Registers a listener for data input.
|
|
29
|
+
* Returns an IDisposable to unregister the listener.
|
|
30
|
+
*/
|
|
31
|
+
onData(cb) {
|
|
32
|
+
this.callbacks.add(cb);
|
|
33
|
+
return {
|
|
34
|
+
dispose: () => this.callbacks.delete(cb),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
write(data) {
|
|
38
|
+
process.stdout.write(data);
|
|
39
|
+
}
|
|
40
|
+
writeln(data) {
|
|
41
|
+
process.stdout.write(data + '\n');
|
|
42
|
+
}
|
|
43
|
+
loadAddon(addon) {
|
|
44
|
+
addon.activate(this);
|
|
45
|
+
}
|
|
46
|
+
dispose() {
|
|
47
|
+
if (this.stdin.isTTY) {
|
|
48
|
+
this.stdin.setRawMode(false);
|
|
49
|
+
}
|
|
50
|
+
this.stdin.removeListener('data', this.handleInput);
|
|
51
|
+
this.stdin.pause();
|
|
52
|
+
this.callbacks.clear();
|
|
53
|
+
process.exit();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRlcm1pbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2NsaS10ZXJtaW5hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUlyQyxNQUFNLE9BQU8sV0FBVztJQUNaLFNBQVMsR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNsRCxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQTBCLENBQUM7SUFFbkQ7UUFDSSwyREFBMkQ7UUFDM0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sV0FBVztRQUNmLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLFdBQVcsR0FBRyxDQUFDLElBQXFCLEVBQVEsRUFBRTtRQUNsRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFOUIsa0NBQWtDO1FBQ2xDLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSSxNQUFNLENBQUMsRUFBeUI7UUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsT0FBTztZQUNILE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDM0MsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBWTtRQUNyQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sT0FBTyxDQUFDLElBQVk7UUFDdkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxTQUFTLENBQUMsS0FBcUI7UUFDbEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gXCJyZWFkbGluZVwiO1xyXG5pbXBvcnQge0lEaXNwb3NhYmxlLCBJVGVybWluYWxBZGRvbn0gZnJvbSBcIkBzdGVteS90ZXJtaW5hbC1jb21tYW5kcy1hZGRvblwiO1xyXG5pbXBvcnQge0lUZXJtaW5hbH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENsaVRlcm1pbmFsIGltcGxlbWVudHMgSVRlcm1pbmFsIHtcclxuICAgIHByaXZhdGUgY2FsbGJhY2tzOiBTZXQ8KGRhdGE6IHN0cmluZykgPT4gYW55PiA9IG5ldyBTZXQoKTtcclxuICAgIHByaXZhdGUgc3RkaW4gPSBwcm9jZXNzLnN0ZGluIGFzIE5vZGVKUy5SZWFkU3RyZWFtO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIC8vIFNldCBzdGRpbiB0byByYXcgbW9kZSB0byBnZXQgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciBkYXRhXHJcbiAgICAgICAgaWYgKHRoaXMuc3RkaW4uaXNUVFkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGRpbi5zZXRSYXdNb2RlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNsZWFyU2NyZWVuKCk7XHJcbiAgICAgICAgdGhpcy5zdGRpbi5zZXRFbmNvZGluZygndXRmOCcpO1xyXG4gICAgICAgIHRoaXMuc3RkaW4ub24oJ2RhdGEnLCB0aGlzLmhhbmRsZUlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFyU2NyZWVuKCk6IHZvaWQge1xyXG4gICAgICAgIHJlYWRsaW5lLmN1cnNvclRvKHByb2Nlc3Muc3Rkb3V0LCAwLCAwKTtcclxuICAgICAgICByZWFkbGluZS5jbGVhclNjcmVlbkRvd24ocHJvY2Vzcy5zdGRvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlSW5wdXQgPSAoZGF0YTogQnVmZmVyIHwgc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBkYXRhLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIC8vIFN0YW5kYXJkIFwiQ3RybCtDXCIgZXhpdCBoYW5kbGluZ1xyXG4gICAgICAgIGlmIChpbnB1dCA9PT0gJ1xcdTAwMDMnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTY3JlZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNhbGxiYWNrcy5mb3JFYWNoKChjYikgPT4gY2IoaW5wdXQpKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgYSBsaXN0ZW5lciBmb3IgZGF0YSBpbnB1dC5cclxuICAgICAqIFJldHVybnMgYW4gSURpc3Bvc2FibGUgdG8gdW5yZWdpc3RlciB0aGUgbGlzdGVuZXIuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkRhdGEoY2I6IChkYXRhOiBzdHJpbmcpID0+IGFueSk6IElEaXNwb3NhYmxlIHtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrcy5hZGQoY2IpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRpc3Bvc2U6ICgpID0+IHRoaXMuY2FsbGJhY2tzLmRlbGV0ZShjYiksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgd3JpdGUoZGF0YTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdyaXRlbG4oZGF0YTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoZGF0YSArICdcXG4nKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEFkZG9uKGFkZG9uOiBJVGVybWluYWxBZGRvbik6IHZvaWQge1xyXG4gICAgICAgIGFkZG9uLmFjdGl2YXRlKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0ZGluLmlzVFRZKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RkaW4uc2V0UmF3TW9kZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RkaW4ucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCB0aGlzLmhhbmRsZUlucHV0KTtcclxuICAgICAgICB0aGlzLnN0ZGluLnBhdXNlKCk7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFja3MuY2xlYXIoKTtcclxuICAgICAgICBwcm9jZXNzLmV4aXQoKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -4,10 +4,12 @@ import dotenv from "dotenv";
|
|
|
4
4
|
import { PARAMETER } from "../common-types";
|
|
5
5
|
import { colorize, ConsoleColor, convertValue, getType, isFunction } from "../utils";
|
|
6
6
|
let Configuration = class Configuration {
|
|
7
|
+
isCli;
|
|
7
8
|
paramMap;
|
|
8
9
|
paramValues;
|
|
9
10
|
constructor(params) {
|
|
10
11
|
dotenv.config();
|
|
12
|
+
this.isCli = process.env.IS_CLI === 'true';
|
|
11
13
|
this.paramMap = {};
|
|
12
14
|
this.paramValues = {};
|
|
13
15
|
(params || []).forEach(param => this.add(param));
|
|
@@ -28,15 +30,15 @@ let Configuration = class Configuration {
|
|
|
28
30
|
const value = isFunction(param.resolver)
|
|
29
31
|
? param.resolver(envValue, helper)
|
|
30
32
|
: convertValue(envValue, getType(param.defaultValue));
|
|
31
|
-
|
|
33
|
+
this.log(colorize(`Processing param value`, ConsoleColor.FgYellow), colorize(param.name, ConsoleColor.FgGreen), colorize(envName, ConsoleColor.FgBlue), `"${envValue}"`, value);
|
|
32
34
|
return value;
|
|
33
35
|
}
|
|
34
36
|
else if (isFunction(param.resolver)) {
|
|
35
37
|
const value = param.resolver(param.defaultValue, helper);
|
|
36
|
-
|
|
38
|
+
this.log(colorize(`Processing default param value`, ConsoleColor.FgYellow), colorize(param.name, ConsoleColor.FgGreen), param.defaultValue, value);
|
|
37
39
|
return value;
|
|
38
40
|
}
|
|
39
|
-
|
|
41
|
+
this.log(colorize(`Using default param value`, ConsoleColor.FgYellow), colorize(param.name, ConsoleColor.FgGreen), param.defaultValue);
|
|
40
42
|
return param.defaultValue;
|
|
41
43
|
}
|
|
42
44
|
hasParam(name) {
|
|
@@ -58,6 +60,11 @@ let Configuration = class Configuration {
|
|
|
58
60
|
}
|
|
59
61
|
return this.paramValues[name];
|
|
60
62
|
}
|
|
63
|
+
log(...args) {
|
|
64
|
+
if (this.isCli)
|
|
65
|
+
return;
|
|
66
|
+
console.log(...args);
|
|
67
|
+
}
|
|
61
68
|
};
|
|
62
69
|
Configuration = __decorate([
|
|
63
70
|
singleton(),
|
|
@@ -65,4 +72,4 @@ Configuration = __decorate([
|
|
|
65
72
|
__metadata("design:paramtypes", [Array])
|
|
66
73
|
], Configuration);
|
|
67
74
|
export { Configuration };
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLFNBQVMsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRzVFLElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQWE7SUFFYixLQUFLLENBQVU7SUFDZCxRQUFRLENBQThCO0lBQ3RDLFdBQVcsQ0FBd0I7SUFFN0MsWUFBa0MsTUFBbUI7UUFDakQsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRVMsR0FBRyxDQUFDLEtBQWdCO1FBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN6RCxhQUFhLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDaEQsYUFBYSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMs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QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxvQ0FBb0MsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLEdBQUcsQ0FBQyxHQUFHLElBQVc7UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDSixDQUFBO0FBbEZZLGFBQWE7SUFEekIsU0FBUyxFQUFFO0lBT0ssV0FBQSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7O0dBTnhCLGFBQWEsQ0FrRnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RBbGwsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xyXG5cclxuaW1wb3J0IHtQQVJBTUVURVIsIFBhcmFtZXRlcn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2NvbG9yaXplLCBDb25zb2xlQ29sb3IsIGNvbnZlcnRWYWx1ZSwgZ2V0VHlwZSwgaXNGdW5jdGlvbn0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb24ge1xyXG5cclxuICAgIHJlYWRvbmx5IGlzQ2xpOiBib29sZWFuO1xyXG4gICAgcHJvdGVjdGVkIHBhcmFtTWFwOiB7W25hbWU6IHN0cmluZ106IFBhcmFtZXRlcn07XHJcbiAgICBwcm90ZWN0ZWQgcGFyYW1WYWx1ZXM6IHtbbmFtZTogc3RyaW5nXTogYW55fTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihAaW5qZWN0QWxsKFBBUkFNRVRFUikgcGFyYW1zOiBQYXJhbWV0ZXJbXSkge1xyXG4gICAgICAgIGRvdGVudi5jb25maWcoKTtcclxuICAgICAgICB0aGlzLmlzQ2xpID0gcHJvY2Vzcy5lbnYuSVNfQ0xJID09PSAndHJ1ZSc7XHJcbiAgICAgICAgdGhpcy5wYXJhbU1hcCA9IHt9O1xyXG4gICAgICAgIHRoaXMucGFyYW1WYWx1ZXMgPSB7fTtcclxuICAgICAgICAocGFyYW1zIHx8IFtdKS5mb3JFYWNoKHBhcmFtID0+IHRoaXMuYWRkKHBhcmFtKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFkZChwYXJhbTogUGFyYW1ldGVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdQYXJhbSA9IHRoaXMucGFyYW1NYXBbcGFyYW0ubmFtZV0gfHwgcGFyYW07XHJcbiAgICAgICAgZXhpc3RpbmdQYXJhbS5kZWZhdWx0VmFsdWUgPSBwYXJhbS5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgZXhpc3RpbmdQYXJhbS5yZXNvbHZlciA9IHBhcmFtLnJlc29sdmVyIHx8IGV4aXN0aW5nUGFyYW0ucmVzb2x2ZXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbU1hcFtwYXJhbS5uYW1lXSA9IGV4aXN0aW5nUGFyYW07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlc29sdmVWYWx1ZShwYXJhbTogUGFyYW1ldGVyLCBhbHJlYWR5UmVzb2x2ZWQ6IHN0cmluZ1tdKTogYW55IHtcclxuICAgICAgICBjb25zdCBlbnZOYW1lID0gcGFyYW0ubmFtZS5yZXBsYWNlKC9cXC4/KFtBLVp8MC05XSspL2csIGZ1bmN0aW9uICh4LCB5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIl9cIiArIHkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgIH0pLnJlcGxhY2UoL1xcLi9naSwgXCJfXCIpLnJlcGxhY2UoL15fLywgXCJcIikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBlbnZWYWx1ZSA9IHByb2Nlc3MuZW52W2Vudk5hbWVdO1xyXG4gICAgICAgIGNvbnN0IGhlbHBlciA9IChwOiBzdHJpbmcpID0+IHRoaXMucmVzb2x2ZUludGVybmFsKHAsIGFscmVhZHlSZXNvbHZlZCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBlbnZWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRnVuY3Rpb24ocGFyYW0ucmVzb2x2ZXIpXHJcbiAgICAgICAgICAgICAgICA/IHBhcmFtLnJlc29sdmVyKGVudlZhbHVlLCBoZWxwZXIpXHJcbiAgICAgICAgICAgICAgICA6IGNvbnZlcnRWYWx1ZShlbnZWYWx1ZSwgZ2V0VHlwZShwYXJhbS5kZWZhdWx0VmFsdWUpKTtcclxuICAgICAgICAgICAgdGhpcy5sb2coXHJcbiAgICAgICAgICAgICAgICBjb2xvcml6ZShgUHJvY2Vzc2luZyBwYXJhbSB2YWx1ZWAsIENvbnNvbGVDb2xvci5GZ1llbGxvdyksXHJcbiAgICAgICAgICAgICAgICBjb2xvcml6ZShwYXJhbS5uYW1lLCBDb25zb2xlQ29sb3IuRmdHcmVlbiksXHJcbiAgICAgICAgICAgICAgICBjb2xvcml6ZShlbnZOYW1lLCBDb25zb2xlQ29sb3IuRmdCbHVlKSxcclxuICAgICAgICAgICAgICAgIGBcIiR7ZW52VmFsdWV9XCJgLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihwYXJhbS5yZXNvbHZlcikpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbS5yZXNvbHZlcihwYXJhbS5kZWZhdWx0VmFsdWUsIGhlbHBlcik7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKFxyXG4gICAgICAgICAgICAgICAgY29sb3JpemUoYFByb2Nlc3NpbmcgZGVmYXVsdCBwYXJhbSB2YWx1ZWAsIENvbnNvbGVDb2xvci5GZ1llbGxvdyksXHJcbiAgICAgICAgICAgICAgICBjb2xvcml6ZShwYXJhbS5uYW1lLCBDb25zb2xlQ29sb3IuRmdHcmVlbiksXHJcbiAgICAgICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9nKFxyXG4gICAgICAgICAgICBjb2xvcml6ZShgVXNpbmcgZGVmYXVsdCBwYXJhbSB2YWx1ZWAsIENvbnNvbGVDb2xvci5GZ1llbGxvdyksXHJcbiAgICAgICAgICAgIGNvbG9yaXplKHBhcmFtLm5hbWUsIENvbnNvbGVDb2xvci5GZ0dyZWVuKSxcclxuICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtLmRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNQYXJhbShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnBhcmFtTWFwW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc29sdmUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlSW50ZXJuYWwobmFtZSwgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCByZXNvbHZlSW50ZXJuYWwobmFtZTogc3RyaW5nLCBhbHJlYWR5UmVzb2x2ZWQ6IHN0cmluZ1tdKTogYW55IHtcclxuICAgICAgICBpZiAoYWxyZWFkeVJlc29sdmVkLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZDogJHthbHJlYWR5UmVzb2x2ZWQuam9pbihcIiAtPiBcIil9IC0+ICR7bmFtZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWxyZWFkeVJlc29sdmVkLnB1c2gobmFtZSk7XHJcbiAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLnBhcmFtTWFwW25hbWVdO1xyXG4gICAgICAgIGlmICghcGFyYW0pIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIHdpdGggbmFtZTogJyR7bmFtZX0nIGRvZXMgbm90IGV4aXN0cyBpbiBjb25maWd1cmF0aW9uYCk7XHJcbiAgICAgICAgaWYgKCEobmFtZSBpbiB0aGlzLnBhcmFtVmFsdWVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtVmFsdWVzW25hbWVdID0gdGhpcy5yZXNvbHZlVmFsdWUocGFyYW0sIGFscmVhZHlSZXNvbHZlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtVmFsdWVzW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBsb2coLi4uYXJnczogYW55W10pIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NsaSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { inject, injectable } from "tsyringe";
|
|
3
|
+
import { ASSET_FALLBACK_DRIVER, ASSET_MAIN_DRIVER } from "../../common-types";
|
|
4
|
+
import { createFallbackReadable, createFallbackWritable } from "./fallback-streams";
|
|
5
|
+
let AssetFallbackDriver = class AssetFallbackDriver {
|
|
6
|
+
main;
|
|
7
|
+
fallback;
|
|
8
|
+
constructor(main, fallback) {
|
|
9
|
+
this.main = main;
|
|
10
|
+
this.fallback = fallback;
|
|
11
|
+
}
|
|
12
|
+
openDownloadStream(id) {
|
|
13
|
+
return createFallbackReadable(this.main.openDownloadStream(id), () => this.fallback.openDownloadStream(id));
|
|
14
|
+
}
|
|
15
|
+
openUploadStream(filename, opts) {
|
|
16
|
+
return createFallbackWritable(this.main.openUploadStream(filename, opts), () => this.fallback.openUploadStream(filename, opts));
|
|
17
|
+
}
|
|
18
|
+
async delete(id) {
|
|
19
|
+
try {
|
|
20
|
+
await this.main.delete(id);
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
console.log("Failed to delete from primary: ", e.message);
|
|
24
|
+
await this.fallback.delete(id);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
AssetFallbackDriver = __decorate([
|
|
29
|
+
injectable(),
|
|
30
|
+
__param(0, inject(ASSET_MAIN_DRIVER)),
|
|
31
|
+
__param(1, inject(ASSET_FALLBACK_DRIVER)),
|
|
32
|
+
__metadata("design:paramtypes", [Object, Object])
|
|
33
|
+
], AssetFallbackDriver);
|
|
34
|
+
export { AssetFallbackDriver };
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtZmFsbGJhY2stZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtZmFsbGJhY2stZHJpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUU1QyxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUlwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRzNFLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW1CO0lBRXFCO0lBQ0k7SUFEckQsWUFBaUQsSUFBa0IsRUFDZCxRQUFzQjtRQUQxQixTQUFJLEdBQUosSUFBSSxDQUFjO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBYztJQUMzRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBWTtRQUMzQixPQUFPLHNCQUFzQixDQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUNoQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUM3QyxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsSUFBdUI7UUFDdEQsT0FBTyxzQkFBc0IsQ0FDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQzFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUN2RCxDQUFDO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBWTtRQUNyQixJQUFJLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0wsQ0FBQztDQUNKLENBQUE7QUE1QlksbUJBQW1CO0lBRC9CLFVBQVUsRUFBRTtJQUdJLFdBQUEsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDekIsV0FBQSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQTs7R0FIakMsbUJBQW1CLENBNEIvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcclxuaW1wb3J0IHtpbmplY3QsIGluamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge1xyXG4gICAgQVNTRVRfRkFMTEJBQ0tfRFJJVkVSLFxyXG4gICAgQVNTRVRfTUFJTl9EUklWRVIsXHJcbiAgICBJQXNzZXREcml2ZXIsXHJcbiAgICBJQXNzZXRVcGxvYWRPcHRzLFxyXG4gICAgSUFzc2V0VXBsb2FkU3RyZWFtXHJcbn0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2NyZWF0ZUZhbGxiYWNrUmVhZGFibGUsIGNyZWF0ZUZhbGxiYWNrV3JpdGFibGV9IGZyb20gXCIuL2ZhbGxiYWNrLXN0cmVhbXNcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFzc2V0RmFsbGJhY2tEcml2ZXIgaW1wbGVtZW50cyBJQXNzZXREcml2ZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBpbmplY3QoQVNTRVRfTUFJTl9EUklWRVIpIHByb3RlY3RlZCBtYWluOiBJQXNzZXREcml2ZXIsXHJcbiAgICAgICAgICAgICAgICBAaW5qZWN0KEFTU0VUX0ZBTExCQUNLX0RSSVZFUikgcHJvdGVjdGVkIGZhbGxiYWNrOiBJQXNzZXREcml2ZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRG93bmxvYWRTdHJlYW0oaWQ6IE9iamVjdElkKTogUmVhZGFibGUge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVGYWxsYmFja1JlYWRhYmxlKFxyXG4gICAgICAgICAgICB0aGlzLm1haW4ub3BlbkRvd25sb2FkU3RyZWFtKGlkKSxcclxuICAgICAgICAgICAgKCkgPT4gdGhpcy5mYWxsYmFjay5vcGVuRG93bmxvYWRTdHJlYW0oaWQpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIG9wdHM/OiBJQXNzZXRVcGxvYWRPcHRzKTogSUFzc2V0VXBsb2FkU3RyZWFtIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlRmFsbGJhY2tXcml0YWJsZShcclxuICAgICAgICAgICAgdGhpcy5tYWluLm9wZW5VcGxvYWRTdHJlYW0oZmlsZW5hbWUsIG9wdHMpLFxyXG4gICAgICAgICAgICAoKSA9PiB0aGlzLmZhbGxiYWNrLm9wZW5VcGxvYWRTdHJlYW0oZmlsZW5hbWUsIG9wdHMpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUoaWQ6IE9iamVjdElkKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tYWluLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZhaWxlZCB0byBkZWxldGUgZnJvbSBwcmltYXJ5OiBcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5mYWxsYmFjay5kZWxldGUoaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -3,20 +3,18 @@ import { injectable } from "tsyringe";
|
|
|
3
3
|
import { GridFSBucket as BucketImpl } from 'mongodb/lib/gridfs';
|
|
4
4
|
import { MongoConnector } from "../mongo-connector";
|
|
5
5
|
let AssetGridDriver = class AssetGridDriver {
|
|
6
|
-
metaCollection;
|
|
7
6
|
bucket;
|
|
8
7
|
constructor(connector) {
|
|
9
8
|
this.bucket = new BucketImpl(connector.database, { bucketName: 'assets' });
|
|
10
|
-
this.metaCollection = "assets.files";
|
|
11
9
|
}
|
|
12
10
|
openUploadStream(filename, opts) {
|
|
13
11
|
return this.bucket.openUploadStream(filename, opts);
|
|
14
12
|
}
|
|
15
|
-
openDownloadStream(
|
|
16
|
-
return this.bucket.openDownloadStream(
|
|
13
|
+
openDownloadStream(asset) {
|
|
14
|
+
return this.bucket.openDownloadStream(asset.streamId);
|
|
17
15
|
}
|
|
18
|
-
delete(
|
|
19
|
-
return this.bucket.delete(
|
|
16
|
+
delete(asset) {
|
|
17
|
+
return this.bucket.delete(asset.streamId);
|
|
20
18
|
}
|
|
21
19
|
};
|
|
22
20
|
AssetGridDriver = __decorate([
|
|
@@ -24,4 +22,4 @@ AssetGridDriver = __decorate([
|
|
|
24
22
|
__metadata("design:paramtypes", [MongoConnector])
|
|
25
23
|
], AssetGridDriver);
|
|
26
24
|
export { AssetGridDriver };
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtZ3JpZC5kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZHJpdmVycy9hc3NldC1ncmlkLmRyaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVwQyxPQUFPLEVBQUMsWUFBWSxJQUFJLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUczQyxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFlO0lBRWQsTUFBTSxDQUFlO0lBRS9CLFlBQVksU0FBeUI7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsSUFBdUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQ0osQ0FBQTtBQW5CWSxlQUFlO0lBRDNCLFVBQVUsRUFBRTtxQ0FLYyxjQUFjO0dBSjVCLGVBQWUsQ0FtQjNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlfSBmcm9tIFwidHN5cmluZ2VcIjtcbmltcG9ydCB7R3JpZEZTQnVja2V0fSBmcm9tICdtb25nb2RiJztcbmltcG9ydCB7R3JpZEZTQnVja2V0IGFzIEJ1Y2tldEltcGx9IGZyb20gJ21vbmdvZGIvbGliL2dyaWRmcyc7XG5cbmltcG9ydCB7SUFzc2V0LCBJQXNzZXREcml2ZXIsIElBc3NldFVwbG9hZE9wdHN9IGZyb20gJy4uLy4uL2NvbW1vbi10eXBlcyc7XG5pbXBvcnQge01vbmdvQ29ubmVjdG9yfSBmcm9tIFwiLi4vbW9uZ28tY29ubmVjdG9yXCI7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBc3NldEdyaWREcml2ZXIgaW1wbGVtZW50cyBJQXNzZXREcml2ZXIge1xuXG4gICAgcHJvdGVjdGVkIGJ1Y2tldDogR3JpZEZTQnVja2V0O1xuXG4gICAgY29uc3RydWN0b3IoY29ubmVjdG9yOiBNb25nb0Nvbm5lY3Rvcikge1xuICAgICAgICB0aGlzLmJ1Y2tldCA9IG5ldyBCdWNrZXRJbXBsKGNvbm5lY3Rvci5kYXRhYmFzZSwge2J1Y2tldE5hbWU6ICdhc3NldHMnfSk7XG4gICAgfVxuXG4gICAgb3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCBvcHRzPzogSUFzc2V0VXBsb2FkT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5idWNrZXQub3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZSwgb3B0cyk7XG4gICAgfVxuXG4gICAgb3BlbkRvd25sb2FkU3RyZWFtKGFzc2V0OiBJQXNzZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbShhc3NldC5zdHJlYW1JZCk7XG4gICAgfVxuXG4gICAgZGVsZXRlKGFzc2V0OiBJQXNzZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVja2V0LmRlbGV0ZShhc3NldC5zdHJlYW1JZCk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,41 +1,42 @@
|
|
|
1
1
|
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
-
import { createReadStream, createWriteStream, mkdirSync } from 'fs';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { createReadStream, createWriteStream, mkdirSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { inject, injectable } from 'tsyringe';
|
|
5
|
+
import { rm } from 'fs/promises';
|
|
6
|
+
import { ObjectId } from 'bson';
|
|
7
|
+
import { ASSET_LOCAL_DIR } from '../../common-types';
|
|
7
8
|
let AssetLocalDriver = class AssetLocalDriver {
|
|
8
9
|
dir;
|
|
9
|
-
metaCollection;
|
|
10
10
|
constructor(dir) {
|
|
11
11
|
this.dir = dir;
|
|
12
|
-
this.metaCollection = "assets.local";
|
|
13
12
|
}
|
|
14
13
|
openUploadStream(filename, opts) {
|
|
15
|
-
const id = new
|
|
14
|
+
const id = new ObjectId();
|
|
16
15
|
const dir = `${this.dir}/${id.toHexString()}`;
|
|
17
16
|
mkdirSync(dir, { recursive: true });
|
|
18
|
-
const stream = createWriteStream(
|
|
19
|
-
stream.id = id;
|
|
17
|
+
const stream = createWriteStream(this.getPath(id, filename, opts.extension));
|
|
20
18
|
stream.done = false;
|
|
21
19
|
stream.on('finish', () => {
|
|
22
|
-
|
|
23
|
-
writeFile(`${dir}/metadata.json`, JSON.stringify(opts?.metadata || {}));
|
|
20
|
+
stream.id = id;
|
|
24
21
|
stream.done = true;
|
|
22
|
+
writeFileSync(`${dir}/metadata.json`, JSON.stringify(opts?.metadata || {}));
|
|
25
23
|
});
|
|
26
24
|
return stream;
|
|
27
25
|
}
|
|
28
|
-
openDownloadStream(
|
|
29
|
-
return createReadStream(
|
|
26
|
+
openDownloadStream(asset) {
|
|
27
|
+
return createReadStream(this.getPath(asset.streamId, asset.filename, asset.metadata.extension), { autoClose: true, emitClose: true });
|
|
30
28
|
}
|
|
31
|
-
delete(
|
|
32
|
-
return rm(
|
|
29
|
+
delete(asset) {
|
|
30
|
+
return rm(this.getPath(asset.streamId, asset.filename, asset.metadata.extension), { recursive: true, force: true });
|
|
31
|
+
}
|
|
32
|
+
getPath(id, name, ext) {
|
|
33
|
+
return join(this.dir, id.toHexString(), `${name}.${ext}`);
|
|
33
34
|
}
|
|
34
35
|
};
|
|
35
36
|
AssetLocalDriver = __decorate([
|
|
36
37
|
injectable(),
|
|
37
|
-
__param(0, inject(
|
|
38
|
+
__param(0, inject(ASSET_LOCAL_DIR)),
|
|
38
39
|
__metadata("design:paramtypes", [String])
|
|
39
40
|
], AssetLocalDriver);
|
|
40
41
|
export { AssetLocalDriver };
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbG9jYWwuZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtbG9jYWwuZHJpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBQyxNQUFNLElBQUksQ0FBQztBQUNqRixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5QixPQUFPLEVBQUMsZUFBZSxFQUE2RCxNQUFNLG9CQUFvQixDQUFDO0FBR3hHLElBQU0sZ0JBQWdCLEdBQXRCLE1BQU0sZ0JBQWdCO0lBRXNCO0lBQS9DLFlBQStDLEdBQVc7UUFBWCxRQUFHLEdBQUgsR0FBRyxDQUFRO0lBQzFELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQixFQUFFLElBQXNCO1FBQ3JELE1BQU0sRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQzlDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUF1QixDQUFDO1FBQ25HLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNyQixNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ25CLGFBQWEsQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBYTtRQUM1QixPQUFPLGdCQUFnQixDQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUN0RSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUNyQyxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2hCLE9BQU8sRUFBRSxDQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQ3RFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQ25DLENBQUM7SUFDTixDQUFDO0lBRVMsT0FBTyxDQUFDLEVBQVksRUFBRSxJQUFZLEVBQUUsR0FBVztRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7Q0FDSixDQUFBO0FBcENZLGdCQUFnQjtJQUQ1QixVQUFVLEVBQUU7SUFHSSxXQUFBLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTs7R0FGM0IsZ0JBQWdCLENBb0M1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlUmVhZFN0cmVhbSwgY3JlYXRlV3JpdGVTdHJlYW0sIG1rZGlyU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtqb2lufSBmcm9tICdwYXRoJztcbmltcG9ydCB7aW5qZWN0LCBpbmplY3RhYmxlfSBmcm9tICd0c3lyaW5nZSc7XG5pbXBvcnQge3JtfSBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQge09iamVjdElkfSBmcm9tICdic29uJztcblxuaW1wb3J0IHtBU1NFVF9MT0NBTF9ESVIsIElBc3NldCwgSUFzc2V0RHJpdmVyLCBJQXNzZXRVcGxvYWRPcHRzLCBJQXNzZXRVcGxvYWRTdHJlYW19IGZyb20gJy4uLy4uL2NvbW1vbi10eXBlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBc3NldExvY2FsRHJpdmVyIGltcGxlbWVudHMgSUFzc2V0RHJpdmVyIHtcblxuICAgIGNvbnN0cnVjdG9yKEBpbmplY3QoQVNTRVRfTE9DQUxfRElSKSBwcm90ZWN0ZWQgZGlyOiBzdHJpbmcpIHtcbiAgICB9XG5cbiAgICBvcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIG9wdHM6IElBc3NldFVwbG9hZE9wdHMpIHtcbiAgICAgICAgY29uc3QgaWQgPSBuZXcgT2JqZWN0SWQoKTtcbiAgICAgICAgY29uc3QgZGlyID0gYCR7dGhpcy5kaXJ9LyR7aWQudG9IZXhTdHJpbmcoKX1gO1xuICAgICAgICBta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0odGhpcy5nZXRQYXRoKGlkLCBmaWxlbmFtZSwgb3B0cy5leHRlbnNpb24pKSBhcyBJQXNzZXRVcGxvYWRTdHJlYW07XG4gICAgICAgIHN0cmVhbS5kb25lID0gZmFsc2U7XG4gICAgICAgIHN0cmVhbS5vbignZmluaXNoJywgKCkgPT4ge1xuICAgICAgICAgICAgc3RyZWFtLmlkID0gaWQ7XG4gICAgICAgICAgICBzdHJlYW0uZG9uZSA9IHRydWU7XG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGAke2Rpcn0vbWV0YWRhdGEuanNvbmAsIEpTT04uc3RyaW5naWZ5KG9wdHM/Lm1ldGFkYXRhIHx8IHt9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgIH1cblxuICAgIG9wZW5Eb3dubG9hZFN0cmVhbShhc3NldDogSUFzc2V0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSZWFkU3RyZWFtKFxuICAgICAgICAgICAgdGhpcy5nZXRQYXRoKGFzc2V0LnN0cmVhbUlkLCBhc3NldC5maWxlbmFtZSwgYXNzZXQubWV0YWRhdGEuZXh0ZW5zaW9uKSxcbiAgICAgICAgICAgIHthdXRvQ2xvc2U6IHRydWUsIGVtaXRDbG9zZTogdHJ1ZX1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkZWxldGUoYXNzZXQ6IElBc3NldCkge1xuICAgICAgICByZXR1cm4gcm0oXG4gICAgICAgICAgICB0aGlzLmdldFBhdGgoYXNzZXQuc3RyZWFtSWQsIGFzc2V0LmZpbGVuYW1lLCBhc3NldC5tZXRhZGF0YS5leHRlbnNpb24pLFxuICAgICAgICAgICAgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UGF0aChpZDogT2JqZWN0SWQsIG5hbWU6IHN0cmluZywgZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gam9pbih0aGlzLmRpciwgaWQudG9IZXhTdHJpbmcoKSwgYCR7bmFtZX0uJHtleHR9YCk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { ObjectId } from "bson";
|
|
4
|
+
import got from "got";
|
|
5
|
+
import { Configuration } from "../configuration";
|
|
6
|
+
import { createFallbackReadable } from "./fallback-streams";
|
|
7
|
+
let AssetStorageProxyDriver = class AssetStorageProxyDriver {
|
|
8
|
+
config;
|
|
9
|
+
baseUrl;
|
|
10
|
+
url;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.baseUrl = this.config.resolve("storageProxyUri");
|
|
14
|
+
this.url = this.baseUrl + this.config.resolve("storageProxyBucket");
|
|
15
|
+
}
|
|
16
|
+
openUploadStream(_, opts) {
|
|
17
|
+
const id = new ObjectId();
|
|
18
|
+
const stream = got.stream.put(this.getUrl(id, opts.extension), { headers: {
|
|
19
|
+
'Content-Type': opts?.contentType || 'application/octet-stream'
|
|
20
|
+
} });
|
|
21
|
+
stream.done = false;
|
|
22
|
+
stream.on('finish', () => {
|
|
23
|
+
stream.id = id;
|
|
24
|
+
stream.done = true;
|
|
25
|
+
});
|
|
26
|
+
return stream;
|
|
27
|
+
}
|
|
28
|
+
openDownloadStream(asset) {
|
|
29
|
+
return createFallbackReadable(got.stream.get(this.getUrl(asset.streamId, asset.metadata.extension)), () => got.stream.get(this.getUrl(asset.streamId)));
|
|
30
|
+
}
|
|
31
|
+
async delete(asset) {
|
|
32
|
+
try {
|
|
33
|
+
await got.delete(this.getUrl(asset.streamId, asset.metadata.extension));
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
await got.delete(this.getUrl(asset.streamId));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
getUrl(id, ext) {
|
|
40
|
+
return !ext ? `${this.url}/${id.toHexString()}` : `${this.url}/${id.toHexString()}.${ext}`;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
AssetStorageProxyDriver = __decorate([
|
|
44
|
+
injectable(),
|
|
45
|
+
__metadata("design:paramtypes", [Configuration])
|
|
46
|
+
], AssetStorageProxyDriver);
|
|
47
|
+
export { AssetStorageProxyDriver };
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc3RvcmFnZS1wcm94eS5kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZHJpdmVycy9hc3NldC1zdG9yYWdlLXByb3h5LmRyaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUV0QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7SUFLVjtJQUhiLE9BQU8sQ0FBUztJQUNoQixHQUFHLENBQVM7SUFFckIsWUFBc0IsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGdCQUFnQixDQUFDLENBQVMsRUFBRSxJQUFzQjtRQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRTtnQkFDakUsY0FBYyxFQUFFLElBQUksRUFBRSxXQUFXLElBQUksMEJBQTBCO2FBQ2xFLEVBQUMsQ0FBdUIsQ0FBQztRQUM5QixNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNwQixNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDckIsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sc0JBQXNCLENBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ3JFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ3BELENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQztZQUNELE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFFUyxNQUFNLENBQUMsRUFBWSxFQUFFLEdBQVk7UUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQy9GLENBQUM7Q0FDSixDQUFBO0FBekNZLHVCQUF1QjtJQURuQyxVQUFVLEVBQUU7cUNBTXFCLGFBQWE7R0FMbEMsdUJBQXVCLENBeUNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7aW5qZWN0YWJsZX0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IGdvdCBmcm9tIFwiZ290XCI7XG5pbXBvcnQge0lBc3NldCwgSUFzc2V0RHJpdmVyLCBJQXNzZXRVcGxvYWRPcHRzLCBJQXNzZXRVcGxvYWRTdHJlYW19IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7Y3JlYXRlRmFsbGJhY2tSZWFkYWJsZX0gZnJvbSBcIi4vZmFsbGJhY2stc3RyZWFtc1wiO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXNzZXRTdG9yYWdlUHJveHlEcml2ZXIgaW1wbGVtZW50cyBJQXNzZXREcml2ZXIge1xuXG4gICAgcmVhZG9ubHkgYmFzZVVybDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNvbmZpZzogQ29uZmlndXJhdGlvbikge1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmNvbmZpZy5yZXNvbHZlKFwic3RvcmFnZVByb3h5VXJpXCIpO1xuICAgICAgICB0aGlzLnVybCA9IHRoaXMuYmFzZVVybCArIHRoaXMuY29uZmlnLnJlc29sdmUoXCJzdG9yYWdlUHJveHlCdWNrZXRcIik7XG4gICAgfVxuXG4gICAgb3BlblVwbG9hZFN0cmVhbShfOiBzdHJpbmcsIG9wdHM6IElBc3NldFVwbG9hZE9wdHMpOiBJQXNzZXRVcGxvYWRTdHJlYW0ge1xuICAgICAgICBjb25zdCBpZCA9IG5ldyBPYmplY3RJZCgpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBnb3Quc3RyZWFtLnB1dCh0aGlzLmdldFVybChpZCwgb3B0cy5leHRlbnNpb24pLCB7aGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBvcHRzPy5jb250ZW50VHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAgICAgICAgfX0pIGFzIElBc3NldFVwbG9hZFN0cmVhbTtcbiAgICAgICAgc3RyZWFtLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgc3RyZWFtLm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICAgICAgICBzdHJlYW0uaWQgPSBpZDtcbiAgICAgICAgICAgIHN0cmVhbS5kb25lID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdHJlYW07XG4gICAgfVxuXG4gICAgb3BlbkRvd25sb2FkU3RyZWFtKGFzc2V0OiBJQXNzZXQpOiBSZWFkYWJsZSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGYWxsYmFja1JlYWRhYmxlKFxuICAgICAgICAgICAgZ290LnN0cmVhbS5nZXQodGhpcy5nZXRVcmwoYXNzZXQuc3RyZWFtSWQsIGFzc2V0Lm1ldGFkYXRhLmV4dGVuc2lvbikpLFxuICAgICAgICAgICAgKCkgPT4gZ290LnN0cmVhbS5nZXQodGhpcy5nZXRVcmwoYXNzZXQuc3RyZWFtSWQpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGRlbGV0ZShhc3NldDogSUFzc2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBnb3QuZGVsZXRlKHRoaXMuZ2V0VXJsKGFzc2V0LnN0cmVhbUlkLCBhc3NldC5tZXRhZGF0YS5leHRlbnNpb24pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgZ290LmRlbGV0ZSh0aGlzLmdldFVybChhc3NldC5zdHJlYW1JZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFVybChpZDogT2JqZWN0SWQsIGV4dD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAhZXh0ID8gYCR7dGhpcy51cmx9LyR7aWQudG9IZXhTdHJpbmcoKX1gIDogYCR7dGhpcy51cmx9LyR7aWQudG9IZXhTdHJpbmcoKX0uJHtleHR9YDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { PassThrough } from 'stream';
|
|
2
|
+
export function createFallbackReadable(primary, fallbackFactory) {
|
|
3
|
+
const proxy = new PassThrough();
|
|
4
|
+
let hasSwitched = false;
|
|
5
|
+
const switchToFallback = () => {
|
|
6
|
+
if (hasSwitched)
|
|
7
|
+
return;
|
|
8
|
+
hasSwitched = true;
|
|
9
|
+
// 1. Cleanup the failing primary
|
|
10
|
+
primary.unpipe(proxy);
|
|
11
|
+
primary.destroy();
|
|
12
|
+
// 2. Initialize and pipe the fallback
|
|
13
|
+
const fallback = fallbackFactory();
|
|
14
|
+
// On the fallback, we allow it to end the proxy naturally
|
|
15
|
+
fallback.pipe(proxy);
|
|
16
|
+
fallback.on('error', (err) => {
|
|
17
|
+
proxy.emit('error', err); // If fallback fails too, it's a hard error
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
// Pipe primary but prevent it from closing the proxy automatically
|
|
21
|
+
primary.pipe(proxy, { end: false });
|
|
22
|
+
primary.on('error', () => {
|
|
23
|
+
switchToFallback();
|
|
24
|
+
});
|
|
25
|
+
// Handle the "Early End" case (e.g., stream closed before data finished)
|
|
26
|
+
primary.on('end', () => {
|
|
27
|
+
if (!hasSwitched) {
|
|
28
|
+
// If we finished successfully without erroring, close the proxy
|
|
29
|
+
proxy.end();
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return proxy;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFsbGJhY2stcmVhZGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZHJpdmVycy9mYWxsYmFjay1yZWFkYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRS9DLE1BQU0sVUFBVSxzQkFBc0IsQ0FDbEMsT0FBaUIsRUFDakIsZUFBK0I7SUFFL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNoQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFeEIsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxXQUFXO1lBQUUsT0FBTztRQUN4QixXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLGlDQUFpQztRQUNqQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVsQixzQ0FBc0M7UUFDdEMsTUFBTSxRQUFRLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFFbkMsMERBQTBEO1FBQzFELFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN6QixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLDJDQUEyQztRQUN6RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztJQUVGLG1FQUFtRTtJQUNuRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXBDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNyQixnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgseUVBQXlFO0lBQ3pFLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDZixnRUFBZ0U7WUFDaEUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFkYWJsZSwgUGFzc1Rocm91Z2ggfSBmcm9tICdzdHJlYW0nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZhbGxiYWNrUmVhZGFibGUoXHJcbiAgICBwcmltYXJ5OiBSZWFkYWJsZSxcclxuICAgIGZhbGxiYWNrRmFjdG9yeTogKCkgPT4gUmVhZGFibGVcclxuKTogUmVhZGFibGUge1xyXG4gICAgY29uc3QgcHJveHkgPSBuZXcgUGFzc1Rocm91Z2goKTtcclxuICAgIGxldCBoYXNTd2l0Y2hlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHN3aXRjaFRvRmFsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGhhc1N3aXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgaGFzU3dpdGNoZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyAxLiBDbGVhbnVwIHRoZSBmYWlsaW5nIHByaW1hcnlcclxuICAgICAgICBwcmltYXJ5LnVucGlwZShwcm94eSk7XHJcbiAgICAgICAgcHJpbWFyeS5kZXN0cm95KCk7XHJcblxyXG4gICAgICAgIC8vIDIuIEluaXRpYWxpemUgYW5kIHBpcGUgdGhlIGZhbGxiYWNrXHJcbiAgICAgICAgY29uc3QgZmFsbGJhY2sgPSBmYWxsYmFja0ZhY3RvcnkoKTtcclxuXHJcbiAgICAgICAgLy8gT24gdGhlIGZhbGxiYWNrLCB3ZSBhbGxvdyBpdCB0byBlbmQgdGhlIHByb3h5IG5hdHVyYWxseVxyXG4gICAgICAgIGZhbGxiYWNrLnBpcGUocHJveHkpO1xyXG5cclxuICAgICAgICBmYWxsYmFjay5vbignZXJyb3InLCAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHByb3h5LmVtaXQoJ2Vycm9yJywgZXJyKTsgLy8gSWYgZmFsbGJhY2sgZmFpbHMgdG9vLCBpdCdzIGEgaGFyZCBlcnJvclxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBQaXBlIHByaW1hcnkgYnV0IHByZXZlbnQgaXQgZnJvbSBjbG9zaW5nIHRoZSBwcm94eSBhdXRvbWF0aWNhbGx5XHJcbiAgICBwcmltYXJ5LnBpcGUocHJveHksIHsgZW5kOiBmYWxzZSB9KTtcclxuXHJcbiAgICBwcmltYXJ5Lm9uKCdlcnJvcicsICgpID0+IHtcclxuICAgICAgICBzd2l0Y2hUb0ZhbGxiYWNrKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBIYW5kbGUgdGhlIFwiRWFybHkgRW5kXCIgY2FzZSAoZS5nLiwgc3RyZWFtIGNsb3NlZCBiZWZvcmUgZGF0YSBmaW5pc2hlZClcclxuICAgIHByaW1hcnkub24oJ2VuZCcsICgpID0+IHtcclxuICAgICAgICBpZiAoIWhhc1N3aXRjaGVkKSB7XHJcbiAgICAgICAgICAgIC8vIElmIHdlIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGVycm9yaW5nLCBjbG9zZSB0aGUgcHJveHlcclxuICAgICAgICAgICAgcHJveHkuZW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHByb3h5O1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { PassThrough } from 'stream';
|
|
2
|
+
export function createFallbackReadable(primary, fallbackFactory) {
|
|
3
|
+
const proxy = new PassThrough();
|
|
4
|
+
let hasSwitched = false;
|
|
5
|
+
const switchToFallback = () => {
|
|
6
|
+
if (hasSwitched)
|
|
7
|
+
return;
|
|
8
|
+
hasSwitched = true;
|
|
9
|
+
// 1. Cleanup the failing primary
|
|
10
|
+
primary.unpipe(proxy);
|
|
11
|
+
primary.destroy();
|
|
12
|
+
// 2. Initialize and pipe the fallback
|
|
13
|
+
const fallback = fallbackFactory();
|
|
14
|
+
// On the fallback, we allow it to end the proxy naturally
|
|
15
|
+
fallback.pipe(proxy);
|
|
16
|
+
fallback.on('error', (err) => {
|
|
17
|
+
proxy.emit('error', err); // If fallback fails too, it's a hard error
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
// Pipe primary but prevent it from closing the proxy automatically
|
|
21
|
+
primary.pipe(proxy, { end: false });
|
|
22
|
+
primary.on('error', () => {
|
|
23
|
+
switchToFallback();
|
|
24
|
+
});
|
|
25
|
+
// Handle the "Early End" case (e.g., stream closed before data finished)
|
|
26
|
+
primary.on('end', () => {
|
|
27
|
+
if (!hasSwitched) {
|
|
28
|
+
// If we finished successfully without erroring, close the proxy
|
|
29
|
+
proxy.end();
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return proxy;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFsbGJhY2stc3RyZWFtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9kcml2ZXJzL2ZhbGxiYWNrLXN0cmVhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBVyxNQUFNLFFBQVEsQ0FBQztBQUU3QyxNQUFNLFVBQVUsc0JBQXNCLENBQ2xDLE9BQWlCLEVBQ2pCLGVBQStCO0lBRS9CLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDaEMsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBRXhCLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO1FBQzFCLElBQUksV0FBVztZQUFFLE9BQU87UUFDeEIsV0FBVyxHQUFHLElBQUksQ0FBQztRQUVuQixpQ0FBaUM7UUFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbEIsc0NBQXNDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLGVBQWUsRUFBRSxDQUFDO1FBRW5DLDBEQUEwRDtRQUMxRCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJCLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQywyQ0FBMkM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUM7SUFFRixtRUFBbUU7SUFDbkUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUVwQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDckIsZ0JBQWdCLEVBQUUsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILHlFQUF5RTtJQUN6RSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2YsZ0VBQWdFO1lBQ2hFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQYXNzVGhyb3VnaCwgUmVhZGFibGV9IGZyb20gJ3N0cmVhbSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmFsbGJhY2tSZWFkYWJsZShcclxuICAgIHByaW1hcnk6IFJlYWRhYmxlLFxyXG4gICAgZmFsbGJhY2tGYWN0b3J5OiAoKSA9PiBSZWFkYWJsZVxyXG4pOiBSZWFkYWJsZSB7XHJcbiAgICBjb25zdCBwcm94eSA9IG5ldyBQYXNzVGhyb3VnaCgpO1xyXG4gICAgbGV0IGhhc1N3aXRjaGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3Qgc3dpdGNoVG9GYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICBpZiAoaGFzU3dpdGNoZWQpIHJldHVybjtcclxuICAgICAgICBoYXNTd2l0Y2hlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIDEuIENsZWFudXAgdGhlIGZhaWxpbmcgcHJpbWFyeVxyXG4gICAgICAgIHByaW1hcnkudW5waXBlKHByb3h5KTtcclxuICAgICAgICBwcmltYXJ5LmRlc3Ryb3koKTtcclxuXHJcbiAgICAgICAgLy8gMi4gSW5pdGlhbGl6ZSBhbmQgcGlwZSB0aGUgZmFsbGJhY2tcclxuICAgICAgICBjb25zdCBmYWxsYmFjayA9IGZhbGxiYWNrRmFjdG9yeSgpO1xyXG5cclxuICAgICAgICAvLyBPbiB0aGUgZmFsbGJhY2ssIHdlIGFsbG93IGl0IHRvIGVuZCB0aGUgcHJveHkgbmF0dXJhbGx5XHJcbiAgICAgICAgZmFsbGJhY2sucGlwZShwcm94eSk7XHJcblxyXG4gICAgICAgIGZhbGxiYWNrLm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgcHJveHkuZW1pdCgnZXJyb3InLCBlcnIpOyAvLyBJZiBmYWxsYmFjayBmYWlscyB0b28sIGl0J3MgYSBoYXJkIGVycm9yXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFBpcGUgcHJpbWFyeSBidXQgcHJldmVudCBpdCBmcm9tIGNsb3NpbmcgdGhlIHByb3h5IGF1dG9tYXRpY2FsbHlcclxuICAgIHByaW1hcnkucGlwZShwcm94eSwgeyBlbmQ6IGZhbHNlIH0pO1xyXG5cclxuICAgIHByaW1hcnkub24oJ2Vycm9yJywgKCkgPT4ge1xyXG4gICAgICAgIHN3aXRjaFRvRmFsbGJhY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEhhbmRsZSB0aGUgXCJFYXJseSBFbmRcIiBjYXNlIChlLmcuLCBzdHJlYW0gY2xvc2VkIGJlZm9yZSBkYXRhIGZpbmlzaGVkKVxyXG4gICAgcHJpbWFyeS5vbignZW5kJywgKCkgPT4ge1xyXG4gICAgICAgIGlmICghaGFzU3dpdGNoZWQpIHtcclxuICAgICAgICAgICAgLy8gSWYgd2UgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgZXJyb3JpbmcsIGNsb3NlIHRoZSBwcm94eVxyXG4gICAgICAgICAgICBwcm94eS5lbmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcHJveHk7XHJcbn1cclxuIl19
|
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { streamToBuffer, toImage } from "../../utils";
|
|
2
2
|
import { BaseEntity } from "./base-entity";
|
|
3
3
|
export class Asset extends BaseEntity {
|
|
4
|
-
|
|
4
|
+
drivers;
|
|
5
5
|
get filename() {
|
|
6
6
|
return this.data.filename;
|
|
7
7
|
}
|
|
8
|
+
get streamId() {
|
|
9
|
+
return this.data.streamId || this.oid;
|
|
10
|
+
}
|
|
11
|
+
get driverId() {
|
|
12
|
+
return this.data.driverId;
|
|
13
|
+
}
|
|
14
|
+
get driver() {
|
|
15
|
+
return this.drivers.getDriver(this.driverId || this.drivers.missingDriver);
|
|
16
|
+
}
|
|
8
17
|
get contentType() {
|
|
9
18
|
return this.data.contentType;
|
|
10
19
|
}
|
|
@@ -12,26 +21,20 @@ export class Asset extends BaseEntity {
|
|
|
12
21
|
return this.data.metadata;
|
|
13
22
|
}
|
|
14
23
|
get stream() {
|
|
15
|
-
return this.driver.openDownloadStream(this
|
|
24
|
+
return this.driver.openDownloadStream(this);
|
|
16
25
|
}
|
|
17
|
-
constructor(id, data, collection,
|
|
26
|
+
constructor(id, data, collection, drivers) {
|
|
18
27
|
super(id, data, collection);
|
|
19
|
-
this.
|
|
28
|
+
this.drivers = drivers;
|
|
20
29
|
}
|
|
21
30
|
async unlink() {
|
|
22
31
|
try {
|
|
23
|
-
await this.driver.delete(this
|
|
24
|
-
await this.collection.deleteOne({ _id: this.oid });
|
|
32
|
+
await this.driver.delete(this);
|
|
25
33
|
}
|
|
26
34
|
catch (error) {
|
|
27
|
-
|
|
28
|
-
if (error) {
|
|
29
|
-
err = error.message || error || "";
|
|
30
|
-
if (!isString(err) || !err.startsWith("FileNotFound")) {
|
|
31
|
-
throw err;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
35
|
+
console.log("Failed to unlink", error?.message);
|
|
34
36
|
}
|
|
37
|
+
await this.collection.deleteOne({ _id: this.oid });
|
|
35
38
|
return this.id;
|
|
36
39
|
}
|
|
37
40
|
async setMeta(metadata) {
|
|
@@ -41,6 +44,38 @@ export class Asset extends BaseEntity {
|
|
|
41
44
|
getBuffer() {
|
|
42
45
|
return streamToBuffer(this.stream);
|
|
43
46
|
}
|
|
47
|
+
async move(driverId) {
|
|
48
|
+
const oldDriver = this.driver;
|
|
49
|
+
const targetDriver = this.drivers.getDriver(driverId);
|
|
50
|
+
if (targetDriver === oldDriver)
|
|
51
|
+
return this;
|
|
52
|
+
const oldAsset = new Asset(this.oid, this.data, this.collection, this.drivers);
|
|
53
|
+
const streamId = await this.uploadTo(targetDriver);
|
|
54
|
+
this.data = {
|
|
55
|
+
...this.data,
|
|
56
|
+
streamId,
|
|
57
|
+
driverId,
|
|
58
|
+
};
|
|
59
|
+
await this.save();
|
|
60
|
+
await oldDriver.delete(oldAsset);
|
|
61
|
+
}
|
|
62
|
+
uploadTo(driver) {
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
const uploaderStream = driver.openUploadStream(this.filename, {
|
|
65
|
+
chunkSizeBytes: 1048576,
|
|
66
|
+
contentType: this.contentType,
|
|
67
|
+
extension: this.metadata.extension,
|
|
68
|
+
metadata: this.metadata,
|
|
69
|
+
});
|
|
70
|
+
this.stream.pipe(uploaderStream)
|
|
71
|
+
.on("error", error => {
|
|
72
|
+
reject(error.message || error);
|
|
73
|
+
})
|
|
74
|
+
.on("finish", async () => {
|
|
75
|
+
resolve(uploaderStream.id);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
44
79
|
async download(metadata) {
|
|
45
80
|
metadata = Object.assign(this.metadata, metadata || {});
|
|
46
81
|
metadata.downloadCount = isNaN(metadata.downloadCount) || !metadata.firstDownload
|
|
@@ -58,4 +93,4 @@ export class Asset extends BaseEntity {
|
|
|
58
93
|
return toImage(await this.download(metadata), params, this.metadata);
|
|
59
94
|
}
|
|
60
95
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsTUFBTSxPQUFPLEtBQU0sU0FBUSxVQUFrQjtJQXFCbkI7SUFuQnRCLElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFlBQVksRUFBWSxFQUNaLElBQXFCLEVBQ3JCLFVBQXNCLEVBQ1osTUFBb0I7UUFDdEMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFEVixXQUFNLEdBQU4sTUFBTSxDQUFjO0lBRTFDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTTtRQUNSLElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixJQUFJLEdBQUcsR0FBRyxLQUFZLENBQUM7WUFDdkIsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO29CQUNwRCxNQUFNLEdBQUcsQ0FBQztnQkFDZCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBNkI7UUFDdkMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBcUI7UUFDaEMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7WUFDN0UsQ0FBQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDakMsUUFBUSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUQsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUE0QixJQUFJO1FBQzNDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUEwQixFQUFFLFFBQXFCO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcclxuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5cclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldERyaXZlciwgSUFzc2V0SW1hZ2VQYXJhbXMsIElBc3NldE1ldGF9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtpc1N0cmluZywgc3RyZWFtVG9CdWZmZXIsIHRvSW1hZ2V9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXQgZXh0ZW5kcyBCYXNlRW50aXR5PElBc3NldD4gaW1wbGVtZW50cyBJQXNzZXQge1xyXG5cclxuICAgIGdldCBmaWxlbmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsZW5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRlbnRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5jb250ZW50VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWV0YWRhdGEoKTogSUFzc2V0TWV0YSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tZXRhZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc3RyZWFtKCk6IFJlYWRhYmxlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kcml2ZXIub3BlbkRvd25sb2FkU3RyZWFtKHRoaXMub2lkKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpZDogT2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBQYXJ0aWFsPElBc3NldD4sXHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGRyaXZlcjogSUFzc2V0RHJpdmVyKSB7XHJcbiAgICAgICAgc3VwZXIoaWQsIGRhdGEsIGNvbGxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVubGluaygpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZSh0aGlzLm9pZCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDogdGhpcy5vaWR9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBsZXQgZXJyID0gZXJyb3IgYXMgYW55O1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGVyciA9IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IgfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgIGlmICghaXNTdHJpbmcoZXJyKSB8fCAhZXJyLnN0YXJ0c1dpdGgoXCJGaWxlTm90Rm91bmRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0TWV0YShtZXRhZGF0YTogUGFydGlhbDxJQXNzZXRNZXRhPik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgbWV0YWRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMubWV0YWRhdGEsIG1ldGFkYXRhIHx8IHt9KTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlT25lKHtfaWQ6IHRoaXMub2lkfSwgeyRzZXQ6IHttZXRhZGF0YX19KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCdWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICByZXR1cm4gc3RyZWFtVG9CdWZmZXIodGhpcy5zdHJlYW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRvd25sb2FkKG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBtZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5tZXRhZGF0YSwgbWV0YWRhdGEgfHwge30pO1xyXG4gICAgICAgIG1ldGFkYXRhLmRvd25sb2FkQ291bnQgPSBpc05hTihtZXRhZGF0YS5kb3dubG9hZENvdW50KSB8fCAhbWV0YWRhdGEuZmlyc3REb3dubG9hZFxyXG4gICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgOiBtZXRhZGF0YS5kb3dubG9hZENvdW50ICsgMTtcclxuICAgICAgICBtZXRhZGF0YS5maXJzdERvd25sb2FkID0gbWV0YWRhdGEuZmlyc3REb3dubG9hZCB8fCBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIG1ldGFkYXRhLmxhc3REb3dubG9hZCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZSh7X2lkOiB0aGlzLm9pZH0sIHskc2V0OiB7bWV0YWRhdGF9fSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEltYWdlKHBhcmFtczogSUFzc2V0SW1hZ2VQYXJhbXMgPSBudWxsKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIHJldHVybiB0b0ltYWdlKHRoaXMuc3RyZWFtLCBwYXJhbXMsIHRoaXMubWV0YWRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRvd25sb2FkSW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMsIG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICByZXR1cm4gdG9JbWFnZShhd2FpdCB0aGlzLmRvd25sb2FkKG1ldGFkYXRhKSwgcGFyYW1zLCB0aGlzLm1ldGFkYXRhKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFXLGNBQWMsRUFBRSxPQUFPLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDOUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxNQUFNLE9BQU8sS0FBTSxTQUFRLFVBQWtCO0lBaUNuQjtJQS9CdEIsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxZQUFZLEVBQVksRUFDWixJQUFxQixFQUNyQixVQUFzQixFQUNaLE9BQXNCO1FBQ3hDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVB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QztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBcUI7UUFDaEMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEQsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7WUFDN0UsQ0FBQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDakMsUUFBUSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUQsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUE0QixJQUFJO1FBQzNDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUEwQixFQUFFLFFBQXFCO1FBQ2pFLE9BQU8sT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcclxuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5cclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldERyaXZlciwgSUFzc2V0RHJpdmVycywgSUFzc2V0SW1hZ2VQYXJhbXMsIElBc3NldE1ldGF9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtpc1N0cmluZywgc3RyZWFtVG9CdWZmZXIsIHRvSW1hZ2V9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXQgZXh0ZW5kcyBCYXNlRW50aXR5PElBc3NldD4gaW1wbGVtZW50cyBJQXNzZXQge1xyXG5cclxuICAgIGdldCBmaWxlbmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsZW5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHN0cmVhbUlkKCk6IE9iamVjdElkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnN0cmVhbUlkIHx8IHRoaXMub2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkcml2ZXJJZCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZHJpdmVySWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRyaXZlcigpOiBJQXNzZXREcml2ZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRyaXZlcnMuZ2V0RHJpdmVyKHRoaXMuZHJpdmVySWQgfHwgdGhpcy5kcml2ZXJzLm1pc3NpbmdEcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb250ZW50VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuY29udGVudFR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1ldGFkYXRhKCk6IElBc3NldE1ldGEge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWV0YWRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHN0cmVhbSgpOiBSZWFkYWJsZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJpdmVyLm9wZW5Eb3dubG9hZFN0cmVhbSh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpZDogT2JqZWN0SWQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBQYXJ0aWFsPElBc3NldD4sXHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGRyaXZlcnM6IElBc3NldERyaXZlcnMpIHtcclxuICAgICAgICBzdXBlcihpZCwgZGF0YSwgY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlKHRoaXMpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIHVubGlua1wiLCBlcnJvcj8ubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDogdGhpcy5vaWR9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRNZXRhKG1ldGFkYXRhOiBQYXJ0aWFsPElBc3NldE1ldGE+KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBtZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5tZXRhZGF0YSwgbWV0YWRhdGEgfHwge30pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi51cGRhdGVPbmUoe19pZDogdGhpcy5vaWR9LCB7JHNldDoge21ldGFkYXRhfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgICAgIHJldHVybiBzdHJlYW1Ub0J1ZmZlcih0aGlzLnN0cmVhbSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW92ZShkcml2ZXJJZDogc3RyaW5nKTogUHJvbWlzZTxJQXNzZXQ+IHtcclxuICAgICAgICBjb25zdCBvbGREcml2ZXIgPSB0aGlzLmRyaXZlcjtcclxuICAgICAgICBjb25zdCB0YXJnZXREcml2ZXIgPSB0aGlzLmRyaXZlcnMuZ2V0RHJpdmVyKGRyaXZlcklkKTtcclxuICAgICAgICBpZiAodGFyZ2V0RHJpdmVyID09PSBvbGREcml2ZXIpIHJldHVybiB0aGlzO1xyXG4gICAgICAgIGNvbnN0IG9sZEFzc2V0ID0gbmV3IEFzc2V0KHRoaXMub2lkLCB0aGlzLmRhdGEsIHRoaXMuY29sbGVjdGlvbiwgdGhpcy5kcml2ZXJzKTtcclxuICAgICAgICBjb25zdCBzdHJlYW1JZCA9IGF3YWl0IHRoaXMudXBsb2FkVG8odGFyZ2V0RHJpdmVyKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZGF0YSxcclxuICAgICAgICAgICAgc3RyZWFtSWQsXHJcbiAgICAgICAgICAgIGRyaXZlcklkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgYXdhaXQgb2xkRHJpdmVyLmRlbGV0ZShvbGRBc3NldCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwbG9hZFRvKGRyaXZlcjogSUFzc2V0RHJpdmVyKTogUHJvbWlzZTxPYmplY3RJZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwbG9hZGVyU3RyZWFtID0gZHJpdmVyLm9wZW5VcGxvYWRTdHJlYW0odGhpcy5maWxlbmFtZSwge1xyXG4gICAgICAgICAgICAgICAgY2h1bmtTaXplQnl0ZXM6IDEwNDg1NzYsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogdGhpcy5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogdGhpcy5tZXRhZGF0YS5leHRlbnNpb24sXHJcbiAgICAgICAgICAgICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtLnBpcGUodXBsb2FkZXJTdHJlYW0pXHJcbiAgICAgICAgICAgICAgICAub24oXCJlcnJvclwiLCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5vbihcImZpbmlzaFwiLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh1cGxvYWRlclN0cmVhbS5pZCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkb3dubG9hZChtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgbWV0YWRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMubWV0YWRhdGEsIG1ldGFkYXRhIHx8IHt9KTtcclxuICAgICAgICBtZXRhZGF0YS5kb3dubG9hZENvdW50ID0gaXNOYU4obWV0YWRhdGEuZG93bmxvYWRDb3VudCkgfHwgIW1ldGFkYXRhLmZpcnN0RG93bmxvYWRcclxuICAgICAgICAgICAgPyAxXHJcbiAgICAgICAgICAgIDogbWV0YWRhdGEuZG93bmxvYWRDb3VudCArIDE7XHJcbiAgICAgICAgbWV0YWRhdGEuZmlyc3REb3dubG9hZCA9IG1ldGFkYXRhLmZpcnN0RG93bmxvYWQgfHwgbmV3IERhdGUoKTtcclxuICAgICAgICBtZXRhZGF0YS5sYXN0RG93bmxvYWQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi51cGRhdGVPbmUoe19pZDogdGhpcy5vaWR9LCB7JHNldDoge21ldGFkYXRhfX0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRJbWFnZShwYXJhbXM6IElBc3NldEltYWdlUGFyYW1zID0gbnVsbCk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICByZXR1cm4gdG9JbWFnZSh0aGlzLnN0cmVhbSwgcGFyYW1zLCB0aGlzLm1ldGFkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkb3dubG9hZEltYWdlKHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRvSW1hZ2UoYXdhaXQgdGhpcy5kb3dubG9hZChtZXRhZGF0YSksIHBhcmFtcywgdGhpcy5tZXRhZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|