@kirill.konshin/utils 0.0.10 → 0.0.12
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/.turbo/turbo-build.log +5 -5
- package/.turbo/turbo-test.log +5 -5
- package/CHANGELOG.md +12 -0
- package/dist/bootstrap/adaptiveContainer.d.ts +3 -0
- package/dist/bootstrap/adaptiveContainer.d.ts.map +1 -0
- package/dist/bootstrap/adaptiveContainer.js +11 -0
- package/dist/bootstrap/adaptiveContainer.js.map +1 -0
- package/dist/bootstrap/controls.d.ts +35 -0
- package/dist/bootstrap/controls.d.ts.map +1 -0
- package/dist/bootstrap/controls.js +77 -0
- package/dist/bootstrap/controls.js.map +1 -0
- package/dist/bootstrap/error.d.ts +7 -0
- package/dist/bootstrap/error.d.ts.map +1 -0
- package/dist/bootstrap/error.js +31 -0
- package/dist/bootstrap/error.js.map +1 -0
- package/dist/bootstrap/field.d.ts +9 -0
- package/dist/bootstrap/field.d.ts.map +1 -0
- package/dist/bootstrap/field.js +29 -0
- package/dist/bootstrap/field.js.map +1 -0
- package/dist/bootstrap/footer.d.ts +10 -0
- package/dist/bootstrap/footer.d.ts.map +1 -0
- package/dist/bootstrap/footer.js +40 -0
- package/dist/bootstrap/footer.js.map +1 -0
- package/dist/bootstrap/globalLoading.d.ts +4 -0
- package/dist/bootstrap/globalLoading.d.ts.map +1 -0
- package/dist/bootstrap/globalLoading.js +10 -0
- package/dist/bootstrap/globalLoading.js.map +1 -0
- package/dist/bootstrap/index.d.ts +13 -0
- package/dist/bootstrap/index.d.ts.map +1 -0
- package/dist/bootstrap/index.js +34 -0
- package/dist/bootstrap/index.js.map +1 -0
- package/dist/bootstrap/loading.d.ts +8 -0
- package/dist/bootstrap/loading.d.ts.map +1 -0
- package/dist/bootstrap/loading.js +18 -0
- package/dist/bootstrap/loading.js.map +1 -0
- package/dist/bootstrap/responsiveHelper.d.ts +7 -0
- package/dist/bootstrap/responsiveHelper.d.ts.map +1 -0
- package/dist/bootstrap/responsiveHelper.js +45 -0
- package/dist/bootstrap/responsiveHelper.js.map +1 -0
- package/dist/bootstrap/screen.d.ts +20 -0
- package/dist/bootstrap/screen.d.ts.map +1 -0
- package/dist/bootstrap/screen.js +79 -0
- package/dist/bootstrap/screen.js.map +1 -0
- package/dist/bootstrap/toaster.d.ts +9 -0
- package/dist/bootstrap/toaster.d.ts.map +1 -0
- package/dist/bootstrap/toaster.js +36 -0
- package/dist/bootstrap/toaster.js.map +1 -0
- package/dist/bootstrap/useModal.d.ts +22 -0
- package/dist/bootstrap/useModal.d.ts.map +1 -0
- package/dist/bootstrap/useModal.js +50 -0
- package/dist/bootstrap/useModal.js.map +1 -0
- package/dist/bootstrap/useWrappedForm.d.ts +14 -0
- package/dist/bootstrap/useWrappedForm.d.ts.map +1 -0
- package/dist/bootstrap/useWrappedForm.js +32 -0
- package/dist/bootstrap/useWrappedForm.js.map +1 -0
- package/dist/core/cache.d.ts +121 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +104 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/errors.d.ts +2 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +15 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +22 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/measure.d.ts +35 -0
- package/dist/core/measure.d.ts.map +1 -0
- package/dist/core/measure.js +56 -0
- package/dist/core/measure.js.map +1 -0
- package/dist/core/mutex.d.ts +6 -0
- package/dist/core/mutex.d.ts.map +1 -0
- package/dist/core/mutex.js +26 -0
- package/dist/core/mutex.js.map +1 -0
- package/dist/core/worker.d.ts +84 -0
- package/dist/core/worker.d.ts.map +1 -0
- package/dist/core/worker.js +237 -0
- package/dist/core/worker.js.map +1 -0
- package/dist/electron/createWindow.d.ts +23 -0
- package/dist/electron/createWindow.d.ts.map +1 -0
- package/dist/electron/createWindow.js +160 -0
- package/dist/electron/createWindow.js.map +1 -0
- package/dist/electron/index.d.ts +3 -0
- package/dist/electron/index.d.ts.map +1 -0
- package/dist/electron/index.js +9 -0
- package/dist/electron/index.js.map +1 -0
- package/dist/electron/updater.d.ts +2 -0
- package/dist/electron/updater.d.ts.map +1 -0
- package/dist/electron/updater.js +47 -0
- package/dist/electron/updater.js.map +1 -0
- package/dist/electron-builder/builder.d.ts +8 -0
- package/dist/electron-builder/builder.d.ts.map +1 -0
- package/dist/electron-builder/builder.js +130 -0
- package/dist/electron-builder/builder.js.map +1 -0
- package/dist/electron-builder/images.d.ts +7 -0
- package/dist/electron-builder/images.d.ts.map +1 -0
- package/dist/electron-builder/images.js +25 -0
- package/dist/electron-builder/images.js.map +1 -0
- package/dist/electron-builder/index.d.ts +3 -0
- package/dist/electron-builder/index.d.ts.map +1 -0
- package/dist/electron-builder/index.js +7 -0
- package/dist/electron-builder/index.js.map +1 -0
- package/dist/mui/formControlFieldset.d.ts +5 -0
- package/dist/mui/formControlFieldset.d.ts.map +1 -0
- package/dist/mui/formControlFieldset.js +28 -0
- package/dist/mui/formControlFieldset.js.map +1 -0
- package/dist/mui/formLabelLegend.d.ts +4 -0
- package/dist/mui/formLabelLegend.d.ts.map +1 -0
- package/dist/mui/formLabelLegend.js +12 -0
- package/dist/mui/formLabelLegend.js.map +1 -0
- package/dist/mui/genericControl.d.ts +7 -0
- package/dist/mui/genericControl.d.ts.map +1 -0
- package/dist/mui/genericControl.js +21 -0
- package/dist/mui/genericControl.js.map +1 -0
- package/dist/mui/index.d.ts +5 -0
- package/dist/mui/index.d.ts.map +1 -0
- package/dist/mui/index.js +11 -0
- package/dist/mui/index.js.map +1 -0
- package/dist/mui/readOnly.d.ts +6 -0
- package/dist/mui/readOnly.d.ts.map +1 -0
- package/dist/mui/readOnly.js +7 -0
- package/dist/mui/readOnly.js.map +1 -0
- package/dist/next/appLink.d.ts +8 -0
- package/dist/next/appLink.d.ts.map +1 -0
- package/dist/next/appLink.js +33 -0
- package/dist/next/appLink.js.map +1 -0
- package/dist/next/index.d.ts +6 -0
- package/dist/next/index.d.ts.map +1 -0
- package/dist/next/index.js +15 -0
- package/dist/next/index.js.map +1 -0
- package/dist/next/measure.d.ts +15 -0
- package/dist/next/measure.d.ts.map +1 -0
- package/dist/next/measure.js +9 -0
- package/dist/next/measure.js.map +1 -0
- package/dist/next/noSSR.d.ts +5 -0
- package/dist/next/noSSR.d.ts.map +1 -0
- package/dist/next/noSSR.js +14 -0
- package/dist/next/noSSR.js.map +1 -0
- package/dist/next/redirect.d.ts +6 -0
- package/dist/next/redirect.d.ts.map +1 -0
- package/dist/next/useIsInner.d.ts +3 -0
- package/dist/next/useIsInner.d.ts.map +1 -0
- package/dist/next/useIsInner.js +14 -0
- package/dist/next/useIsInner.js.map +1 -0
- package/dist/react/apiCall.d.ts +6 -0
- package/dist/react/apiCall.d.ts.map +1 -0
- package/dist/react/apiCall.js +24 -0
- package/dist/react/apiCall.js.map +1 -0
- package/dist/react/form/client.d.ts +7 -0
- package/dist/react/form/client.d.ts.map +1 -0
- package/dist/react/form/client.js +45 -0
- package/dist/react/form/client.js.map +1 -0
- package/dist/react/form/form.d.ts +44 -0
- package/dist/react/form/form.d.ts.map +1 -0
- package/dist/react/form/form.js +75 -0
- package/dist/react/form/form.js.map +1 -0
- package/dist/react/form/index.d.ts +3 -0
- package/dist/react/form/index.d.ts.map +1 -0
- package/dist/react/index.d.ts +5 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +19 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/useFetch.d.ts +2 -0
- package/dist/react/useFetch.d.ts.map +1 -0
- package/dist/react/useFetch.js +19 -0
- package/dist/react/useFetch.js.map +1 -0
- package/dist/react/useFetcher.d.ts +10 -0
- package/dist/react/useFetcher.d.ts.map +1 -0
- package/dist/react/useFetcher.js +43 -0
- package/dist/react/useFetcher.js.map +1 -0
- package/dist/react-native/index.d.ts +4 -0
- package/dist/react-native/index.d.ts.map +1 -0
- package/dist/react-native/index.js +9 -0
- package/dist/react-native/index.js.map +1 -0
- package/dist/react-native/share.d.ts +9 -0
- package/dist/react-native/share.d.ts.map +1 -0
- package/dist/react-native/share.js +23 -0
- package/dist/react-native/share.js.map +1 -0
- package/dist/react-native/update.d.ts +4 -0
- package/dist/react-native/update.d.ts.map +1 -0
- package/dist/react-native/update.js +40 -0
- package/dist/react-native/update.js.map +1 -0
- package/dist/react-native/useAppState.d.ts +2 -0
- package/dist/react-native/useAppState.d.ts.map +1 -0
- package/dist/react-native/useAppState.js +18 -0
- package/dist/react-native/useAppState.js.map +1 -0
- package/dist/tailwind/fullpage.d.ts +7 -0
- package/dist/tailwind/fullpage.d.ts.map +1 -0
- package/dist/tailwind/fullpage.js +14 -0
- package/dist/tailwind/fullpage.js.map +1 -0
- package/dist/tailwind/index.d.ts +3 -0
- package/dist/tailwind/index.d.ts.map +1 -0
- package/dist/tailwind/index.js +7 -0
- package/dist/tailwind/index.js.map +1 -0
- package/dist/tailwind/responsiveHelper.d.ts +2 -0
- package/dist/tailwind/responsiveHelper.d.ts.map +1 -0
- package/dist/tailwind/responsiveHelper.js +15 -0
- package/dist/tailwind/responsiveHelper.js.map +1 -0
- package/package.json +1 -1
- package/src/next/appLink.tsx +3 -2
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { bold, magenta, cyan, yellow, red, green } from 'colors/safe';
|
|
2
|
+
export declare const colored: {
|
|
3
|
+
important: typeof bold;
|
|
4
|
+
subject: typeof magenta;
|
|
5
|
+
arg: typeof cyan;
|
|
6
|
+
sup: typeof yellow;
|
|
7
|
+
err: typeof red;
|
|
8
|
+
ok: typeof green;
|
|
9
|
+
};
|
|
10
|
+
export declare const uncolored: {
|
|
11
|
+
important: (str: any) => any;
|
|
12
|
+
subject: (str: any) => any;
|
|
13
|
+
arg: (str: any) => any;
|
|
14
|
+
sup: (str: any) => any;
|
|
15
|
+
err: (str: any) => any;
|
|
16
|
+
ok: (str: any) => any;
|
|
17
|
+
};
|
|
18
|
+
export declare function createMeasurer({ colors, prepend, padding }: {
|
|
19
|
+
colors?: boolean | undefined;
|
|
20
|
+
prepend?: string | undefined;
|
|
21
|
+
padding?: number | undefined;
|
|
22
|
+
}): {
|
|
23
|
+
measure: (what: string, step: string, supplemental?: string, ...args: any[]) => {
|
|
24
|
+
done: (result?: string, ...args2: any[]) => void;
|
|
25
|
+
fail: (result?: string, ...args2: any[]) => void;
|
|
26
|
+
log: (...args2: any[]) => void;
|
|
27
|
+
};
|
|
28
|
+
important: (str: any) => any;
|
|
29
|
+
subject: (str: any) => any;
|
|
30
|
+
arg: (str: any) => any;
|
|
31
|
+
sup: (str: any) => any;
|
|
32
|
+
ok: (str: any) => any;
|
|
33
|
+
err: (str: any) => any;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=measure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../src/core/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEtE,eAAO,MAAM,OAAO;;;;;;;CAOnB,CAAC;AAIF,eAAO,MAAM,SAAS;;;;;;;CAOrB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAAE,MAAa,EAAE,OAAe,EAAE,OAAY,EAAE;;;;CAAA;oBAGpD,MAAM,QAAQ,MAAM,iBAAgB,MAAM;wBAWvC,MAAM;wBAcN,MAAM;;;;;;;;;EAUnC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { bold, magenta, cyan, yellow, red, green } from "colors/safe";
|
|
2
|
+
const colored = {
|
|
3
|
+
important: bold,
|
|
4
|
+
subject: magenta,
|
|
5
|
+
arg: cyan,
|
|
6
|
+
sup: yellow,
|
|
7
|
+
err: red,
|
|
8
|
+
ok: green
|
|
9
|
+
};
|
|
10
|
+
const noColor = (str) => str;
|
|
11
|
+
const uncolored = {
|
|
12
|
+
important: noColor,
|
|
13
|
+
subject: noColor,
|
|
14
|
+
arg: noColor,
|
|
15
|
+
sup: noColor,
|
|
16
|
+
err: noColor,
|
|
17
|
+
ok: noColor
|
|
18
|
+
};
|
|
19
|
+
function createMeasurer({ colors = true, prepend = "LOG", padding = 10 }) {
|
|
20
|
+
const { important, subject, arg, sup, ok, err } = colors ? colored : uncolored;
|
|
21
|
+
function measure(what, step, supplemental = "", ...args) {
|
|
22
|
+
const time = performance.now();
|
|
23
|
+
const prefix = [
|
|
24
|
+
prepend,
|
|
25
|
+
important(subject(what.substring(0, padding).padStart(padding, " "))),
|
|
26
|
+
arg(step),
|
|
27
|
+
sup(supplemental),
|
|
28
|
+
...args
|
|
29
|
+
];
|
|
30
|
+
const done = (result = ok("DONE"), ...args2) => {
|
|
31
|
+
console.log(
|
|
32
|
+
...[
|
|
33
|
+
...prefix,
|
|
34
|
+
important(result),
|
|
35
|
+
...args2,
|
|
36
|
+
"in",
|
|
37
|
+
important((performance.now() - time).toFixed(0)),
|
|
38
|
+
"ms"
|
|
39
|
+
].filter(Boolean)
|
|
40
|
+
);
|
|
41
|
+
console.groupEnd();
|
|
42
|
+
};
|
|
43
|
+
const fail = (result = err("FAIL"), ...args2) => done(result, ...args2);
|
|
44
|
+
const log = (...args2) => {
|
|
45
|
+
console.log(...prefix, ...args2);
|
|
46
|
+
};
|
|
47
|
+
return { done, fail, log };
|
|
48
|
+
}
|
|
49
|
+
return { measure, important, subject, arg, sup, ok, err };
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
colored,
|
|
53
|
+
createMeasurer,
|
|
54
|
+
uncolored
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=measure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure.js","sources":["../../src/core/measure.ts"],"sourcesContent":["import { bold, magenta, cyan, yellow, red, green } from 'colors/safe';\n\nexport const colored = {\n important: bold,\n subject: magenta,\n arg: cyan,\n sup: yellow,\n err: red,\n ok: green,\n};\n\nconst noColor = (str) => str;\n\nexport const uncolored = {\n important: noColor,\n subject: noColor,\n arg: noColor,\n sup: noColor,\n err: noColor,\n ok: noColor,\n};\n\nexport function createMeasurer({ colors = true, prepend = 'LOG', padding = 10 }) {\n const { important, subject, arg, sup, ok, err } = colors ? colored : uncolored;\n\n function measure(what: string, step: string, supplemental: string = '', ...args) {\n const time = performance.now();\n\n const prefix = [\n prepend,\n important(subject(what.substring(0, padding).padStart(padding, ' '))),\n arg(step),\n sup(supplemental),\n ...args,\n ];\n\n const done = (result: string = ok('DONE'), ...args2) => {\n console.log(\n ...[\n ...prefix,\n important(result),\n ...args2,\n 'in',\n important((performance.now() - time).toFixed(0)),\n 'ms',\n ].filter(Boolean),\n );\n console.groupEnd();\n };\n\n const fail = (result: string = err('FAIL'), ...args2) => done(result, ...args2);\n\n const log = (...args2) => {\n console.log(...prefix, ...args2);\n };\n\n return { done, fail, log };\n }\n\n return { measure, important, subject, arg, sup, ok, err };\n}\n"],"names":[],"mappings":";AAEO,MAAM,UAAU;AAAA,EACnB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AACR;AAEA,MAAM,UAAU,CAAC,QAAQ;AAElB,MAAM,YAAY;AAAA,EACrB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,IAAI;AACR;AAEgB,SAAA,eAAe,EAAE,SAAS,MAAM,UAAU,OAAO,UAAU,MAAM;AACvE,QAAA,EAAE,WAAW,SAAS,KAAK,KAAK,IAAI,IAAQ,IAAA,SAAS,UAAU;AAErE,WAAS,QAAQ,MAAc,MAAc,eAAuB,OAAO,MAAM;AACvE,UAAA,OAAO,YAAY,IAAI;AAE7B,UAAM,SAAS;AAAA,MACX;AAAA,MACA,UAAU,QAAQ,KAAK,UAAU,GAAG,OAAO,EAAE,SAAS,SAAS,GAAG,CAAC,CAAC;AAAA,MACpE,IAAI,IAAI;AAAA,MACR,IAAI,YAAY;AAAA,MAChB,GAAG;AAAA,IACP;AAEA,UAAM,OAAO,CAAC,SAAiB,GAAG,MAAM,MAAM,UAAU;AAC5C,cAAA;AAAA,QACJ,GAAG;AAAA,UACC,GAAG;AAAA,UACH,UAAU,MAAM;AAAA,UAChB,GAAG;AAAA,UACH;AAAA,UACA,WAAW,YAAY,IAAA,IAAQ,MAAM,QAAQ,CAAC,CAAC;AAAA,UAC/C;AAAA,QACJ,EAAE,OAAO,OAAO;AAAA,MACpB;AACA,cAAQ,SAAS;AAAA,IACrB;AAEM,UAAA,OAAO,CAAC,SAAiB,IAAI,MAAM,MAAM,UAAU,KAAK,QAAQ,GAAG,KAAK;AAExE,UAAA,MAAM,IAAI,UAAU;AACtB,cAAQ,IAAI,GAAG,QAAQ,GAAG,KAAK;AAAA,IACnC;AAEO,WAAA,EAAE,MAAM,MAAM,IAAI;AAAA,EAAA;AAG7B,SAAO,EAAE,SAAS,WAAW,SAAS,KAAK,KAAK,IAAI,IAAI;AAC5D;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutex.d.ts","sourceRoot":"","sources":["../../src/core/mutex.ts"],"names":[],"mappings":"AAEA,qBAAa,KAAK;IACd,OAAO,CAAC,OAAO,CAAqB;IAE7B,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;IAatD,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;CAGhE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
class Mutex {
|
|
5
|
+
constructor() {
|
|
6
|
+
__publicField(this, "promise", Promise.resolve());
|
|
7
|
+
}
|
|
8
|
+
exec(fn) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
this.promise = this.promise.then(async () => {
|
|
11
|
+
try {
|
|
12
|
+
resolve(await fn());
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
wrap(fn) {
|
|
20
|
+
return (...args) => this.exec(() => fn(...args));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
Mutex
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=mutex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutex.js","sources":["../../src/core/mutex.ts"],"sourcesContent":["//TODO Implement queue with ranking & sorting\n//TODO https://github.com/sindresorhus/p-queue\nexport class Mutex {\n private promise = Promise.resolve();\n\n public exec(fn: (...args: any) => any): ReturnType<typeof fn> {\n return new Promise((resolve, reject) => {\n // wrap in always successful function\n this.promise = this.promise.then(async () => {\n try {\n resolve(await fn());\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n public wrap(fn: (...args: any) => any): ReturnType<typeof fn> {\n return (...args: any) => this.exec(() => fn(...args));\n }\n}\n"],"names":[],"mappings":";;;AAEO,MAAM,MAAM;AAAA,EAAZ;AACK,mCAAU,QAAQ,QAAQ;AAAA;AAAA,EAE3B,KAAK,IAAkD;AAC1D,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAEpC,WAAK,UAAU,KAAK,QAAQ,KAAK,YAAY;AACrC,YAAA;AACQ,kBAAA,MAAM,IAAI;AAAA,iBACb,GAAG;AACR,iBAAO,CAAC;AAAA,QAAA;AAAA,MACZ,CACH;AAAA,IAAA,CACJ;AAAA,EAAA;AAAA,EAGE,KAAK,IAAkD;AACnD,WAAA,IAAI,SAAc,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI,CAAC;AAAA,EAAA;AAE5D;"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export declare function isTransferable(obj: any): boolean;
|
|
2
|
+
type WebWorker = Worker | (Window & typeof globalThis) | (WorkerGlobalScope & typeof globalThis);
|
|
3
|
+
type MethodReturn<R, M extends keyof R> = R[M] extends (...args: any[]) => any ? Partial<Awaited<ReturnType<R[M]>>> : never;
|
|
4
|
+
type MethodArg<R, M extends keyof R> = R[M] extends (arg: infer A, ...args: any[]) => any ? Partial<A> : never;
|
|
5
|
+
export type Ctx<R, K extends keyof R> = {
|
|
6
|
+
id: string;
|
|
7
|
+
parentId?: string;
|
|
8
|
+
message: K;
|
|
9
|
+
};
|
|
10
|
+
type Data<R, M extends keyof R> = MethodReturn<R, M> | MethodArg<R, M> | Error;
|
|
11
|
+
type Event<R, M extends keyof R> = MessageEvent<{
|
|
12
|
+
data: Data<R, M>;
|
|
13
|
+
ctx: Ctx<R, M>;
|
|
14
|
+
}>;
|
|
15
|
+
type Listener<R, M extends keyof R, D extends Data<R, M> = Data<R, M>, S extends Context<R, M> = Context<R, M>> = (data: D, self: S, event: Event<R, M>) => void | Promise<void>;
|
|
16
|
+
export declare class WorkerDialog<R extends RespondersBase<any>> {
|
|
17
|
+
worker: WebWorker;
|
|
18
|
+
responders: R;
|
|
19
|
+
name: string;
|
|
20
|
+
readonly contexts: Set<Context<R, keyof R>>;
|
|
21
|
+
protected closed: boolean;
|
|
22
|
+
constructor(worker: WebWorker, responders: R, name: string);
|
|
23
|
+
close(): void;
|
|
24
|
+
withMessage<M extends keyof R>(message: M): RequestContext<R, M>;
|
|
25
|
+
}
|
|
26
|
+
export declare class RespondersBase<R> {
|
|
27
|
+
create<M extends keyof R, F extends (input: any, context: ResponseContext<R, M>) => any>(message: M, responder: F): F;
|
|
28
|
+
}
|
|
29
|
+
declare abstract class Context<R, M extends keyof R> {
|
|
30
|
+
protected readonly dialog: WorkerDialog<any>;
|
|
31
|
+
message: M;
|
|
32
|
+
id: string | undefined;
|
|
33
|
+
parent: Context<R, keyof R> | undefined | null;
|
|
34
|
+
protected readonly unsub: Set<() => void>;
|
|
35
|
+
protected closed: boolean;
|
|
36
|
+
constructor(dialog: WorkerDialog<any>, message: M, id: string | undefined, parent?: Context<R, keyof R> | undefined | null);
|
|
37
|
+
abstract withMessage<M2 extends keyof R>(message: M2, id?: string): Context<R, M2>;
|
|
38
|
+
close(reason?: string): void;
|
|
39
|
+
get info(): string;
|
|
40
|
+
protected postMessage(data?: Data<R, M>): Data<R, M> | undefined;
|
|
41
|
+
send(data?: Data<R, M>): Data<R, M> | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Does not automatically close, assumes consumer will close
|
|
44
|
+
*
|
|
45
|
+
* ```ts
|
|
46
|
+
* dialog.request('x').fetch((c) => {
|
|
47
|
+
* c.response('x').listen(() => { ... }); // listens to "x", will be closed by upper level fetch
|
|
48
|
+
* c.request('x').fetcH(y, (c) => { ... }); // closes
|
|
49
|
+
* }) // closes
|
|
50
|
+
*
|
|
51
|
+
* const un = dialog.context('x').listen((e) => { ... }); // listens to 'x'
|
|
52
|
+
* un(); // closes
|
|
53
|
+
*
|
|
54
|
+
* const un = dialog.context('x').listen((e) => { ... }); // listens to 'x'
|
|
55
|
+
* un(); // closes
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
listen(callback: Listener<R, M>): () => void;
|
|
59
|
+
}
|
|
60
|
+
declare class RequestContext<R, M extends keyof R> extends Context<R, M> {
|
|
61
|
+
withMessage<M2 extends keyof R>(message: M2, id?: string): RequestContext<R, M2>;
|
|
62
|
+
send(data?: MethodArg<R, M>): MethodArg<R, M>;
|
|
63
|
+
listen(callback: Listener<R, M, MethodReturn<R, M>, RequestContext<R, M>>): () => void;
|
|
64
|
+
/**
|
|
65
|
+
* Returns response
|
|
66
|
+
* If you need to work with ctx, use callback
|
|
67
|
+
* Closed automatically on response
|
|
68
|
+
*
|
|
69
|
+
* dialog.fetch('x', (c) => {
|
|
70
|
+
* c.listen(() => { ... }); // will be closed by upper level fetch
|
|
71
|
+
* c.fetcH(y, (c) => { ... }); // closes c
|
|
72
|
+
* c.context().fetcH(y, (c) => { ... }); // closes sub, not closes c, will be closed by upper level fetch
|
|
73
|
+
* })
|
|
74
|
+
*/
|
|
75
|
+
fetch(data?: MethodArg<R, M>, callback?: (context: RequestContext<R, M>) => void): Promise<MethodReturn<R, M>>;
|
|
76
|
+
protected expect(): Promise<MethodReturn<R, M>>;
|
|
77
|
+
}
|
|
78
|
+
declare class ResponseContext<R, M extends keyof R> extends Context<R, M> {
|
|
79
|
+
withMessage<M2 extends keyof R>(message: M2, id?: string): ResponseContext<R, M2>;
|
|
80
|
+
listen(callback: Listener<R, M, MethodArg<R, M>, ResponseContext<R, M>>): () => void;
|
|
81
|
+
send(data?: MethodReturn<R, M>): MethodReturn<R, M>;
|
|
82
|
+
}
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/core/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
function isTransferable(obj) {
|
|
5
|
+
return transferrable.some((t) => obj instanceof t) ? obj : null;
|
|
6
|
+
}
|
|
7
|
+
function getTransferrable(data = {}) {
|
|
8
|
+
if (!data) return [];
|
|
9
|
+
return Object.values(data).reduce((r, v) => {
|
|
10
|
+
return Array.isArray(v) ? [...r, ...v.map(isTransferable)] : [...r, isTransferable(v)];
|
|
11
|
+
}, []).filter(Boolean);
|
|
12
|
+
}
|
|
13
|
+
const transferrable = typeof window !== "undefined" ? [
|
|
14
|
+
ArrayBuffer,
|
|
15
|
+
MessagePort,
|
|
16
|
+
ReadableStream,
|
|
17
|
+
WritableStream,
|
|
18
|
+
TransformStream,
|
|
19
|
+
// WebTransportReceiveStream, // ReferenceError: WebTransportReceiveStream is not defined
|
|
20
|
+
// WebTransportSendStream, // ReferenceError: WebTransportReceiveStream is not defined
|
|
21
|
+
// AudioData, // TS2304: Cannot find name AudioData
|
|
22
|
+
ImageBitmap,
|
|
23
|
+
VideoFrame,
|
|
24
|
+
OffscreenCanvas,
|
|
25
|
+
RTCDataChannel,
|
|
26
|
+
MediaSourceHandle
|
|
27
|
+
// MIDIAccess, // ReferenceError: MIDIAccess is not defined
|
|
28
|
+
].filter(Boolean) : [];
|
|
29
|
+
const ALL = "*";
|
|
30
|
+
let id = 0;
|
|
31
|
+
function getID() {
|
|
32
|
+
return (++id).toString();
|
|
33
|
+
}
|
|
34
|
+
function checkClosed(obj, label = "external") {
|
|
35
|
+
if (obj == null ? void 0 : obj.closed) throw new Error(`Context is closed ${this.info} (${label})`, { cause: obj });
|
|
36
|
+
}
|
|
37
|
+
function checkMessage(obj, message) {
|
|
38
|
+
if (!message) throw new Error("New context must have message", { cause: obj });
|
|
39
|
+
}
|
|
40
|
+
class WorkerDialog {
|
|
41
|
+
constructor(worker, responders, name) {
|
|
42
|
+
__publicField(this, "contexts", /* @__PURE__ */ new Set());
|
|
43
|
+
__publicField(this, "closed", false);
|
|
44
|
+
this.worker = worker;
|
|
45
|
+
this.responders = responders;
|
|
46
|
+
this.name = name;
|
|
47
|
+
if (!this.worker) return;
|
|
48
|
+
for (const message in this.responders) {
|
|
49
|
+
if (["constructor", "create"].includes(message)) continue;
|
|
50
|
+
const rootContext = new ResponseContext(this, message, ALL);
|
|
51
|
+
rootContext.listen(async (data, context, event) => {
|
|
52
|
+
const responseContext = context.withMessage(message, event.data.ctx.id);
|
|
53
|
+
console.log("Root Listener", rootContext.info, {
|
|
54
|
+
rootContext: context,
|
|
55
|
+
data,
|
|
56
|
+
responseContext,
|
|
57
|
+
event,
|
|
58
|
+
responder: this.responders[message]
|
|
59
|
+
});
|
|
60
|
+
try {
|
|
61
|
+
responseContext.send(await this.responders[message](data, responseContext));
|
|
62
|
+
responseContext.close("root.listener");
|
|
63
|
+
} catch (e) {
|
|
64
|
+
console.error(`Error in responder ${responseContext.info}`, { e });
|
|
65
|
+
responseContext.send(e);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
close() {
|
|
71
|
+
for (const context of this.contexts) context.close("root");
|
|
72
|
+
this.contexts.clear();
|
|
73
|
+
this.worker.onmessage = null;
|
|
74
|
+
}
|
|
75
|
+
withMessage(message) {
|
|
76
|
+
return new RequestContext(this, message, getID());
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
class RespondersBase {
|
|
80
|
+
create(message, responder) {
|
|
81
|
+
return responder;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
class Context {
|
|
85
|
+
constructor(dialog, message, id2, parent = null) {
|
|
86
|
+
__publicField(this, "unsub", /* @__PURE__ */ new Set());
|
|
87
|
+
__publicField(this, "closed", false);
|
|
88
|
+
var _a;
|
|
89
|
+
this.dialog = dialog;
|
|
90
|
+
this.message = message;
|
|
91
|
+
this.id = id2;
|
|
92
|
+
this.parent = parent;
|
|
93
|
+
checkClosed(this.dialog, "newContext");
|
|
94
|
+
checkClosed(this.parent, "newContext");
|
|
95
|
+
checkMessage(this, message);
|
|
96
|
+
this.id = (parent == null ? void 0 : parent.id) === ALL ? getID() : id2 ? id2 : (_a = this.parent) == null ? void 0 : _a.id;
|
|
97
|
+
if (!this.id) throw new Error("ID is required", { cause: this });
|
|
98
|
+
}
|
|
99
|
+
close(reason = "external") {
|
|
100
|
+
this.dialog.contexts.delete(this);
|
|
101
|
+
for (const unsub of this.unsub) unsub();
|
|
102
|
+
this.unsub.clear();
|
|
103
|
+
this.dialog.contexts.forEach((context) => {
|
|
104
|
+
var _a;
|
|
105
|
+
if (((_a = context.parent) == null ? void 0 : _a.id) === this.id) context.close("parent");
|
|
106
|
+
});
|
|
107
|
+
this.closed = true;
|
|
108
|
+
}
|
|
109
|
+
get info() {
|
|
110
|
+
var _a;
|
|
111
|
+
return this.dialog.name + "." + ((_a = this.parent) == null ? void 0 : _a.id) + "." + this.id + "." + this.message.toString();
|
|
112
|
+
}
|
|
113
|
+
postMessage(data) {
|
|
114
|
+
var _a;
|
|
115
|
+
checkClosed(this, "postMessage");
|
|
116
|
+
const transfer = getTransferrable(data);
|
|
117
|
+
this.dialog.worker.postMessage(
|
|
118
|
+
{
|
|
119
|
+
data,
|
|
120
|
+
ctx: {
|
|
121
|
+
id: this.id,
|
|
122
|
+
parentId: (_a = this.parent) == null ? void 0 : _a.id,
|
|
123
|
+
message: this.message
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
transfer
|
|
127
|
+
);
|
|
128
|
+
return data;
|
|
129
|
+
}
|
|
130
|
+
send(data) {
|
|
131
|
+
return this.postMessage(data);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Does not automatically close, assumes consumer will close
|
|
135
|
+
*
|
|
136
|
+
* ```ts
|
|
137
|
+
* dialog.request('x').fetch((c) => {
|
|
138
|
+
* c.response('x').listen(() => { ... }); // listens to "x", will be closed by upper level fetch
|
|
139
|
+
* c.request('x').fetcH(y, (c) => { ... }); // closes
|
|
140
|
+
* }) // closes
|
|
141
|
+
*
|
|
142
|
+
* const un = dialog.context('x').listen((e) => { ... }); // listens to 'x'
|
|
143
|
+
* un(); // closes
|
|
144
|
+
*
|
|
145
|
+
* const un = dialog.context('x').listen((e) => { ... }); // listens to 'x'
|
|
146
|
+
* un(); // closes
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
listen(callback) {
|
|
150
|
+
checkClosed(this, "listen");
|
|
151
|
+
let workerListener;
|
|
152
|
+
this.dialog.worker.addEventListener(
|
|
153
|
+
"message",
|
|
154
|
+
workerListener = async (event) => {
|
|
155
|
+
try {
|
|
156
|
+
const {
|
|
157
|
+
data: { ctx, data }
|
|
158
|
+
} = event;
|
|
159
|
+
if (!ctx || this.id !== ALL && this.id !== ctx.id || this.message !== ctx.message) return;
|
|
160
|
+
console.log("Shared listener event", this.info, this, event);
|
|
161
|
+
await callback(data, this, event);
|
|
162
|
+
} catch (e) {
|
|
163
|
+
console.error(`Error in listener ${this.info}`, this, { event, e });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
);
|
|
167
|
+
const unsub = () => {
|
|
168
|
+
this.dialog.worker.removeEventListener("message", workerListener);
|
|
169
|
+
this.unsub.delete(unsub);
|
|
170
|
+
};
|
|
171
|
+
this.unsub.add(unsub);
|
|
172
|
+
return unsub;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
class RequestContext extends Context {
|
|
176
|
+
withMessage(message, id2) {
|
|
177
|
+
return new RequestContext(this.dialog, message, id2, this);
|
|
178
|
+
}
|
|
179
|
+
send(data) {
|
|
180
|
+
return super.send(data);
|
|
181
|
+
}
|
|
182
|
+
listen(callback) {
|
|
183
|
+
return super.listen(callback);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Returns response
|
|
187
|
+
* If you need to work with ctx, use callback
|
|
188
|
+
* Closed automatically on response
|
|
189
|
+
*
|
|
190
|
+
* dialog.fetch('x', (c) => {
|
|
191
|
+
* c.listen(() => { ... }); // will be closed by upper level fetch
|
|
192
|
+
* c.fetcH(y, (c) => { ... }); // closes c
|
|
193
|
+
* c.context().fetcH(y, (c) => { ... }); // closes sub, not closes c, will be closed by upper level fetch
|
|
194
|
+
* })
|
|
195
|
+
*/
|
|
196
|
+
async fetch(data, callback) {
|
|
197
|
+
const res = await Promise.all([
|
|
198
|
+
callback == null ? void 0 : callback(this),
|
|
199
|
+
this.expect(),
|
|
200
|
+
// will be closed in expect -> listener -> unsub
|
|
201
|
+
this.send(data)
|
|
202
|
+
]);
|
|
203
|
+
this.close("fetch");
|
|
204
|
+
return res[1];
|
|
205
|
+
}
|
|
206
|
+
async expect() {
|
|
207
|
+
checkClosed(this, "expect");
|
|
208
|
+
return new Promise((resolve, reject) => {
|
|
209
|
+
const responseListener = this.listen(async (data) => {
|
|
210
|
+
try {
|
|
211
|
+
if (data instanceof Error) throw data;
|
|
212
|
+
responseListener();
|
|
213
|
+
resolve(data);
|
|
214
|
+
} catch (e) {
|
|
215
|
+
reject(e);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
class ResponseContext extends Context {
|
|
222
|
+
withMessage(message, id2) {
|
|
223
|
+
return new ResponseContext(this.dialog, message, id2, this);
|
|
224
|
+
}
|
|
225
|
+
listen(callback) {
|
|
226
|
+
return super.listen(callback);
|
|
227
|
+
}
|
|
228
|
+
send(data) {
|
|
229
|
+
return super.send(data);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
export {
|
|
233
|
+
RespondersBase,
|
|
234
|
+
WorkerDialog,
|
|
235
|
+
isTransferable
|
|
236
|
+
};
|
|
237
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sources":["../../src/core/worker.ts"],"sourcesContent":["export function isTransferable(obj: any): boolean {\n return transferrable.some((t) => obj instanceof t) ? obj : null;\n}\n\nfunction getTransferrable(data: any = {}): Transferable[] {\n if (!data) return [];\n return Object.values<any>(data)\n .reduce((r, v) => {\n return Array.isArray(v) ? [...r, ...v.map(isTransferable)] : [...r, isTransferable(v)];\n }, [])\n .filter(Boolean);\n}\n\n// @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects\nconst transferrable =\n typeof window !== 'undefined'\n ? [\n ArrayBuffer,\n MessagePort,\n ReadableStream,\n WritableStream,\n TransformStream,\n // WebTransportReceiveStream, // ReferenceError: WebTransportReceiveStream is not defined\n // WebTransportSendStream, // ReferenceError: WebTransportReceiveStream is not defined\n // AudioData, // TS2304: Cannot find name AudioData\n ImageBitmap,\n VideoFrame,\n OffscreenCanvas,\n RTCDataChannel,\n MediaSourceHandle,\n // MIDIAccess, // ReferenceError: MIDIAccess is not defined\n ].filter(Boolean)\n : [];\n\ntype WebWorker = Worker | (Window & typeof globalThis) | (WorkerGlobalScope & typeof globalThis);\n\ntype MethodReturn<R, M extends keyof R> = R[M] extends (...args: any[]) => any\n ? Partial<Awaited<ReturnType<R[M]>>>\n : never;\n\ntype MethodArg<R, M extends keyof R> = R[M] extends (arg: infer A, ...args: any[]) => any ? Partial<A> : never;\n\nexport type Ctx<R, K extends keyof R> = {\n id: string;\n parentId?: string;\n message: K;\n};\n\ntype Data<R, M extends keyof R> = MethodReturn<R, M> | MethodArg<R, M> | Error;\n\ntype Event<R, M extends keyof R> = MessageEvent<{ data: Data<R, M>; ctx: Ctx<R, M> }>;\n\ntype Listener<R, M extends keyof R, D extends Data<R, M> = Data<R, M>, S extends Context<R, M> = Context<R, M>> = (\n data: D,\n self: S,\n event: Event<R, M>,\n) => void | Promise<void>;\n\nconst ALL = '*';\n\nlet id = 0;\n\nfunction getID() {\n return (++id).toString();\n}\n\nfunction checkClosed(obj: any, label: string = 'external') {\n if (obj?.closed) throw new Error(`Context is closed ${this.info} (${label})`, { cause: obj });\n}\n\nfunction checkMessage(obj: any, message: any) {\n if (!message) throw new Error('New context must have message', { cause: obj });\n}\n\nexport class WorkerDialog<R extends RespondersBase<any>> {\n readonly contexts = new Set<Context<R, keyof R>>();\n protected closed = false;\n\n constructor(\n public worker: WebWorker,\n public responders: R,\n public name: string,\n ) {\n if (!this.worker) return; // Next.js SSR\n\n for (const message in this.responders) {\n if (['constructor', 'create'].includes(message)) continue;\n\n // root context with id=all\n const rootContext = new ResponseContext<R, typeof message>(this, message, ALL);\n\n //TODO: unsub(); ? Probably not needed, root must be always listening until closed by WorkerDialog\n rootContext.listen(async (data, context, event) => {\n // create sub context with ID\n const responseContext = context.withMessage(message, event.data.ctx.id);\n\n console.log('Root Listener', rootContext.info, {\n rootContext: context,\n data,\n responseContext,\n event,\n responder: this.responders[message],\n });\n\n try {\n responseContext.send(await (this.responders[message] as any)(data, responseContext));\n responseContext.close('root.listener');\n } catch (e) {\n console.error(`Error in responder ${responseContext.info}`, { e });\n responseContext.send(e);\n }\n });\n }\n }\n\n close() {\n for (const context of this.contexts) context.close('root');\n this.contexts.clear();\n this.worker.onmessage = null;\n }\n\n withMessage<M extends keyof R>(message: M) {\n return new RequestContext<R, M>(this, message, getID());\n }\n}\n\nexport class RespondersBase<R> {\n create<M extends keyof R, F extends (input: any, context: ResponseContext<R, M>) => any>(\n message: M,\n responder: F,\n ): F {\n return responder as any;\n }\n}\n\n// can only be used to create actual contexts, carries the context data\nabstract class Context<R, M extends keyof R> {\n protected readonly unsub = new Set<() => void>();\n protected closed = false;\n\n constructor(\n protected readonly dialog: WorkerDialog<any>,\n public message: M,\n public id: string | undefined,\n public parent: Context<R, keyof R> | undefined | null = null,\n ) {\n checkClosed(this.dialog, 'newContext');\n checkClosed(this.parent, 'newContext');\n checkMessage(this, message);\n this.id = parent?.id === ALL ? getID() : id ? id : this.parent?.id;\n if (!this.id) throw new Error('ID is required', { cause: this });\n }\n\n abstract withMessage<M2 extends keyof R>(message: M2, id?: string): Context<R, M2>;\n\n close(reason: string = 'external') {\n // console.log('Closing', this.id, reason, this);\n\n this.dialog.contexts.delete(this);\n\n // Unsubscribe from all listeners\n for (const unsub of this.unsub) unsub();\n this.unsub.clear();\n\n // Remove all child contexts\n this.dialog.contexts.forEach((context) => {\n if (context.parent?.id === this.id) context.close('parent');\n });\n\n this.closed = true;\n }\n\n get info() {\n return this.dialog.name + '.' + this.parent?.id + '.' + this.id + '.' + this.message.toString();\n }\n\n protected postMessage(data?: Data<R, M>) {\n checkClosed(this, 'postMessage');\n\n const transfer = getTransferrable(data);\n\n // console.log('postMessage', this.id, this, { mergedCtx, data, transfer });\n\n this.dialog.worker.postMessage(\n {\n data,\n ctx: {\n id: this.id,\n parentId: this.parent?.id,\n message: this.message,\n },\n },\n transfer,\n );\n\n return data;\n }\n\n send(data?: Data<R, M>) {\n return this.postMessage(data);\n }\n\n /**\n * Does not automatically close, assumes consumer will close\n *\n * ```ts\n * dialog.request('x').fetch((c) => {\n * c.response('x').listen(() => { ... }); // listens to \"x\", will be closed by upper level fetch\n * c.request('x').fetcH(y, (c) => { ... }); // closes\n * }) // closes\n *\n * const un = dialog.context('x').listen((e) => { ... }); // listens to 'x'\n * un(); // closes\n *\n * const un = dialog.context('x').listen((e) => { ... }); // listens to 'x'\n * un(); // closes\n * ```\n */\n listen(callback: Listener<R, M>): () => void {\n checkClosed(this, 'listen');\n\n let workerListener: any;\n\n this.dialog.worker.addEventListener(\n 'message',\n (workerListener = async (event: Event<R, M>) => {\n try {\n const {\n data: { ctx, data },\n } = event;\n\n if (!ctx || (this.id !== ALL && this.id !== ctx.id) || this.message !== ctx.message) return; // unknown message from devtools etc., or different context\n\n console.log('Shared listener event', this.info, this, event);\n\n await callback(data, this, event); // Requests can come here, but they're typed in responders\n } catch (e) {\n console.error(`Error in listener ${this.info}`, this, { event, e });\n }\n }),\n );\n\n const unsub = () => {\n // console.log('Stop listening', this.id, this);\n this.dialog.worker.removeEventListener('message', workerListener);\n this.unsub.delete(unsub);\n };\n\n this.unsub.add(unsub);\n\n return unsub;\n }\n}\n\nclass RequestContext<R, M extends keyof R> extends Context<R, M> {\n withMessage<M2 extends keyof R>(message: M2, id?: string): RequestContext<R, M2> {\n return new RequestContext<R, M2>(this.dialog, message, id, this);\n }\n\n send(data?: MethodArg<R, M>): MethodArg<R, M> {\n return super.send(data) as any;\n }\n\n listen(callback: Listener<R, M, MethodReturn<R, M>, RequestContext<R, M>>): () => void {\n return super.listen(callback);\n }\n\n /**\n * Returns response\n * If you need to work with ctx, use callback\n * Closed automatically on response\n *\n * dialog.fetch('x', (c) => {\n * c.listen(() => { ... }); // will be closed by upper level fetch\n * c.fetcH(y, (c) => { ... }); // closes c\n * c.context().fetcH(y, (c) => { ... }); // closes sub, not closes c, will be closed by upper level fetch\n * })\n */\n async fetch(\n data?: MethodArg<R, M>,\n callback?: (context: RequestContext<R, M>) => void,\n ): Promise<MethodReturn<R, M>> {\n const res = await Promise.all([\n callback?.(this),\n this.expect(), // will be closed in expect -> listener -> unsub\n this.send(data),\n ]);\n\n // console.log('Fetch', this.id, this.contexts, this.ownContexts);\n\n this.close('fetch');\n\n return res[1];\n }\n\n protected async expect() {\n checkClosed(this, 'expect');\n\n //FIXME Manual promise type\n return new Promise<MethodReturn<R, M>>((resolve, reject) => {\n const responseListener = this.listen(async (data) => {\n try {\n if ((data as any) instanceof Error) throw data;\n responseListener();\n // console.log('Expect', this.id, this, eventData);\n resolve(data as any);\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n}\n\nclass ResponseContext<R, M extends keyof R> extends Context<R, M> {\n withMessage<M2 extends keyof R>(message: M2, id?: string): ResponseContext<R, M2> {\n return new ResponseContext<R, M2>(this.dialog, message, id, this);\n }\n\n listen(callback: Listener<R, M, MethodArg<R, M>, ResponseContext<R, M>>): () => void {\n return super.listen(callback);\n }\n\n send(data?: MethodReturn<R, M>): MethodReturn<R, M> {\n return super.send(data) as any;\n }\n}\n"],"names":["id"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BrowserWindow } from 'electron';
|
|
2
|
+
export declare const isDev: boolean;
|
|
3
|
+
export declare const appPath: string;
|
|
4
|
+
export declare function createWindow({ width, height, disableSecurity, disableSecurityWarnings, quitOnClose, onOpen, onClose, localhostUrl, productionUrl, // in this mode Electron acts as a browser for remote app
|
|
5
|
+
webPath, // must conform to what is in electron-builder.js files section
|
|
6
|
+
useStaticInDev, updater, rememberBounds, }?: {
|
|
7
|
+
width?: number;
|
|
8
|
+
height?: number;
|
|
9
|
+
disableSecurity?: boolean;
|
|
10
|
+
disableSecurityWarnings?: boolean;
|
|
11
|
+
quitOnClose?: boolean;
|
|
12
|
+
onOpen?: (win: BrowserWindow) => void;
|
|
13
|
+
onClose?: (win: BrowserWindow) => void;
|
|
14
|
+
localhostUrl?: string;
|
|
15
|
+
productionUrl?: string;
|
|
16
|
+
webPath?: string;
|
|
17
|
+
useStaticInDev?: boolean;
|
|
18
|
+
updater?: boolean;
|
|
19
|
+
rememberBounds?: boolean;
|
|
20
|
+
}): {
|
|
21
|
+
readonly mainWindow: BrowserWindow | null;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=createWindow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWindow.d.ts","sourceRoot":"","sources":["../../src/electron/createWindow.ts"],"names":[],"mappings":"AAMA,OAAO,EAAa,aAAa,EAA8B,MAAM,UAAU,CAAC;AAKhF,eAAO,MAAM,KAAK,SAA4C,CAAC;AAC/D,eAAO,MAAM,OAAO,QAAmB,CAAC;AAiBxC,wBAAgB,YAAY,CAAC,EACzB,KAAY,EACZ,MAAa,EACb,eAAsB,EACtB,uBAA8B,EAC9B,WAAkB,EAClB,MAAM,EACN,OAAO,EACP,YAAsC,EACtC,aAAkB,EAAE,yDAAyD;AAC7E,OAAsC,EAAE,+DAA+D;AACvG,cAAsB,EACtB,OAAe,EACf,cAAqB,GACxB,GAAE;IACC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CACvB;;EAgLL"}
|