@mnaoumov/typescript-lib 0.0.0 → 1.0.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/@types/debug/package.json +4 -0
- package/LICENSE +21 -0
- package/README.md +7 -1
- package/dist/lib/cjs/@types/debug.d.cts +21 -0
- package/dist/lib/cjs/abort-controller.cjs +202 -0
- package/dist/lib/cjs/abort-controller.d.cts +135 -0
- package/dist/lib/cjs/aggregate-error.cjs +98 -0
- package/dist/lib/cjs/aggregate-error.d.cts +24 -0
- package/dist/lib/cjs/array-buffer.cjs +96 -0
- package/dist/lib/cjs/array-buffer.d.cts +16 -0
- package/dist/lib/cjs/array.cjs +134 -0
- package/dist/lib/cjs/array.d.cts +46 -0
- package/dist/lib/cjs/async-events.cjs +466 -0
- package/dist/lib/cjs/async-events.d.cts +456 -0
- package/dist/lib/cjs/async-operation-hook.cjs +113 -0
- package/dist/lib/cjs/async-operation-hook.d.cts +59 -0
- package/dist/lib/cjs/async.cjs +521 -0
- package/dist/lib/cjs/async.d.cts +414 -0
- package/dist/lib/cjs/beeper.cjs +126 -0
- package/dist/lib/cjs/beeper.d.cts +21 -0
- package/dist/lib/cjs/blob.cjs +160 -0
- package/dist/lib/cjs/blob.d.cts +59 -0
- package/dist/lib/cjs/bytes.cjs +114 -0
- package/dist/lib/cjs/bytes.d.cts +17 -0
- package/dist/lib/cjs/debug-controller.cjs +80 -0
- package/dist/lib/cjs/debug-controller.d.cts +87 -0
- package/dist/lib/cjs/debug.cjs +235 -0
- package/dist/lib/cjs/debug.d.cts +66 -0
- package/dist/lib/cjs/desktop-zip-extractor.cjs +215 -0
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +95 -0
- package/dist/lib/cjs/disposable.cjs +414 -0
- package/dist/lib/cjs/disposable.d.cts +387 -0
- package/dist/lib/cjs/enum.cjs +100 -0
- package/dist/lib/cjs/enum.d.cts +24 -0
- package/dist/lib/cjs/error.cjs +297 -0
- package/dist/lib/cjs/error.d.cts +181 -0
- package/dist/lib/cjs/function.cjs +141 -0
- package/dist/lib/cjs/function.d.cts +128 -0
- package/dist/lib/cjs/html-element.cjs +341 -0
- package/dist/lib/cjs/html-element.d.cts +199 -0
- package/dist/lib/cjs/index.cjs +195 -0
- package/dist/lib/cjs/index.d.cts +33 -0
- package/dist/lib/cjs/jpeg-metadata.cjs +228 -0
- package/dist/lib/cjs/jpeg-metadata.d.cts +42 -0
- package/dist/lib/cjs/library.cjs +158 -0
- package/dist/lib/cjs/library.d.cts +96 -0
- package/dist/lib/cjs/object-utils.cjs +617 -0
- package/dist/lib/cjs/object-utils.d.cts +298 -0
- package/dist/lib/cjs/path.cjs +202 -0
- package/dist/lib/cjs/path.d.cts +154 -0
- package/dist/lib/cjs/reg-exp.cjs +254 -0
- package/dist/lib/cjs/reg-exp.d.cts +87 -0
- package/dist/lib/cjs/string.cjs +326 -0
- package/dist/lib/cjs/string.d.cts +361 -0
- package/dist/lib/cjs/transformers/date-transformer.cjs +129 -0
- package/dist/lib/cjs/transformers/date-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/group-transformer.cjs +173 -0
- package/dist/lib/cjs/transformers/group-transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/index.cjs +123 -0
- package/dist/lib/cjs/transformers/index.d.cts +9 -0
- package/dist/lib/cjs/transformers/map-transformer.cjs +129 -0
- package/dist/lib/cjs/transformers/map-transformer.d.cts +41 -0
- package/dist/lib/cjs/transformers/set-transformer.cjs +129 -0
- package/dist/lib/cjs/transformers/set-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +127 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +36 -0
- package/dist/lib/cjs/transformers/transformer.cjs +170 -0
- package/dist/lib/cjs/transformers/transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +130 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +42 -0
- package/dist/lib/cjs/transformers/typed-transformer.cjs +94 -0
- package/dist/lib/cjs/transformers/typed-transformer.d.cts +39 -0
- package/dist/lib/cjs/two-way-map.cjs +208 -0
- package/dist/lib/cjs/two-way-map.d.cts +101 -0
- package/dist/lib/cjs/type-guards.cjs +128 -0
- package/dist/lib/cjs/type-guards.d.cts +84 -0
- package/dist/lib/cjs/type.cjs +121 -0
- package/dist/lib/cjs/type.d.cts +122 -0
- package/dist/lib/cjs/typescript-lib-state.cjs +126 -0
- package/dist/lib/cjs/typescript-lib-state.d.cts +56 -0
- package/dist/lib/cjs/url.cjs +136 -0
- package/dist/lib/cjs/url.d.cts +74 -0
- package/dist/lib/cjs/value-provider.cjs +100 -0
- package/dist/lib/cjs/value-provider.d.cts +28 -0
- package/dist/lib/cjs/value-wrapper.cjs +144 -0
- package/dist/lib/cjs/value-wrapper.d.cts +47 -0
- package/dist/lib/esm/@types/debug.d.mts +21 -0
- package/dist/lib/esm/abort-controller.d.mts +135 -0
- package/dist/lib/esm/abort-controller.mjs +159 -0
- package/dist/lib/esm/aggregate-error.d.mts +24 -0
- package/dist/lib/esm/aggregate-error.mjs +60 -0
- package/dist/lib/esm/array-buffer.d.mts +16 -0
- package/dist/lib/esm/array-buffer.mjs +58 -0
- package/dist/lib/esm/array.d.mts +46 -0
- package/dist/lib/esm/array.mjs +93 -0
- package/dist/lib/esm/async-events.d.mts +456 -0
- package/dist/lib/esm/async-events.mjs +427 -0
- package/dist/lib/esm/async-operation-hook.d.mts +59 -0
- package/dist/lib/esm/async-operation-hook.mjs +71 -0
- package/dist/lib/esm/async.d.mts +414 -0
- package/dist/lib/esm/async.mjs +479 -0
- package/dist/lib/esm/beeper.d.mts +21 -0
- package/dist/lib/esm/beeper.mjs +88 -0
- package/dist/lib/esm/blob.d.mts +59 -0
- package/dist/lib/esm/blob.mjs +121 -0
- package/dist/lib/esm/bytes.d.mts +17 -0
- package/dist/lib/esm/bytes.mjs +76 -0
- package/dist/lib/esm/debug-controller.d.mts +87 -0
- package/dist/lib/esm/debug-controller.mjs +50 -0
- package/dist/lib/esm/debug.d.mts +66 -0
- package/dist/lib/esm/debug.mjs +185 -0
- package/dist/lib/esm/desktop-zip-extractor.d.mts +95 -0
- package/dist/lib/esm/desktop-zip-extractor.mjs +180 -0
- package/dist/lib/esm/disposable.d.mts +387 -0
- package/dist/lib/esm/disposable.mjs +360 -0
- package/dist/lib/esm/enum.d.mts +24 -0
- package/dist/lib/esm/enum.mjs +61 -0
- package/dist/lib/esm/error.d.mts +181 -0
- package/dist/lib/esm/error.mjs +248 -0
- package/dist/lib/esm/function.d.mts +128 -0
- package/dist/lib/esm/function.mjs +96 -0
- package/dist/lib/esm/html-element.d.mts +199 -0
- package/dist/lib/esm/html-element.mjs +291 -0
- package/dist/lib/esm/index.d.mts +33 -0
- package/dist/lib/esm/index.mjs +116 -0
- package/dist/lib/esm/jpeg-metadata.d.mts +42 -0
- package/dist/lib/esm/jpeg-metadata.mjs +189 -0
- package/dist/lib/esm/library.d.mts +96 -0
- package/dist/lib/esm/library.mjs +118 -0
- package/dist/lib/esm/object-utils.d.mts +298 -0
- package/dist/lib/esm/object-utils.mjs +567 -0
- package/dist/lib/esm/path.d.mts +154 -0
- package/dist/lib/esm/path.mjs +139 -0
- package/dist/lib/esm/reg-exp.d.mts +87 -0
- package/dist/lib/esm/reg-exp.mjs +213 -0
- package/dist/lib/esm/string.d.mts +361 -0
- package/dist/lib/esm/string.mjs +274 -0
- package/dist/lib/esm/transformers/date-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/date-transformer.mjs +91 -0
- package/dist/lib/esm/transformers/group-transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/group-transformer.mjs +138 -0
- package/dist/lib/esm/transformers/index.d.mts +9 -0
- package/dist/lib/esm/transformers/index.mjs +68 -0
- package/dist/lib/esm/transformers/map-transformer.d.mts +41 -0
- package/dist/lib/esm/transformers/map-transformer.mjs +91 -0
- package/dist/lib/esm/transformers/set-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/set-transformer.mjs +91 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +36 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +89 -0
- package/dist/lib/esm/transformers/transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/transformer.mjs +132 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +42 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.mjs +92 -0
- package/dist/lib/esm/transformers/typed-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/typed-transformer.mjs +56 -0
- package/dist/lib/esm/two-way-map.d.mts +101 -0
- package/dist/lib/esm/two-way-map.mjs +170 -0
- package/dist/lib/esm/type-guards.d.mts +84 -0
- package/dist/lib/esm/type-guards.mjs +85 -0
- package/dist/lib/esm/type.d.mts +122 -0
- package/dist/lib/esm/type.mjs +83 -0
- package/dist/lib/esm/typescript-lib-state.d.mts +56 -0
- package/dist/lib/esm/typescript-lib-state.mjs +84 -0
- package/dist/lib/esm/url.d.mts +74 -0
- package/dist/lib/esm/url.mjs +94 -0
- package/dist/lib/esm/value-provider.d.mts +28 -0
- package/dist/lib/esm/value-provider.mjs +62 -0
- package/dist/lib/esm/value-wrapper.d.mts +47 -0
- package/dist/lib/esm/value-wrapper.mjs +106 -0
- package/package.json +111 -13
- package/transformers/date-transformer/package.json +6 -0
- package/transformers/group-transformer/package.json +6 -0
- package/transformers/index/package.json +6 -0
- package/transformers/map-transformer/package.json +6 -0
- package/transformers/package.json +6 -0
- package/transformers/set-transformer/package.json +6 -0
- package/transformers/skip-private-property-transformer/package.json +6 -0
- package/transformers/transformer/package.json +6 -0
- package/transformers/two-way-map-transformer/package.json +6 -0
- package/transformers/typed-transformer/package.json +6 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return '/';
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: 'android'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
|
+
const existingProcess = globalThis.process;
|
|
24
|
+
|
|
25
|
+
if (!existingProcess) {
|
|
26
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
|
+
globalThis.process = browserProcess;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (existingProcess.versions?.node) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const existingProcessRecord = existingProcess;
|
|
36
|
+
|
|
37
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
|
+
existingProcessRecord[key] ??= value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
existingProcessRecord['browser'] = true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
(function initEsm() {
|
|
45
|
+
ensureDisposeSymbols();
|
|
46
|
+
ensureBrowserProcess();
|
|
47
|
+
})();
|
|
48
|
+
})();
|
|
49
|
+
|
|
50
|
+
const BEEP_DURATION_SECONDS = 0.08;
|
|
51
|
+
const BEEP_FREQUENCY_HZ = 660;
|
|
52
|
+
const BEEP_GAIN = 0.05;
|
|
53
|
+
const BEEP_THROTTLE_MILLISECONDS = 200;
|
|
54
|
+
class Beeper {
|
|
55
|
+
audioContext = null;
|
|
56
|
+
lastBeepMilliseconds = 0;
|
|
57
|
+
/**
|
|
58
|
+
* Plays a short beep. A no-op if called again within {@link BEEP_THROTTLE_MILLISECONDS} of the
|
|
59
|
+
* previous beep (so a burst of rejected actions does not stack into a buzz), or if the Web Audio API
|
|
60
|
+
* is unavailable (e.g. the jsdom test environment).
|
|
61
|
+
*/
|
|
62
|
+
beep() {
|
|
63
|
+
const nowMilliseconds = Date.now();
|
|
64
|
+
if (nowMilliseconds - this.lastBeepMilliseconds < BEEP_THROTTLE_MILLISECONDS) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.lastBeepMilliseconds = nowMilliseconds;
|
|
68
|
+
const AudioContextClass = window.AudioContext;
|
|
69
|
+
if (!AudioContextClass) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.audioContext ??= new AudioContextClass();
|
|
73
|
+
const audioContext = this.audioContext;
|
|
74
|
+
const oscillator = audioContext.createOscillator();
|
|
75
|
+
const gainNode = audioContext.createGain();
|
|
76
|
+
oscillator.type = "sine";
|
|
77
|
+
oscillator.frequency.value = BEEP_FREQUENCY_HZ;
|
|
78
|
+
gainNode.gain.value = BEEP_GAIN;
|
|
79
|
+
oscillator.connect(gainNode);
|
|
80
|
+
gainNode.connect(audioContext.destination);
|
|
81
|
+
oscillator.start();
|
|
82
|
+
oscillator.stop(audioContext.currentTime + BEEP_DURATION_SECONDS);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export {
|
|
86
|
+
Beeper
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2JlZXBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgc21hbGwgYXVkaWJsZS1mZWVkYmFjayBoZWxwZXIgdGhhdCBwbGF5cyBhIHNob3J0LCB0aHJvdHRsZWQgYmVlcCB2aWEgdGhlIFdlYiBBdWRpbyBBUEkuIFVzZSBpdCB0b1xuICogc2lnbmFsIGEgcmVqZWN0ZWQgb3IgYmxvY2tlZCB1c2VyIGFjdGlvbiBcdTIwMTQgZS5nLiB0eXBpbmcgaW50byBhIGxvY2tlZCBub3RlLCBvciBhdHRlbXB0aW5nIGFuIGFjdGlvblxuICogd2hpbGUgYSBtb2RhbCBpcyBtaW5pbWl6ZWQuXG4gKi9cblxuY29uc3QgQkVFUF9EVVJBVElPTl9TRUNPTkRTID0gMC4wODtcbmNvbnN0IEJFRVBfRlJFUVVFTkNZX0haID0gNjYwO1xuY29uc3QgQkVFUF9HQUlOID0gMC4wNTtcbmNvbnN0IEJFRVBfVEhST1RUTEVfTUlMTElTRUNPTkRTID0gMjAwO1xuXG4vKipcbiAqIFBsYXlzIGEgc2hvcnQsIHRocm90dGxlZCBiZWVwIHRvIHNpZ25hbCBhIHJlamVjdGVkIG9yIGJsb2NrZWQgdXNlciBhY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBCZWVwZXIge1xuICBwcml2YXRlIGF1ZGlvQ29udGV4dDogQXVkaW9Db250ZXh0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGFzdEJlZXBNaWxsaXNlY29uZHMgPSAwO1xuXG4gIC8qKlxuICAgKiBQbGF5cyBhIHNob3J0IGJlZXAuIEEgbm8tb3AgaWYgY2FsbGVkIGFnYWluIHdpdGhpbiB7QGxpbmsgQkVFUF9USFJPVFRMRV9NSUxMSVNFQ09ORFN9IG9mIHRoZVxuICAgKiBwcmV2aW91cyBiZWVwIChzbyBhIGJ1cnN0IG9mIHJlamVjdGVkIGFjdGlvbnMgZG9lcyBub3Qgc3RhY2sgaW50byBhIGJ1enopLCBvciBpZiB0aGUgV2ViIEF1ZGlvIEFQSVxuICAgKiBpcyB1bmF2YWlsYWJsZSAoZS5nLiB0aGUganNkb20gdGVzdCBlbnZpcm9ubWVudCkuXG4gICAqL1xuICBwdWJsaWMgYmVlcCgpOiB2b2lkIHtcbiAgICAvLyBUaHJvdHRsZSBzbyBhIGJ1cnN0IG9mIHJlamVjdGVkIGFjdGlvbnMgZG9lcyBub3Qgc3RhY2sgb3ZlcmxhcHBpbmcgdG9uZXMgaW50byBhIGJ1enouXG4gICAgY29uc3Qgbm93TWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKTtcbiAgICBpZiAobm93TWlsbGlzZWNvbmRzIC0gdGhpcy5sYXN0QmVlcE1pbGxpc2Vjb25kcyA8IEJFRVBfVEhST1RUTEVfTUlMTElTRUNPTkRTKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubGFzdEJlZXBNaWxsaXNlY29uZHMgPSBub3dNaWxsaXNlY29uZHM7XG5cbiAgICAvLyBgbGliLmRvbWAgdHlwZXMgYEF1ZGlvQ29udGV4dGAgYXMgYWx3YXlzIHByZXNlbnQsIGJ1dCBpdCBpcyBhYnNlbnQgaW4gc29tZSBydW50aW1lc1xuICAgIC8vIChlLmcuIHRoZSBqc2RvbSB0ZXN0IGVudmlyb25tZW50KSwgc28gdGhpcyBndWFyZCBpcyByZWFsLCBub3QgcmVkdW5kYW50LlxuICAgIGNvbnN0IEF1ZGlvQ29udGV4dENsYXNzID0gd2luZG93LkF1ZGlvQ29udGV4dDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBzZWUgdGhlIGNvbW1lbnQgYWJvdmUuXG4gICAgaWYgKCFBdWRpb0NvbnRleHRDbGFzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmF1ZGlvQ29udGV4dCA/Pz0gbmV3IEF1ZGlvQ29udGV4dENsYXNzKCk7XG4gICAgY29uc3QgYXVkaW9Db250ZXh0ID0gdGhpcy5hdWRpb0NvbnRleHQ7XG4gICAgY29uc3Qgb3NjaWxsYXRvciA9IGF1ZGlvQ29udGV4dC5jcmVhdGVPc2NpbGxhdG9yKCk7XG4gICAgY29uc3QgZ2Fpbk5vZGUgPSBhdWRpb0NvbnRleHQuY3JlYXRlR2FpbigpO1xuICAgIG9zY2lsbGF0b3IudHlwZSA9ICdzaW5lJztcbiAgICBvc2NpbGxhdG9yLmZyZXF1ZW5jeS52YWx1ZSA9IEJFRVBfRlJFUVVFTkNZX0haO1xuICAgIGdhaW5Ob2RlLmdhaW4udmFsdWUgPSBCRUVQX0dBSU47XG4gICAgb3NjaWxsYXRvci5jb25uZWN0KGdhaW5Ob2RlKTtcbiAgICBnYWluTm9kZS5jb25uZWN0KGF1ZGlvQ29udGV4dC5kZXN0aW5hdGlvbik7XG4gICAgb3NjaWxsYXRvci5zdGFydCgpO1xuICAgIG9zY2lsbGF0b3Iuc3RvcChhdWRpb0NvbnRleHQuY3VycmVudFRpbWUgKyBCRUVQX0RVUkFUSU9OX1NFQ09ORFMpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sNkJBQTZCO0FBSzVCLE1BQU0sT0FBTztBQUFBLEVBQ1YsZUFBb0M7QUFBQSxFQUNwQyx1QkFBdUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPeEIsT0FBYTtBQUVsQixVQUFNLGtCQUFrQixLQUFLLElBQUk7QUFDakMsUUFBSSxrQkFBa0IsS0FBSyx1QkFBdUIsNEJBQTRCO0FBQzVFO0FBQUEsSUFDRjtBQUNBLFNBQUssdUJBQXVCO0FBSTVCLFVBQU0sb0JBQW9CLE9BQU87QUFFakMsUUFBSSxDQUFDLG1CQUFtQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxTQUFLLGlCQUFpQixJQUFJLGtCQUFrQjtBQUM1QyxVQUFNLGVBQWUsS0FBSztBQUMxQixVQUFNLGFBQWEsYUFBYSxpQkFBaUI7QUFDakQsVUFBTSxXQUFXLGFBQWEsV0FBVztBQUN6QyxlQUFXLE9BQU87QUFDbEIsZUFBVyxVQUFVLFFBQVE7QUFDN0IsYUFBUyxLQUFLLFFBQVE7QUFDdEIsZUFBVyxRQUFRLFFBQVE7QUFDM0IsYUFBUyxRQUFRLGFBQWEsV0FBVztBQUN6QyxlQUFXLE1BQU07QUFDakIsZUFBVyxLQUFLLGFBQWEsY0FBYyxxQkFBcUI7QUFBQSxFQUNsRTtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/// <reference path="./library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Contains utility functions for Blob objects.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Options for {@link blobToJpegArrayBuffer}.
|
|
9
|
+
*/
|
|
10
|
+
export interface BlobToJpegArrayBufferOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Whether to carry the source image's metadata segments (EXIF, GPS, XMP, ICC profile) into the
|
|
13
|
+
* re-encoded JPEG. Only has an effect when the source is a JPEG. Defaults to `false`, which is the
|
|
14
|
+
* behavior a canvas re-encode has always had.
|
|
15
|
+
*/
|
|
16
|
+
readonly shouldPreserveMetadata?: boolean | undefined;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Converts a {@link Blob} object to an {@link ArrayBuffer}.
|
|
20
|
+
*
|
|
21
|
+
* @param blob - The Blob object to convert.
|
|
22
|
+
* @returns A {@link Promise} that resolves to an {@link ArrayBuffer}.
|
|
23
|
+
*/
|
|
24
|
+
export declare function blobToArrayBuffer(blob: Blob): Promise<ArrayBuffer>;
|
|
25
|
+
/**
|
|
26
|
+
* Converts a {@link Blob} object to a data URL.
|
|
27
|
+
*
|
|
28
|
+
* @param blob - The Blob object to convert.
|
|
29
|
+
* @returns A {@link Promise} that resolves to a data URL.
|
|
30
|
+
*/
|
|
31
|
+
export declare function blobToDataUrl(blob: Blob): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Converts a {@link Blob} object to a JPEG ArrayBuffer with the specified quality.
|
|
34
|
+
*
|
|
35
|
+
* The conversion is a canvas re-encode, which keeps only the pixels — EXIF, GPS, XMP and the ICC
|
|
36
|
+
* profile are dropped by construction. Pass {@link BlobToJpegArrayBufferOptions.shouldPreserveMetadata}
|
|
37
|
+
* to carry those segments across from the source, which works only when the source is itself a JPEG:
|
|
38
|
+
* nothing else stores them in a form that can be copied verbatim.
|
|
39
|
+
*
|
|
40
|
+
* @param blob - The Blob object to convert.
|
|
41
|
+
* @param jpegQuality - The quality of the JPEG image (0 to 1).
|
|
42
|
+
* @param options - Conversion options.
|
|
43
|
+
* @returns A {@link Promise} that resolves to an {@link ArrayBuffer}.
|
|
44
|
+
*/
|
|
45
|
+
export declare function blobToJpegArrayBuffer(blob: Blob, jpegQuality: number, options?: BlobToJpegArrayBufferOptions): Promise<ArrayBuffer>;
|
|
46
|
+
/**
|
|
47
|
+
* Converts a base64 encoded string to an {@link ArrayBuffer}.
|
|
48
|
+
*
|
|
49
|
+
* @param dataUrl - The data URL to convert.
|
|
50
|
+
* @returns The decoded ArrayBuffer.
|
|
51
|
+
*/
|
|
52
|
+
export declare function dataUrlToArrayBuffer(dataUrl: string): ArrayBuffer;
|
|
53
|
+
/**
|
|
54
|
+
* Checks if a given file is an image.
|
|
55
|
+
*
|
|
56
|
+
* @param file - The file to check.
|
|
57
|
+
* @returns `true` if the file is an image, `false` otherwise.
|
|
58
|
+
*/
|
|
59
|
+
export declare function isImageFile(file: File): boolean;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return '/';
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: 'android'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
|
+
const existingProcess = globalThis.process;
|
|
24
|
+
|
|
25
|
+
if (!existingProcess) {
|
|
26
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
|
+
globalThis.process = browserProcess;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (existingProcess.versions?.node) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const existingProcessRecord = existingProcess;
|
|
36
|
+
|
|
37
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
|
+
existingProcessRecord[key] ??= value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
existingProcessRecord['browser'] = true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
(function initEsm() {
|
|
45
|
+
ensureDisposeSymbols();
|
|
46
|
+
ensureBrowserProcess();
|
|
47
|
+
})();
|
|
48
|
+
})();
|
|
49
|
+
|
|
50
|
+
import {
|
|
51
|
+
extractJpegMetadataSegments,
|
|
52
|
+
injectJpegMetadataSegments
|
|
53
|
+
} from "./jpeg-metadata.mjs";
|
|
54
|
+
import { assertNonNullable } from "./type-guards.mjs";
|
|
55
|
+
async function blobToArrayBuffer(blob) {
|
|
56
|
+
return await blob.arrayBuffer();
|
|
57
|
+
}
|
|
58
|
+
async function blobToDataUrl(blob) {
|
|
59
|
+
return await new Promise((resolve) => {
|
|
60
|
+
const reader = new FileReader();
|
|
61
|
+
reader.addEventListener("loadend", handleLoadEnd);
|
|
62
|
+
reader.readAsDataURL(blob);
|
|
63
|
+
function handleLoadEnd() {
|
|
64
|
+
resolve(reader.result);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
async function blobToJpegArrayBuffer(blob, jpegQuality, options) {
|
|
69
|
+
const sourceSegments = options?.shouldPreserveMetadata ? extractJpegMetadataSegments(new Uint8Array(await blob.arrayBuffer())) : [];
|
|
70
|
+
const dataUrl = await blobToDataUrl(blob);
|
|
71
|
+
return new Promise((resolve) => {
|
|
72
|
+
const image = new Image();
|
|
73
|
+
image.addEventListener("load", handleLoad);
|
|
74
|
+
image.src = dataUrl;
|
|
75
|
+
function handleLoad() {
|
|
76
|
+
const canvas = document.createElement("canvas");
|
|
77
|
+
const context = canvas.getContext("2d");
|
|
78
|
+
assertNonNullable(context, "Could not get 2D context.");
|
|
79
|
+
const imageWidth = image.width;
|
|
80
|
+
const imageHeight = image.height;
|
|
81
|
+
canvas.width = imageWidth;
|
|
82
|
+
canvas.height = imageHeight;
|
|
83
|
+
context.fillStyle = "#fff";
|
|
84
|
+
context.fillRect(0, 0, imageWidth, imageHeight);
|
|
85
|
+
context.save();
|
|
86
|
+
const HALF = 0.5;
|
|
87
|
+
context.translate(imageWidth * HALF, imageHeight * HALF);
|
|
88
|
+
context.drawImage(image, 0, 0, imageWidth, imageHeight, -imageWidth * HALF, -imageHeight * HALF, imageWidth, imageHeight);
|
|
89
|
+
context.restore();
|
|
90
|
+
const jpegDataUrl = canvas.toDataURL("image/jpeg", jpegQuality);
|
|
91
|
+
const arrayBuffer = dataUrlToArrayBuffer(jpegDataUrl);
|
|
92
|
+
const withMetadata = injectJpegMetadataSegments(new Uint8Array(arrayBuffer), sourceSegments);
|
|
93
|
+
resolve(withMetadata.buffer);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function dataUrlToArrayBuffer(dataUrl) {
|
|
98
|
+
const parts = dataUrl.split(";base64,");
|
|
99
|
+
const base64 = parts[1];
|
|
100
|
+
if (!base64) {
|
|
101
|
+
throw new Error("Invalid data URL");
|
|
102
|
+
}
|
|
103
|
+
const raw = atob(base64);
|
|
104
|
+
const rawLength = raw.length;
|
|
105
|
+
const uInt8Array = new Uint8Array(rawLength);
|
|
106
|
+
for (let index = 0; index < rawLength; index++) {
|
|
107
|
+
uInt8Array[index] = raw.charCodeAt(index);
|
|
108
|
+
}
|
|
109
|
+
return uInt8Array.buffer;
|
|
110
|
+
}
|
|
111
|
+
function isImageFile(file) {
|
|
112
|
+
return file.type.startsWith("image/");
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
blobToArrayBuffer,
|
|
116
|
+
blobToDataUrl,
|
|
117
|
+
blobToJpegArrayBuffer,
|
|
118
|
+
dataUrlToArrayBuffer,
|
|
119
|
+
isImageFile
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Jsb2IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgQmxvYiBvYmplY3RzLlxuICovXG5cbmltcG9ydCB7XG4gIGV4dHJhY3RKcGVnTWV0YWRhdGFTZWdtZW50cyxcbiAgaW5qZWN0SnBlZ01ldGFkYXRhU2VnbWVudHNcbn0gZnJvbSAnLi9qcGVnLW1ldGFkYXRhLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGJsb2JUb0pwZWdBcnJheUJ1ZmZlcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmxvYlRvSnBlZ0FycmF5QnVmZmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNhcnJ5IHRoZSBzb3VyY2UgaW1hZ2UncyBtZXRhZGF0YSBzZWdtZW50cyAoRVhJRiwgR1BTLCBYTVAsIElDQyBwcm9maWxlKSBpbnRvIHRoZVxuICAgKiByZS1lbmNvZGVkIEpQRUcuIE9ubHkgaGFzIGFuIGVmZmVjdCB3aGVuIHRoZSBzb3VyY2UgaXMgYSBKUEVHLiBEZWZhdWx0cyB0byBgZmFsc2VgLCB3aGljaCBpcyB0aGVcbiAgICogYmVoYXZpb3IgYSBjYW52YXMgcmUtZW5jb2RlIGhhcyBhbHdheXMgaGFkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUHJlc2VydmVNZXRhZGF0YT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSB7QGxpbmsgQmxvYn0gb2JqZWN0IHRvIGFuIHtAbGluayBBcnJheUJ1ZmZlcn0uXG4gKlxuICogQHBhcmFtIGJsb2IgLSBUaGUgQmxvYiBvYmplY3QgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYW4ge0BsaW5rIEFycmF5QnVmZmVyfS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJsb2JUb0FycmF5QnVmZmVyKGJsb2I6IEJsb2IpOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XG4gIHJldHVybiBhd2FpdCBibG9iLmFycmF5QnVmZmVyKCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSB7QGxpbmsgQmxvYn0gb2JqZWN0IHRvIGEgZGF0YSBVUkwuXG4gKlxuICogQHBhcmFtIGJsb2IgLSBUaGUgQmxvYiBvYmplY3QgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBkYXRhIFVSTC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJsb2JUb0RhdGFVcmwoYmxvYjogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBoYW5kbGVMb2FkRW5kKTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcblxuICAgIGZ1bmN0aW9uIGhhbmRsZUxvYWRFbmQoKTogdm9pZCB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEge0BsaW5rIEJsb2J9IG9iamVjdCB0byBhIEpQRUcgQXJyYXlCdWZmZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHF1YWxpdHkuXG4gKlxuICogVGhlIGNvbnZlcnNpb24gaXMgYSBjYW52YXMgcmUtZW5jb2RlLCB3aGljaCBrZWVwcyBvbmx5IHRoZSBwaXhlbHMgXHUyMDE0IEVYSUYsIEdQUywgWE1QIGFuZCB0aGUgSUNDXG4gKiBwcm9maWxlIGFyZSBkcm9wcGVkIGJ5IGNvbnN0cnVjdGlvbi4gUGFzcyB7QGxpbmsgQmxvYlRvSnBlZ0FycmF5QnVmZmVyT3B0aW9ucy5zaG91bGRQcmVzZXJ2ZU1ldGFkYXRhfVxuICogdG8gY2FycnkgdGhvc2Ugc2VnbWVudHMgYWNyb3NzIGZyb20gdGhlIHNvdXJjZSwgd2hpY2ggd29ya3Mgb25seSB3aGVuIHRoZSBzb3VyY2UgaXMgaXRzZWxmIGEgSlBFRzpcbiAqIG5vdGhpbmcgZWxzZSBzdG9yZXMgdGhlbSBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgY29waWVkIHZlcmJhdGltLlxuICpcbiAqIEBwYXJhbSBibG9iIC0gVGhlIEJsb2Igb2JqZWN0IHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ganBlZ1F1YWxpdHkgLSBUaGUgcXVhbGl0eSBvZiB0aGUgSlBFRyBpbWFnZSAoMCB0byAxKS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29udmVyc2lvbiBvcHRpb25zLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhbiB7QGxpbmsgQXJyYXlCdWZmZXJ9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmxvYlRvSnBlZ0FycmF5QnVmZmVyKGJsb2I6IEJsb2IsIGpwZWdRdWFsaXR5OiBudW1iZXIsIG9wdGlvbnM/OiBCbG9iVG9KcGVnQXJyYXlCdWZmZXJPcHRpb25zKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICBjb25zdCBzb3VyY2VTZWdtZW50cyA9IG9wdGlvbnM/LnNob3VsZFByZXNlcnZlTWV0YWRhdGFcbiAgICA/IGV4dHJhY3RKcGVnTWV0YWRhdGFTZWdtZW50cyhuZXcgVWludDhBcnJheShhd2FpdCBibG9iLmFycmF5QnVmZmVyKCkpKVxuICAgIDogW107XG4gIGNvbnN0IGRhdGFVcmwgPSBhd2FpdCBibG9iVG9EYXRhVXJsKGJsb2IpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBoYW5kbGVMb2FkKTtcbiAgICBpbWFnZS5zcmMgPSBkYXRhVXJsO1xuXG4gICAgZnVuY3Rpb24gaGFuZGxlTG9hZCgpOiB2b2lkIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL3ByZWZlci1jcmVhdGUtZWwgLS0gQWdub3N0aWMgbW9kdWxlLlxuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShjb250ZXh0LCAnQ291bGQgbm90IGdldCAyRCBjb250ZXh0LicpO1xuICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGltYWdlLndpZHRoO1xuICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG5cbiAgICAgIGNhbnZhcy53aWR0aCA9IGltYWdlV2lkdGg7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gaW1hZ2VIZWlnaHQ7XG5cbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyNmZmYnO1xuICAgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7XG4gICAgICBjb250ZXh0LnNhdmUoKTtcblxuICAgICAgY29uc3QgSEFMRiA9IDAuNTtcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKGltYWdlV2lkdGggKiBIQUxGLCBpbWFnZUhlaWdodCAqIEhBTEYpO1xuICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0LCAtaW1hZ2VXaWR0aCAqIEhBTEYsIC1pbWFnZUhlaWdodCAqIEhBTEYsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTtcbiAgICAgIGNvbnRleHQucmVzdG9yZSgpO1xuXG4gICAgICBjb25zdCBqcGVnRGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBqcGVnUXVhbGl0eSk7XG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGRhdGFVcmxUb0FycmF5QnVmZmVyKGpwZWdEYXRhVXJsKTtcbiAgICAgIGNvbnN0IHdpdGhNZXRhZGF0YSA9IGluamVjdEpwZWdNZXRhZGF0YVNlZ21lbnRzKG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSwgc291cmNlU2VnbWVudHMpO1xuICAgICAgcmVzb2x2ZSh3aXRoTWV0YWRhdGEuYnVmZmVyIGFzIEFycmF5QnVmZmVyKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIHRvIGFuIHtAbGluayBBcnJheUJ1ZmZlcn0uXG4gKlxuICogQHBhcmFtIGRhdGFVcmwgLSBUaGUgZGF0YSBVUkwgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBkZWNvZGVkIEFycmF5QnVmZmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YVVybFRvQXJyYXlCdWZmZXIoZGF0YVVybDogc3RyaW5nKTogQXJyYXlCdWZmZXIge1xuICBjb25zdCBwYXJ0cyA9IGRhdGFVcmwuc3BsaXQoJztiYXNlNjQsJyk7XG4gIGNvbnN0IGJhc2U2NCA9IHBhcnRzWzFdO1xuICBpZiAoIWJhc2U2NCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhIFVSTCcpO1xuICB9XG5cbiAgY29uc3QgcmF3ID0gYXRvYihiYXNlNjQpO1xuICBjb25zdCByYXdMZW5ndGggPSByYXcubGVuZ3RoO1xuXG4gIGNvbnN0IHVJbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShyYXdMZW5ndGgpO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByYXdMZW5ndGg7IGluZGV4KyspIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItY29kZS1wb2ludCAtLSBgcmF3YCBpcyBhIGJpbmFyeSBzdHJpbmcsIG9uZSBieXRlIHBlciBjb2RlIHVuaXQuIGBjb2RlUG9pbnRBdGAgd291bGQgY29tYmluZSBhIHN1cnJvZ2F0ZSBwYWlyIGludG8gYSB2YWx1ZSBhYm92ZSAyNTUgYW5kIGNvbnN1bWUgdHdvIHBvc2l0aW9ucywgd2hpY2ggaXMgZXhhY3RseSB0aGUgd3JvbmcgcmVhZGluZyBoZXJlLlxuICAgIHVJbnQ4QXJyYXlbaW5kZXhdID0gcmF3LmNoYXJDb2RlQXQoaW5kZXgpO1xuICB9XG4gIHJldHVybiB1SW50OEFycmF5LmJ1ZmZlcjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBmaWxlIGlzIGFuIGltYWdlLlxuICpcbiAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZpbGUgaXMgYW4gaW1hZ2UsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbWFnZUZpbGUoZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFvQmxDLGVBQXNCLGtCQUFrQixNQUFrQztBQUN4RSxTQUFPLE1BQU0sS0FBSyxZQUFZO0FBQ2hDO0FBUUEsZUFBc0IsY0FBYyxNQUE2QjtBQUMvRCxTQUFPLE1BQU0sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUNwQyxVQUFNLFNBQVMsSUFBSSxXQUFXO0FBQzlCLFdBQU8saUJBQWlCLFdBQVcsYUFBYTtBQUNoRCxXQUFPLGNBQWMsSUFBSTtBQUV6QixhQUFTLGdCQUFzQjtBQUM3QixjQUFRLE9BQU8sTUFBZ0I7QUFBQSxJQUNqQztBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBZUEsZUFBc0Isc0JBQXNCLE1BQVksYUFBcUIsU0FBOEQ7QUFDekksUUFBTSxpQkFBaUIsU0FBUyx5QkFDNUIsNEJBQTRCLElBQUksV0FBVyxNQUFNLEtBQUssWUFBWSxDQUFDLENBQUMsSUFDcEUsQ0FBQztBQUNMLFFBQU0sVUFBVSxNQUFNLGNBQWMsSUFBSTtBQUN4QyxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsVUFBTSxRQUFRLElBQUksTUFBTTtBQUN4QixVQUFNLGlCQUFpQixRQUFRLFVBQVU7QUFDekMsVUFBTSxNQUFNO0FBRVosYUFBUyxhQUFtQjtBQUUxQixZQUFNLFNBQVMsU0FBUyxjQUFjLFFBQVE7QUFDOUMsWUFBTSxVQUFVLE9BQU8sV0FBVyxJQUFJO0FBQ3RDLHdCQUFrQixTQUFTLDJCQUEyQjtBQUN0RCxZQUFNLGFBQWEsTUFBTTtBQUN6QixZQUFNLGNBQWMsTUFBTTtBQUUxQixhQUFPLFFBQVE7QUFDZixhQUFPLFNBQVM7QUFFaEIsY0FBUSxZQUFZO0FBQ3BCLGNBQVEsU0FBUyxHQUFHLEdBQUcsWUFBWSxXQUFXO0FBQzlDLGNBQVEsS0FBSztBQUViLFlBQU0sT0FBTztBQUNiLGNBQVEsVUFBVSxhQUFhLE1BQU0sY0FBYyxJQUFJO0FBQ3ZELGNBQVEsVUFBVSxPQUFPLEdBQUcsR0FBRyxZQUFZLGFBQWEsQ0FBQyxhQUFhLE1BQU0sQ0FBQyxjQUFjLE1BQU0sWUFBWSxXQUFXO0FBQ3hILGNBQVEsUUFBUTtBQUVoQixZQUFNLGNBQWMsT0FBTyxVQUFVLGNBQWMsV0FBVztBQUM5RCxZQUFNLGNBQWMscUJBQXFCLFdBQVc7QUFDcEQsWUFBTSxlQUFlLDJCQUEyQixJQUFJLFdBQVcsV0FBVyxHQUFHLGNBQWM7QUFDM0YsY0FBUSxhQUFhLE1BQXFCO0FBQUEsSUFDNUM7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVFPLFNBQVMscUJBQXFCLFNBQThCO0FBQ2pFLFFBQU0sUUFBUSxRQUFRLE1BQU0sVUFBVTtBQUN0QyxRQUFNLFNBQVMsTUFBTSxDQUFDO0FBQ3RCLE1BQUksQ0FBQyxRQUFRO0FBQ1gsVUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsRUFDcEM7QUFFQSxRQUFNLE1BQU0sS0FBSyxNQUFNO0FBQ3ZCLFFBQU0sWUFBWSxJQUFJO0FBRXRCLFFBQU0sYUFBYSxJQUFJLFdBQVcsU0FBUztBQUUzQyxXQUFTLFFBQVEsR0FBRyxRQUFRLFdBQVcsU0FBUztBQUU5QyxlQUFXLEtBQUssSUFBSSxJQUFJLFdBQVcsS0FBSztBQUFBLEVBQzFDO0FBQ0EsU0FBTyxXQUFXO0FBQ3BCO0FBUU8sU0FBUyxZQUFZLE1BQXFCO0FBQy9DLFNBQU8sS0FBSyxLQUFLLFdBQVcsUUFBUTtBQUN0QzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference path="./library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Contains utility functions for byte counts.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Renders a byte count the way a file manager does, so a running total answers "is this getting huge?" at
|
|
9
|
+
* a glance.
|
|
10
|
+
*
|
|
11
|
+
* Past the largest unit the number keeps growing rather than starting over, because under-reporting a size
|
|
12
|
+
* by a factor of 1024 is worse than an ungainly number.
|
|
13
|
+
*
|
|
14
|
+
* @param bytes - The number of bytes.
|
|
15
|
+
* @returns The formatted size, e.g. `1.4 MB`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatBytes(bytes: number): string;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return '/';
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: 'android'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
|
+
const existingProcess = globalThis.process;
|
|
24
|
+
|
|
25
|
+
if (!existingProcess) {
|
|
26
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
|
+
globalThis.process = browserProcess;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (existingProcess.versions?.node) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const existingProcessRecord = existingProcess;
|
|
36
|
+
|
|
37
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
|
+
existingProcessRecord[key] ??= value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
existingProcessRecord['browser'] = true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
(function initEsm() {
|
|
45
|
+
ensureDisposeSymbols();
|
|
46
|
+
ensureBrowserProcess();
|
|
47
|
+
})();
|
|
48
|
+
})();
|
|
49
|
+
|
|
50
|
+
const BYTES_PER_UNIT = 1024;
|
|
51
|
+
const DECIMALS = 1;
|
|
52
|
+
const UNITS = [
|
|
53
|
+
"B",
|
|
54
|
+
"KB",
|
|
55
|
+
"MB",
|
|
56
|
+
"GB",
|
|
57
|
+
"TB"
|
|
58
|
+
];
|
|
59
|
+
function formatBytes(bytes) {
|
|
60
|
+
let size = bytes;
|
|
61
|
+
let unit = UNITS[0];
|
|
62
|
+
let isInBytes = true;
|
|
63
|
+
for (const largerUnit of UNITS.slice(1)) {
|
|
64
|
+
if (size < BYTES_PER_UNIT) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
size /= BYTES_PER_UNIT;
|
|
68
|
+
unit = largerUnit;
|
|
69
|
+
isInBytes = false;
|
|
70
|
+
}
|
|
71
|
+
return `${isInBytes ? String(size) : size.toFixed(DECIMALS)} ${unit}`;
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
formatBytes
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J5dGVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGJ5dGUgY291bnRzLlxuICovXG5cbmNvbnN0IEJZVEVTX1BFUl9VTklUID0gMTAyNDtcbmNvbnN0IERFQ0lNQUxTID0gMTtcbmNvbnN0IFVOSVRTID0gW1xuICAnQicsXG4gICdLQicsXG4gICdNQicsXG4gICdHQicsXG4gICdUQidcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogUmVuZGVycyBhIGJ5dGUgY291bnQgdGhlIHdheSBhIGZpbGUgbWFuYWdlciBkb2VzLCBzbyBhIHJ1bm5pbmcgdG90YWwgYW5zd2VycyBcImlzIHRoaXMgZ2V0dGluZyBodWdlP1wiIGF0XG4gKiBhIGdsYW5jZS5cbiAqXG4gKiBQYXN0IHRoZSBsYXJnZXN0IHVuaXQgdGhlIG51bWJlciBrZWVwcyBncm93aW5nIHJhdGhlciB0aGFuIHN0YXJ0aW5nIG92ZXIsIGJlY2F1c2UgdW5kZXItcmVwb3J0aW5nIGEgc2l6ZVxuICogYnkgYSBmYWN0b3Igb2YgMTAyNCBpcyB3b3JzZSB0aGFuIGFuIHVuZ2Fpbmx5IG51bWJlci5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgbnVtYmVyIG9mIGJ5dGVzLlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBzaXplLCBlLmcuIGAxLjQgTUJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGxldCBzaXplID0gYnl0ZXM7XG4gIGxldCB1bml0OiBzdHJpbmcgPSBVTklUU1swXTtcbiAgbGV0IGlzSW5CeXRlcyA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBsYXJnZXJVbml0IG9mIFVOSVRTLnNsaWNlKDEpKSB7XG4gICAgaWYgKHNpemUgPCBCWVRFU19QRVJfVU5JVCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc2l6ZSAvPSBCWVRFU19QRVJfVU5JVDtcbiAgICB1bml0ID0gbGFyZ2VyVW5pdDtcbiAgICBpc0luQnl0ZXMgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFdob2xlIGJ5dGVzIG5ldmVyIHdhbnQgYSBkZWNpbWFsIHBvaW50OiBgODE3IEJgLCBub3QgYDgxNy4wIEJgLlxuICByZXR1cm4gYCR7aXNJbkJ5dGVzID8gU3RyaW5nKHNpemUpIDogc2l6ZS50b0ZpeGVkKERFQ0lNQUxTKX0gJHt1bml0fWA7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSxXQUFXO0FBQ2pCLE1BQU0sUUFBUTtBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFZTyxTQUFTLFlBQVksT0FBdUI7QUFDakQsTUFBSSxPQUFPO0FBQ1gsTUFBSSxPQUFlLE1BQU0sQ0FBQztBQUMxQixNQUFJLFlBQVk7QUFFaEIsYUFBVyxjQUFjLE1BQU0sTUFBTSxDQUFDLEdBQUc7QUFDdkMsUUFBSSxPQUFPLGdCQUFnQjtBQUN6QjtBQUFBLElBQ0Y7QUFFQSxZQUFRO0FBQ1IsV0FBTztBQUNQLGdCQUFZO0FBQUEsRUFDZDtBQUdBLFNBQU8sR0FBRyxZQUFZLE9BQU8sSUFBSSxJQUFJLEtBQUssUUFBUSxRQUFRLENBQUMsSUFBSSxJQUFJO0FBQ3JFOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/// <reference path="./library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Provides the interface for controlling debug output through namespace management.
|
|
6
|
+
*
|
|
7
|
+
* Debug namespaces follow the pattern 'lorem', `lorem:ipsum`, `lorem:ipsum:dolor`, etc, and can use wildcards (`*`).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* - `lorem:*` matches all submodules of 'lorem'
|
|
11
|
+
* - `*:ipsum` matches all plugins' `ipsum` submodules
|
|
12
|
+
* - `*` matches everything
|
|
13
|
+
*
|
|
14
|
+
* Special syntax:
|
|
15
|
+
* - Namespaces prefixed with '-' are explicitly disabled
|
|
16
|
+
* - Multiple namespaces can be combined with commas: `lorem,-lorem:ipsum,dolor:*`
|
|
17
|
+
*
|
|
18
|
+
* @see {@link https://mnaoumov.dev/obsidian-dev-utils/guides/debugging/}
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Controls debug output by managing debug namespaces.
|
|
22
|
+
* Exposed globally as `window.DEBUG`.
|
|
23
|
+
*
|
|
24
|
+
* @remarks
|
|
25
|
+
* Debug settings persist across plugin reloads in localStorage.
|
|
26
|
+
*/
|
|
27
|
+
export interface DebugController {
|
|
28
|
+
/**
|
|
29
|
+
* Disable specific debug namespaces. Disabled namespaces take precedence
|
|
30
|
+
* over enabled ones when there's a conflict.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* window.DEBUG.disable('foo-bar'); // hide all debug messages from the `foo-bar` plugin
|
|
35
|
+
* window.DEBUG.disable('foo-bar:*'); // hide all debug messages from the `foo-bar` plugin submodules
|
|
36
|
+
* window.DEBUG.disable(['foo-bar', 'baz-qux']); // disable multiple namespaces
|
|
37
|
+
* window.DEBUG.disable('foo-bar,baz-qux'); // disable multiple namespaces using comma-separated string
|
|
38
|
+
* window.DEBUG.disable('*'); // disable all debug messages
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @param namespaces - Single namespace string or array of namespace strings to disable
|
|
42
|
+
*/
|
|
43
|
+
disable: (namespaces: string | string[]) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Enable specific debug namespaces. Note that explicitly disabled
|
|
46
|
+
* namespaces (prefixed with '-') will remain disabled.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* window.DEBUG.enable('foo-bar'); // show all debug messages from the `foo-bar` plugin
|
|
51
|
+
* window.DEBUG.enable('foo-bar:obsidian-dev-utils:*'); // show all debug messages from the `obsidian-dev-utils` library within the `foo-bar` plugin
|
|
52
|
+
* window.DEBUG.enable('foo-bar:*'); // show all debug messages from the `foo-bar` plugin and its submodules
|
|
53
|
+
* window.DEBUG.enable('*:obsidian-dev-utils:*'); // show all debug messages for the `obsidian-dev-utils` library within any plugin
|
|
54
|
+
* window.DEBUG.enable(['foo-bar', 'baz-qux']); // enable multiple namespaces
|
|
55
|
+
* window.DEBUG.enable('foo-bar,baz-qux'); // enable multiple namespaces using comma-separated string
|
|
56
|
+
* window.DEBUG.enable('*'); // show all debug messages
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @param namespaces - Single namespace string or array of namespace strings to enable
|
|
60
|
+
*/
|
|
61
|
+
enable: (namespaces: string | string[]) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Get currently configured debug namespaces.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* window.DEBUG.get(); // returns ['foo-bar', 'baz-qux:*', '-lorem-ipsum']
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @returns Array of enabled and disabled (prefixed with `-`) debug namespaces
|
|
71
|
+
*/
|
|
72
|
+
get: () => string[];
|
|
73
|
+
/**
|
|
74
|
+
* Set debug namespaces, replacing all previous configurations.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* window.DEBUG.set(['foo-bar', 'baz-qux:*', '-lorem-ipsum']); // Enable 'foo-bar' and 'baz-qux:*', explicitly disable 'lorem-ipsum'
|
|
79
|
+
* window.DEBUG.set('foo-bar,baz-qux:*,-lorem-ipsum'); // Same thing using comma-separated string
|
|
80
|
+
* window.DEBUG.set('*'); // Enable all debug messages
|
|
81
|
+
* window.DEBUG.set(''); // Disable all debug messages
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @param namespaces - String or array of namespace patterns
|
|
85
|
+
*/
|
|
86
|
+
set: (namespaces: string | string[]) => void;
|
|
87
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return '/';
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: 'android'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
|
+
const existingProcess = globalThis.process;
|
|
24
|
+
|
|
25
|
+
if (!existingProcess) {
|
|
26
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
|
+
globalThis.process = browserProcess;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (existingProcess.versions?.node) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const existingProcessRecord = existingProcess;
|
|
36
|
+
|
|
37
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
|
+
existingProcessRecord[key] ??= value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
existingProcessRecord['browser'] = true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
(function initEsm() {
|
|
45
|
+
ensureDisposeSymbols();
|
|
46
|
+
ensureBrowserProcess();
|
|
47
|
+
})();
|
|
48
|
+
})();
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/// <reference path="./library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Contains utility functions for debugging.
|
|
6
|
+
*/
|
|
7
|
+
import type { Debugger } from 'debug';
|
|
8
|
+
import type { DebugController } from './debug-controller.mjs';
|
|
9
|
+
/**
|
|
10
|
+
* Parameters for {@link printWithStackTrace}.
|
|
11
|
+
*/
|
|
12
|
+
export interface PrintWithStackTraceParams {
|
|
13
|
+
/**
|
|
14
|
+
* The arguments to print.
|
|
15
|
+
*/
|
|
16
|
+
readonly $arguments: unknown[];
|
|
17
|
+
/**
|
|
18
|
+
* The debugger instance.
|
|
19
|
+
*/
|
|
20
|
+
readonly debuggerInstance: Debugger;
|
|
21
|
+
/**
|
|
22
|
+
* The message to print.
|
|
23
|
+
*/
|
|
24
|
+
readonly message: string;
|
|
25
|
+
/**
|
|
26
|
+
* The stack trace to print.
|
|
27
|
+
*/
|
|
28
|
+
readonly stackTrace: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Enables the debuggers for the library (under its debug namespace, see `Library.debugNamespace`).
|
|
32
|
+
*/
|
|
33
|
+
export declare function enableLibraryDebuggers(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Returns a debug controller.
|
|
36
|
+
*
|
|
37
|
+
* @returns A debug controller.
|
|
38
|
+
*/
|
|
39
|
+
export declare function getDebugController(): DebugController;
|
|
40
|
+
/**
|
|
41
|
+
* Returns a debugger instance with a log function that includes the caller's file name and line number.
|
|
42
|
+
*
|
|
43
|
+
* @param namespace - The namespace for the debugger instance.
|
|
44
|
+
* @param framesToSkip - The number of frames to skip in the stack trace.
|
|
45
|
+
* @returns A debugger instance with a log function that includes the caller's file name and line number.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getDebugger(namespace: string, framesToSkip?: number): Debugger;
|
|
48
|
+
/**
|
|
49
|
+
* Returns a debugger instance for the library (under its debug namespace, see `Library.debugNamespace`).
|
|
50
|
+
*
|
|
51
|
+
* @param namespace - The namespace for the debugger instance.
|
|
52
|
+
* @returns A debugger instance for the library (under its debug namespace, see `Library.debugNamespace`).
|
|
53
|
+
*/
|
|
54
|
+
export declare function getLibDebugger(namespace: string): Debugger;
|
|
55
|
+
/**
|
|
56
|
+
* Prints a message with a stack trace.
|
|
57
|
+
*
|
|
58
|
+
* @param params - The parameters for printing the message.
|
|
59
|
+
*/
|
|
60
|
+
export declare function printWithStackTrace(params: PrintWithStackTraceParams): void;
|
|
61
|
+
/**
|
|
62
|
+
* Shows an initial debug message.
|
|
63
|
+
*
|
|
64
|
+
* @param pluginId - The plugin ID.
|
|
65
|
+
*/
|
|
66
|
+
export declare function showInitialDebugMessage(pluginId: string): void;
|