adnbn 0.2.7 → 0.2.9

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.
Files changed (34) hide show
  1. package/dist/cli/plugins/meta/Email.js +3 -2
  2. package/dist/cli/plugins/meta/Email.js.map +1 -1
  3. package/dist/cli/plugins/meta/Homepage.js +3 -2
  4. package/dist/cli/plugins/meta/Homepage.js.map +1 -1
  5. package/dist/entry/service/Builder.d.ts +0 -5
  6. package/dist/locale/adapters/react/LocaleProvider.d.ts +8 -0
  7. package/dist/locale/adapters/react/LocaleProvider.js +47 -0
  8. package/dist/locale/adapters/react/LocaleProvider.js.map +1 -0
  9. package/dist/locale/adapters/react/context.d.ts +3 -2
  10. package/dist/locale/adapters/react/index.d.ts +2 -8
  11. package/dist/main/offscreen.js +1 -1
  12. package/dist/main/offscreen.js.map +1 -1
  13. package/dist/message/MessageManager.js +0 -1
  14. package/dist/message/MessageManager.js.map +1 -1
  15. package/dist/message/handlers/AbstractHandler.d.ts +1 -1
  16. package/dist/message/handlers/AbstractHandler.js.map +1 -1
  17. package/dist/message/handlers/GeneralHandler.d.ts +1 -1
  18. package/dist/message/handlers/GeneralHandler.js.map +1 -1
  19. package/dist/message/handlers/MapHandler.d.ts +1 -1
  20. package/dist/message/handlers/MapHandler.js +1 -1
  21. package/dist/message/handlers/MapHandler.js.map +1 -1
  22. package/dist/message/handlers/SingleHandler.d.ts +1 -1
  23. package/dist/message/handlers/SingleHandler.js +1 -1
  24. package/dist/message/handlers/SingleHandler.js.map +1 -1
  25. package/dist/offscreen/providers/ProxyOffscreen.d.ts +5 -3
  26. package/dist/offscreen/providers/ProxyOffscreen.js +14 -7
  27. package/dist/offscreen/providers/ProxyOffscreen.js.map +1 -1
  28. package/dist/service/index.d.ts +0 -5
  29. package/dist/service/providers/RegisterService.d.ts +3 -8
  30. package/dist/service/providers/RegisterService.js.map +1 -1
  31. package/dist/service/providers/index.d.ts +0 -5
  32. package/dist/types/message.d.ts +1 -1
  33. package/dist/types/message.js.map +1 -1
  34. package/package.json +3 -2
@@ -1,5 +1,6 @@
1
- import isEmail from "validator/lib/isEmail.js";
1
+ import { z } from "zod";
2
2
  import AbstractMeta from "./AbstractMeta.js";
3
+ const emailSchema = z.string().email();
3
4
  class Email_default extends AbstractMeta {
4
5
  constructor(config) {
5
6
  super(config);
@@ -8,7 +9,7 @@ class Email_default extends AbstractMeta {
8
9
  return this.config.email;
9
10
  }
10
11
  isValid(value) {
11
- return value ? isEmail(value) : false;
12
+ return emailSchema.safeParse(value).success;
12
13
  }
13
14
  }
14
15
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/plugins/meta/Email.ts"],"sourcesContent":["import isEmail from \"validator/lib/isEmail.js\";\n\nimport AbstractMeta from \"./AbstractMeta\";\n\nimport type {ReadonlyConfig} from \"@typing/config\";\n\nexport default class extends AbstractMeta {\n public constructor(config: ReadonlyConfig) {\n super(config);\n }\n\n public getValue(): ReadonlyConfig[\"email\"] {\n return this.config.email;\n }\n\n protected isValid(value?: string): boolean {\n return value ? isEmail(value) : false;\n }\n}\n"],"mappings":"AAAA,OAAO,aAAa;AAEpB,OAAO,kBAAkB;AAIzB,MAAO,sBAAsB,aAAa;AAAA,EAC/B,YAAY,QAAwB;AACvC,UAAM,MAAM;AAAA,EAChB;AAAA,EAEO,WAAoC;AACvC,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEU,QAAQ,OAAyB;AACvC,WAAO,QAAQ,QAAQ,KAAK,IAAI;AAAA,EACpC;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/cli/plugins/meta/Email.ts"],"sourcesContent":["import {z} from \"zod\";\n\nimport AbstractMeta from \"./AbstractMeta\";\n\nimport type {ReadonlyConfig} from \"@typing/config\";\n\nconst emailSchema = z.string().email();\n\nexport default class extends AbstractMeta {\n public constructor(config: ReadonlyConfig) {\n super(config);\n }\n\n public getValue(): ReadonlyConfig[\"email\"] {\n return this.config.email;\n }\n\n protected isValid(value?: string): boolean {\n return emailSchema.safeParse(value).success;\n }\n}\n"],"mappings":"AAAA,SAAQ,SAAQ;AAEhB,OAAO,kBAAkB;AAIzB,MAAM,cAAc,EAAE,OAAO,EAAE,MAAM;AAErC,MAAO,sBAAsB,aAAa;AAAA,EAC/B,YAAY,QAAwB;AACvC,UAAM,MAAM;AAAA,EAChB;AAAA,EAEO,WAAoC;AACvC,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEU,QAAQ,OAAyB;AACvC,WAAO,YAAY,UAAU,KAAK,EAAE;AAAA,EACxC;AACJ;","names":[]}
@@ -1,5 +1,6 @@
1
- import isURL from "validator/lib/isURL.js";
1
+ import { z } from "zod";
2
2
  import AbstractMeta from "./AbstractMeta.js";
3
+ const urlSchema = z.string().url();
3
4
  class Homepage_default extends AbstractMeta {
4
5
  constructor(config) {
5
6
  super(config);
@@ -8,7 +9,7 @@ class Homepage_default extends AbstractMeta {
8
9
  return this.config.homepage;
9
10
  }
10
11
  isValid(value) {
11
- return value ? isURL(value) : false;
12
+ return urlSchema.safeParse(value).success;
12
13
  }
13
14
  }
14
15
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/plugins/meta/Homepage.ts"],"sourcesContent":["import isURL from \"validator/lib/isURL.js\";\n\nimport AbstractMeta from \"./AbstractMeta\";\n\nimport type {ReadonlyConfig} from \"@typing/config\";\n\nexport default class extends AbstractMeta {\n public constructor(config: ReadonlyConfig) {\n super(config);\n }\n\n public getValue(): ReadonlyConfig[\"homepage\"] {\n return this.config.homepage;\n }\n\n protected isValid(value?: string): boolean {\n return value ? isURL(value) : false;\n }\n}\n"],"mappings":"AAAA,OAAO,WAAW;AAElB,OAAO,kBAAkB;AAIzB,MAAO,yBAAsB,aAAa;AAAA,EAC/B,YAAY,QAAwB;AACvC,UAAM,MAAM;AAAA,EAChB;AAAA,EAEO,WAAuC;AAC1C,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEU,QAAQ,OAAyB;AACvC,WAAO,QAAQ,MAAM,KAAK,IAAI;AAAA,EAClC;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/cli/plugins/meta/Homepage.ts"],"sourcesContent":["import {z} from \"zod\";\n\nimport AbstractMeta from \"./AbstractMeta\";\n\nimport type {ReadonlyConfig} from \"@typing/config\";\n\nconst urlSchema = z.string().url();\n\nexport default class extends AbstractMeta {\n public constructor(config: ReadonlyConfig) {\n super(config);\n }\n\n public getValue(): ReadonlyConfig[\"homepage\"] {\n return this.config.homepage;\n }\n\n protected isValid(value?: string): boolean {\n return urlSchema.safeParse(value).success;\n }\n}\n"],"mappings":"AAAA,SAAQ,SAAQ;AAEhB,OAAO,kBAAkB;AAIzB,MAAM,YAAY,EAAE,OAAO,EAAE,IAAI;AAEjC,MAAO,yBAAsB,aAAa;AAAA,EAC/B,YAAY,QAAwB;AACvC,UAAM,MAAM;AAAA,EAChB;AAAA,EAEO,WAAuC;AAC1C,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEU,QAAQ,OAAyB;AACvC,WAAO,UAAU,UAAU,KAAK,EAAE;AAAA,EACtC;AACJ;","names":[]}
@@ -10,11 +10,6 @@ import '../../types/helpers.js';
10
10
  import '../../types/message.js';
11
11
  import '../../transport/RegisterTransport.js';
12
12
  import '../../transport/BaseTransport.js';
13
- import '../../service/ServiceMessage.js';
14
- import '../../transport/TransportMessage.js';
15
- import '../../message/providers/Message.js';
16
- import '../../message/providers/AbstractMessage.js';
17
- import '../../message/MessageManager.js';
18
13
  import '../../types/background.js';
19
14
 
20
15
  declare class export_default<T extends TransportType = TransportType> extends export_default$1<ServiceOptions, T> {
@@ -0,0 +1,8 @@
1
+ import React__default, { PropsWithChildren } from 'react';
2
+
3
+ interface LocaleProviderProps {
4
+ storage?: string | false;
5
+ }
6
+ declare const LocaleProvider: ({ children, storage }: PropsWithChildren<LocaleProviderProps>) => React__default.JSX.Element;
7
+
8
+ export { type LocaleProviderProps, LocaleProvider as default };
@@ -0,0 +1,47 @@
1
+ import React, { useCallback, useEffect, useMemo, useState } from "react";
2
+ import { LocaleContext } from "./context.js";
3
+ import { getLocaleDir, isLocaleRtl } from "./../../../locale/utils.js";
4
+ import { DynamicLocale } from "./../../../locale/providers/index.js";
5
+ const LocaleProvider = ({ children, storage }) => {
6
+ const locale = useMemo(() => new DynamicLocale(storage), []);
7
+ const [lang, setLang] = useState(locale.lang());
8
+ const _ = useCallback((key, substitutions) => {
9
+ return locale.trans(key, substitutions);
10
+ }, []);
11
+ const choice = useCallback((key, count, substitutions) => {
12
+ return locale.choice(key, count, substitutions);
13
+ }, []);
14
+ const change = useCallback((lang2) => {
15
+ locale.change(lang2).catch((err) => console.error(`Cannot find locale file for "${lang2}" language`, err));
16
+ }, []);
17
+ useEffect(() => {
18
+ const html = document.querySelector("html");
19
+ html == null ? void 0 : html.setAttribute("lang", lang);
20
+ html == null ? void 0 : html.setAttribute("dir", getLocaleDir(lang));
21
+ }, [lang]);
22
+ useEffect(() => {
23
+ locale.sync().then((lang2) => setLang(lang2));
24
+ }, []);
25
+ useEffect(() => {
26
+ return locale.watch((lang2) => setLang(lang2));
27
+ }, []);
28
+ return /* @__PURE__ */ React.createElement(
29
+ LocaleContext.Provider,
30
+ {
31
+ value: {
32
+ _,
33
+ choice,
34
+ change,
35
+ lang,
36
+ dir: getLocaleDir(lang),
37
+ isRtl: isLocaleRtl(lang)
38
+ }
39
+ },
40
+ children
41
+ );
42
+ };
43
+ var LocaleProvider_default = LocaleProvider;
44
+ export {
45
+ LocaleProvider_default as default
46
+ };
47
+ //# sourceMappingURL=LocaleProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/locale/adapters/react/LocaleProvider.tsx"],"sourcesContent":["import React, {PropsWithChildren, useCallback, useEffect, useMemo, useState} from \"react\";\n\nimport {LocaleContext, LocaleContract} from \"./context\";\n\nimport {getLocaleDir, isLocaleRtl} from \"@locale/utils\";\n\nimport {DynamicLocale} from \"@locale/providers\";\n\nimport {Language} from \"@typing/locale\";\n\nexport interface LocaleProviderProps {\n storage?: string | false;\n}\n\nconst LocaleProvider = ({children, storage}: PropsWithChildren<LocaleProviderProps>) => {\n const locale = useMemo(() => new DynamicLocale(storage), []);\n\n const [lang, setLang] = useState<Language>(locale.lang());\n\n const _: LocaleContract[\"_\"] = useCallback((key, substitutions): string => {\n return locale.trans(key, substitutions);\n }, []);\n\n const choice: LocaleContract[\"choice\"] = useCallback((key, count, substitutions): string => {\n return locale.choice(key, count, substitutions);\n }, []);\n\n const change: LocaleContract[\"change\"] = useCallback((lang): void => {\n locale.change(lang).catch(err => console.error(`Cannot find locale file for \"${lang}\" language`, err));\n }, []);\n\n useEffect(() => {\n const html = document.querySelector(\"html\");\n\n html?.setAttribute(\"lang\", lang);\n html?.setAttribute(\"dir\", getLocaleDir(lang));\n }, [lang]);\n\n useEffect(() => {\n locale.sync().then(lang => setLang(lang));\n }, []);\n\n useEffect(() => {\n return locale.watch(lang => setLang(lang));\n }, []);\n\n return (\n <LocaleContext.Provider\n value={{\n _,\n choice,\n change,\n lang,\n dir: getLocaleDir(lang),\n isRtl: isLocaleRtl(lang),\n }}\n >\n {children}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleProvider;\n"],"mappings":"AAAA,OAAO,SAA2B,aAAa,WAAW,SAAS,gBAAe;AAElF,SAAQ,qBAAoC;AAE5C,SAAQ,cAAc,mBAAkB;AAExC,SAAQ,qBAAoB;AAQ5B,MAAM,iBAAiB,CAAC,EAAC,UAAU,QAAO,MAA8C;AACpF,QAAM,SAAS,QAAQ,MAAM,IAAI,cAAc,OAAO,GAAG,CAAC,CAAC;AAE3D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAmB,OAAO,KAAK,CAAC;AAExD,QAAM,IAAyB,YAAY,CAAC,KAAK,kBAA0B;AACvE,WAAO,OAAO,MAAM,KAAK,aAAa;AAAA,EAC1C,GAAG,CAAC,CAAC;AAEL,QAAM,SAAmC,YAAY,CAAC,KAAK,OAAO,kBAA0B;AACxF,WAAO,OAAO,OAAO,KAAK,OAAO,aAAa;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,QAAM,SAAmC,YAAY,CAACA,UAAe;AACjE,WAAO,OAAOA,KAAI,EAAE,MAAM,SAAO,QAAQ,MAAM,gCAAgCA,KAAI,cAAc,GAAG,CAAC;AAAA,EACzG,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACZ,UAAM,OAAO,SAAS,cAAc,MAAM;AAE1C,iCAAM,aAAa,QAAQ;AAC3B,iCAAM,aAAa,OAAO,aAAa,IAAI;AAAA,EAC/C,GAAG,CAAC,IAAI,CAAC;AAET,YAAU,MAAM;AACZ,WAAO,KAAK,EAAE,KAAK,CAAAA,UAAQ,QAAQA,KAAI,CAAC;AAAA,EAC5C,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACZ,WAAO,OAAO,MAAM,CAAAA,UAAQ,QAAQA,KAAI,CAAC;AAAA,EAC7C,GAAG,CAAC,CAAC;AAEL,SACI;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACG,OAAO;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,aAAa,IAAI;AAAA,QACtB,OAAO,YAAY,IAAI;AAAA,MAC3B;AAAA;AAAA,IAEC;AAAA,EACL;AAER;AAEA,IAAO,yBAAQ;","names":["lang"]}
@@ -1,3 +1,4 @@
1
+ import * as React from 'react';
1
2
  import { LocaleStructure, Language, LocaleDir, LocaleNonPluralKeys, LocaleSubstitutionsFor, LocalePluralKeys } from '../../../types/locale.js';
2
3
  import { LocaleNativeStructure } from '../../providers/NativeLocale.js';
3
4
  import '../../providers/AbstractLocale.js';
@@ -11,7 +12,7 @@ interface LocaleContract<S extends LocaleStructure = LocaleNativeStructure> {
11
12
  change(lang: Language): void;
12
13
  }
13
14
  declare const DefaultLocale: LocaleContract;
14
- declare const LocaleContext: any;
15
- declare const useLocale: () => any;
15
+ declare const LocaleContext: React.Context<LocaleContract<LocaleNativeStructure>>;
16
+ declare const useLocale: () => LocaleContract<LocaleNativeStructure>;
16
17
 
17
18
  export { DefaultLocale, LocaleContext, type LocaleContract, useLocale };
@@ -1,12 +1,6 @@
1
- import { PropsWithChildren } from 'react';
1
+ export { default as LocaleProvider, LocaleProviderProps } from './LocaleProvider.js';
2
2
  export { LocaleContract, useLocale } from './context.js';
3
+ import 'react';
3
4
  import '../../../types/locale.js';
4
5
  import '../../providers/NativeLocale.js';
5
6
  import '../../providers/AbstractLocale.js';
6
-
7
- interface LocaleProviderProps {
8
- storage?: string | false;
9
- }
10
- declare const LocaleProvider: ({ children, storage }: PropsWithChildren<LocaleProviderProps>) => any;
11
-
12
- export { LocaleProvider, type LocaleProviderProps };
@@ -19,7 +19,7 @@ const getOffscreen = (name) => {
19
19
  if (!parameters) {
20
20
  throw new Error(`Unable to get offscreen: ${name}`);
21
21
  }
22
- return new ProxyOffscreen(name, parameters).get();
22
+ return ProxyOffscreen.getInstance(name, parameters).get();
23
23
  };
24
24
  export {
25
25
  OffscreenReason,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/main/offscreen.ts"],"sourcesContent":["import ProxyOffscreen from \"@offscreen/providers/ProxyOffscreen\";\n\nimport {type OffscreenDefinition, OffscreenReason, type OffscreenUnresolvedDefinition} from \"@typing/offscreen\";\nimport {TransportDictionary, TransportType} from \"@typing/transport\";\nimport {DeepAsyncProxy} from \"@typing/helpers\";\n\ntype OffscreenParameters = chrome.offscreen.CreateParameters;\n\nexport {OffscreenReason, OffscreenDefinition, OffscreenUnresolvedDefinition};\n\nexport type OffscreenAlias = string;\n\nexport type OffscreenMap = Map<OffscreenAlias, OffscreenParameters>;\n\nexport const defineOffscreen = <T extends TransportType>(options: OffscreenDefinition<T>): OffscreenDefinition<T> => {\n return options;\n};\n\nexport const getOffscreens = (): OffscreenMap => {\n const offscreens: OffscreenMap = new Map();\n\n try {\n // @ts-expect-error: __ADNBN_OFFSCREEN_PARAMETERS__ is a virtual variable generated by the bundler `src/cli/plugins/offscreen/index.ts`\n Object.entries<OffscreenParameters>(__ADNBN_OFFSCREEN_PARAMETERS__).forEach(([key, value]) => {\n offscreens.set(key, value);\n });\n } catch (e) {\n console.error(\"Failed getting offscreens: \", e);\n }\n\n return offscreens;\n};\n\nexport const getOffscreen = <N extends Extract<keyof TransportDictionary, string>>(\n name: N\n): DeepAsyncProxy<TransportDictionary[N]> => {\n const parameters = getOffscreens().get(name);\n\n if (!parameters) {\n throw new Error(`Unable to get offscreen: ${name}`);\n }\n\n return new ProxyOffscreen(name, parameters).get();\n};\n"],"mappings":"AAAA,OAAO,oBAAoB;AAE3B,SAAkC,uBAA0D;AAYrF,MAAM,kBAAkB,CAA0B,YAA4D;AACjH,SAAO;AACX;AAEO,MAAM,gBAAgB,MAAoB;AAC7C,QAAM,aAA2B,oBAAI,IAAI;AAEzC,MAAI;AAEA,WAAO,QAA6B,8BAA8B,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC1F,iBAAW,IAAI,KAAK,KAAK;AAAA,IAC7B,CAAC;AAAA,EACL,SAAS,GAAG;AACR,YAAQ,MAAM,+BAA+B,CAAC;AAAA,EAClD;AAEA,SAAO;AACX;AAEO,MAAM,eAAe,CACxB,SACyC;AACzC,QAAM,aAAa,cAAc,EAAE,IAAI,IAAI;AAE3C,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,MAAM,4BAA4B,IAAI,EAAE;AAAA,EACtD;AAEA,SAAO,IAAI,eAAe,MAAM,UAAU,EAAE,IAAI;AACpD;","names":[]}
1
+ {"version":3,"sources":["../../src/main/offscreen.ts"],"sourcesContent":["import ProxyOffscreen from \"@offscreen/providers/ProxyOffscreen\";\n\nimport {type OffscreenDefinition, OffscreenReason, type OffscreenUnresolvedDefinition} from \"@typing/offscreen\";\nimport {TransportDictionary, TransportType} from \"@typing/transport\";\nimport {DeepAsyncProxy} from \"@typing/helpers\";\n\ntype OffscreenParameters = chrome.offscreen.CreateParameters;\n\nexport {OffscreenReason, OffscreenDefinition, OffscreenUnresolvedDefinition};\n\nexport type OffscreenAlias = string;\n\nexport type OffscreenMap = Map<OffscreenAlias, OffscreenParameters>;\n\nexport const defineOffscreen = <T extends TransportType>(options: OffscreenDefinition<T>): OffscreenDefinition<T> => {\n return options;\n};\n\nexport const getOffscreens = (): OffscreenMap => {\n const offscreens: OffscreenMap = new Map();\n\n try {\n // @ts-expect-error: __ADNBN_OFFSCREEN_PARAMETERS__ is a virtual variable generated by the bundler `src/cli/plugins/offscreen/index.ts`\n Object.entries<OffscreenParameters>(__ADNBN_OFFSCREEN_PARAMETERS__).forEach(([key, value]) => {\n offscreens.set(key, value);\n });\n } catch (e) {\n console.error(\"Failed getting offscreens: \", e);\n }\n\n return offscreens;\n};\n\nexport const getOffscreen = <N extends Extract<keyof TransportDictionary, string>>(\n name: N\n): DeepAsyncProxy<TransportDictionary[N]> => {\n const parameters = getOffscreens().get(name);\n\n if (!parameters) {\n throw new Error(`Unable to get offscreen: ${name}`);\n }\n\n return ProxyOffscreen.getInstance(name, parameters).get();\n};\n"],"mappings":"AAAA,OAAO,oBAAoB;AAE3B,SAAkC,uBAA0D;AAYrF,MAAM,kBAAkB,CAA0B,YAA4D;AACjH,SAAO;AACX;AAEO,MAAM,gBAAgB,MAAoB;AAC7C,QAAM,aAA2B,oBAAI,IAAI;AAEzC,MAAI;AAEA,WAAO,QAA6B,8BAA8B,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC1F,iBAAW,IAAI,KAAK,KAAK;AAAA,IAC7B,CAAC;AAAA,EACL,SAAS,GAAG;AACR,YAAQ,MAAM,+BAA+B,CAAC;AAAA,EAClD;AAEA,SAAO;AACX;AAEO,MAAM,eAAe,CACxB,SACyC;AACzC,QAAM,aAAa,cAAc,EAAE,IAAI,IAAI;AAE3C,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,MAAM,4BAA4B,IAAI,EAAE;AAAA,EACtD;AAEA,SAAO,eAAe,YAAY,MAAM,UAAU,EAAE,IAAI;AAC5D;","names":[]}
@@ -56,7 +56,6 @@ class MessageManager {
56
56
  results[0].then(sendResponse);
57
57
  return true;
58
58
  }
59
- sendResponse();
60
59
  }
61
60
  }
62
61
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/message/MessageManager.ts"],"sourcesContent":["import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) {\n return;\n }\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n\n return true;\n }\n\n sendResponse();\n }\n}\n"],"mappings":"AAAA,SAAQ,iBAAgB;AAExB;AAAA,EAGI;AAAA,OAIG;AAEP,MAAO,eAA0D;AAAA,EACrD,WAAmC,oBAAI,IAAI;AAAA,EAC3C,cAAmC;AAAA,EAE3C,OAAc,cAA8D;AAfhF;AAgBQ,WAAQ,gBAAW,sBAAX,iBAAiC,IAAI,eAAkB;AAAA,EACnE;AAAA,EAEA,cAAc;AACV,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AAAA,EAC3C;AAAA,EAEO,IAAI,SAA4B;AACnC,SAAK,SAAS,IAAI,OAAO;AACzB,SAAK,eAAe;AAAA,EACxB;AAAA,EAEO,OAAO,SAA4B;AACtC,SAAK,SAAS,OAAO,OAAO;AAC5B,SAAK,eAAe;AAAA,EACxB;AAAA,EAEO,QAAQ;AACX,SAAK,WAAW,oBAAI,IAAI;AACxB,SAAK,eAAe;AAAA,EACxB;AAAA,EAEQ,iBAAiB;AACrB,QAAI,KAAK,SAAS,OAAO,KAAK,CAAC,KAAK,aAAa;AAC7C,WAAK,cAAc,UAAU,KAAK,QAAQ;AAAA,IAC9C,WAAW,KAAK,SAAS,SAAS,KAAK,KAAK,aAAa;AACrD,WAAK,YAAY;AACjB,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;AAAA,EAEQ,SACJ,SACA,QACA,cACc;AACd,QAAI,CAAC,WAAW,OAAO,YAAY,YAAY,CAAC,QAAQ,MAAM;AAC1D;AAAA,IACJ;AAEA,UAAM,UAA0B,CAAC;AAEjC,eAAW,WAAW,KAAK,UAAU;AACjC,UAAI;AACA,cAAM,SAAS,QAAQ,IAAI,QAAQ,MAAM,QAAQ,MAAM,MAAM;AAE7D,YAAI,WAAW,QAAW;AACtB,kBAAQ,KAAK,QAAQ,QAAQ,MAAM,CAAC;AAAA,QACxC;AAAA,MACJ,SAAS,KAAK;AACV,gBAAQ,MAAM,0BAA0B,GAAG;AAAA,MAC/C;AAAA,IACJ;AAEA,QAAI,QAAQ,SAAS,GAAG;AACpB,YAAM,IAAI;AAAA,QACN,iBAAiB,QAAQ,IAAI;AAAA,MACjC;AAAA,IACJ;AAEA,QAAI,QAAQ,WAAW,GAAG;AACtB,cAAQ,CAAC,EAAE,KAAK,YAAY;AAE5B,aAAO;AAAA,IACX;AAEA,iBAAa;AAAA,EACjB;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../src/message/MessageManager.ts"],"sourcesContent":["import {onMessage} from \"@adnbn/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) {\n return;\n }\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n\n return true;\n }\n }\n}\n"],"mappings":"AAAA,SAAQ,iBAAgB;AAExB;AAAA,EAGI;AAAA,OAIG;AAEP,MAAO,eAA0D;AAAA,EACrD,WAAmC,oBAAI,IAAI;AAAA,EAC3C,cAAmC;AAAA,EAE3C,OAAc,cAA8D;AAfhF;AAgBQ,WAAQ,gBAAW,sBAAX,iBAAiC,IAAI,eAAkB;AAAA,EACnE;AAAA,EAEA,cAAc;AACV,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AAAA,EAC3C;AAAA,EAEO,IAAI,SAA4B;AACnC,SAAK,SAAS,IAAI,OAAO;AACzB,SAAK,eAAe;AAAA,EACxB;AAAA,EAEO,OAAO,SAA4B;AACtC,SAAK,SAAS,OAAO,OAAO;AAC5B,SAAK,eAAe;AAAA,EACxB;AAAA,EAEO,QAAQ;AACX,SAAK,WAAW,oBAAI,IAAI;AACxB,SAAK,eAAe;AAAA,EACxB;AAAA,EAEQ,iBAAiB;AACrB,QAAI,KAAK,SAAS,OAAO,KAAK,CAAC,KAAK,aAAa;AAC7C,WAAK,cAAc,UAAU,KAAK,QAAQ;AAAA,IAC9C,WAAW,KAAK,SAAS,SAAS,KAAK,KAAK,aAAa;AACrD,WAAK,YAAY;AACjB,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;AAAA,EAEQ,SACJ,SACA,QACA,cACc;AACd,QAAI,CAAC,WAAW,OAAO,YAAY,YAAY,CAAC,QAAQ,MAAM;AAC1D;AAAA,IACJ;AAEA,UAAM,UAA0B,CAAC;AAEjC,eAAW,WAAW,KAAK,UAAU;AACjC,UAAI;AACA,cAAM,SAAS,QAAQ,IAAI,QAAQ,MAAM,QAAQ,MAAM,MAAM;AAE7D,YAAI,WAAW,QAAW;AACtB,kBAAQ,KAAK,QAAQ,QAAQ,MAAM,CAAC;AAAA,QACxC;AAAA,MACJ,SAAS,KAAK;AACV,gBAAQ,MAAM,0BAA0B,GAAG;AAAA,MAC/C;AAAA,IACJ;AAEA,QAAI,QAAQ,SAAS,GAAG;AACpB,YAAM,IAAI;AAAA,QACN,iBAAiB,QAAQ,IAAI;AAAA,MACjC;AAAA,IACJ;AAEA,QAAI,QAAQ,WAAW,GAAG;AACtB,cAAQ,CAAC,EAAE,KAAK,YAAY;AAE5B,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import { MessageDictionary, MessageHandler, MessageType, MessageData, MessageSender, MessageResponse } from '../../types/message.js';
2
2
 
3
3
  declare abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {
4
- abstract run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined;
4
+ abstract run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined | null;
5
5
  }
6
6
 
7
7
  export { AbstractHandler as default };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/message/handlers/AbstractHandler.ts"],"sourcesContent":["import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n"],"mappings":"AASA,MAAO,gBAAiG;AAMxG;","names":[]}
1
+ {"version":3,"sources":["../../../src/message/handlers/AbstractHandler.ts"],"sourcesContent":["import {\n MessageData,\n MessageDictionary,\n MessageHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default abstract class AbstractHandler<T extends MessageDictionary> implements MessageHandler<T> {\n public abstract run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined | null;\n}\n"],"mappings":"AASA,MAAO,gBAAiG;AAMxG;","names":[]}
@@ -4,7 +4,7 @@ import { MessageDictionary, MessageType, MessageGeneralHandler, MessageData, Mes
4
4
  declare class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {
5
5
  private generalHandler;
6
6
  constructor(generalHandler: MessageGeneralHandler<T, K>);
7
- run(type: K, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined;
7
+ run(type: K, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined | null;
8
8
  }
9
9
 
10
10
  export { GeneralHandler as default };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/message/handlers/GeneralHandler.ts"],"sourcesContent":["import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n return this.generalHandler(type, data, sender);\n }\n}\n"],"mappings":"AAAA,OAAO,qBAAqB;AAU5B,MAAO,uBAA4F,gBAAmB;AAAA,EAClH,YAAoB,gBAA6C;AAC7D,UAAM;AADU;AAAA,EAEpB;AAAA,EAEO,IACH,MACA,MACA,QAC8C;AAC9C,WAAO,KAAK,eAAe,MAAM,MAAM,MAAM;AAAA,EACjD;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/message/handlers/GeneralHandler.ts"],"sourcesContent":["import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class GeneralHandler<T extends MessageDictionary, K extends MessageType<T>> extends AbstractHandler<T> {\n constructor(private generalHandler: MessageGeneralHandler<T, K>) {\n super();\n }\n\n public run(\n type: K,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined | null {\n return this.generalHandler(type, data, sender);\n }\n}\n"],"mappings":"AAAA,OAAO,qBAAqB;AAU5B,MAAO,uBAA4F,gBAAmB;AAAA,EAClH,YAAoB,gBAA6C;AAC7D,UAAM;AADU;AAAA,EAEpB;AAAA,EAEO,IACH,MACA,MACA,QACqD;AACrD,WAAO,KAAK,eAAe,MAAM,MAAM,MAAM;AAAA,EACjD;AACJ;","names":[]}
@@ -4,7 +4,7 @@ import { MessageDictionary, MessageMapHandler, MessageType, MessageData, Message
4
4
  declare class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {
5
5
  private map;
6
6
  constructor(map: MessageMapHandler<T>);
7
- run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined;
7
+ run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined | null;
8
8
  }
9
9
 
10
10
  export { MapHandler as default };
@@ -8,7 +8,7 @@ class MapHandler extends AbstractHandler {
8
8
  const handler = this.map[type];
9
9
  if (handler) {
10
10
  if (typeof handler === "function") {
11
- return handler(data, sender);
11
+ return handler(data, sender) || null;
12
12
  } else {
13
13
  throw new Error(`Handler for type "${type}" in object of handlers must be a function`);
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/message/handlers/MapHandler.ts"],"sourcesContent":["import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n const handler = this.map[type];\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender);\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n"],"mappings":"AAAA,OAAO,qBAAqB;AAU5B,MAAO,mBAA8D,gBAAmB;AAAA,EACpF,YAAoB,KAA2B;AAC3C,UAAM;AADU;AAAA,EAEpB;AAAA,EAEO,IACH,MACA,MACA,QAC8C;AAC9C,UAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,QAAI,SAAS;AACT,UAAI,OAAO,YAAY,YAAY;AAC/B,eAAO,QAAQ,MAAM,MAAM;AAAA,MAC/B,OAAO;AACH,cAAM,IAAI,MAAM,qBAAqB,IAAI,4CAA4C;AAAA,MACzF;AAAA,IACJ;AAAA,EACJ;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/message/handlers/MapHandler.ts"],"sourcesContent":["import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageMapHandler,\n MessageResponse,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MapHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(private map: MessageMapHandler<T>) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined | null {\n const handler = this.map[type];\n\n if (handler) {\n if (typeof handler === \"function\") {\n return handler(data, sender) || null;\n } else {\n throw new Error(`Handler for type \"${type}\" in object of handlers must be a function`);\n }\n }\n }\n}\n"],"mappings":"AAAA,OAAO,qBAAqB;AAU5B,MAAO,mBAA8D,gBAAmB;AAAA,EACpF,YAAoB,KAA2B;AAC3C,UAAM;AADU;AAAA,EAEpB;AAAA,EAEO,IACH,MACA,MACA,QACqD;AACrD,UAAM,UAAU,KAAK,IAAI,IAAI;AAE7B,QAAI,SAAS;AACT,UAAI,OAAO,YAAY,YAAY;AAC/B,eAAO,QAAQ,MAAM,MAAM,KAAK;AAAA,MACpC,OAAO;AACH,cAAM,IAAI,MAAM,qBAAqB,IAAI,4CAA4C;AAAA,MACzF;AAAA,IACJ;AAAA,EACJ;AACJ;","names":[]}
@@ -5,7 +5,7 @@ declare class SingleHandler<T extends MessageDictionary> extends AbstractHandler
5
5
  private messageType;
6
6
  private handler;
7
7
  constructor(messageType: MessageType<T>, handler: MessageTargetHandler<T, MessageType<T>>);
8
- run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined;
8
+ run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined | null;
9
9
  }
10
10
 
11
11
  export { SingleHandler as default };
@@ -7,7 +7,7 @@ class SingleHandler extends AbstractHandler {
7
7
  }
8
8
  run(type, data, sender) {
9
9
  if (type === this.messageType) {
10
- return this.handler(data, sender);
10
+ return this.handler(data, sender) || null;
11
11
  }
12
12
  }
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/message/handlers/SingleHandler.ts"],"sourcesContent":["import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined {\n if (type === this.messageType) {\n return this.handler(data, sender);\n }\n }\n}\n"],"mappings":"AAAA,OAAO,qBAAqB;AAU5B,MAAO,sBAAiE,gBAAmB;AAAA,EACvF,YACY,aACA,SACV;AACE,UAAM;AAHE;AACA;AAAA,EAGZ;AAAA,EAEO,IACH,MACA,MACA,QAC8C;AAC9C,QAAI,SAAS,KAAK,aAAa;AAC3B,aAAO,KAAK,QAAQ,MAAM,MAAM;AAAA,IACpC;AAAA,EACJ;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/message/handlers/SingleHandler.ts"],"sourcesContent":["import AbstractHandler from \"./AbstractHandler\";\nimport {\n MessageData,\n MessageDictionary,\n MessageResponse,\n MessageSender,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\n\nexport default class SingleHandler<T extends MessageDictionary> extends AbstractHandler<T> {\n constructor(\n private messageType: MessageType<T>,\n private handler: MessageTargetHandler<T, MessageType<T>>\n ) {\n super();\n }\n\n public run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined | null {\n if (type === this.messageType) {\n return this.handler(data, sender) || null;\n }\n }\n}\n"],"mappings":"AAAA,OAAO,qBAAqB;AAU5B,MAAO,sBAAiE,gBAAmB;AAAA,EACvF,YACY,aACA,SACV;AACE,UAAM;AAHE;AACA;AAAA,EAGZ;AAAA,EAEO,IACH,MACA,MACA,QACqD;AACrD,QAAI,SAAS,KAAK,aAAa;AAC3B,aAAO,KAAK,QAAQ,MAAM,MAAM,KAAK;AAAA,IACzC;AAAA,EACJ;AACJ;","names":[]}
@@ -1,4 +1,4 @@
1
- import export_default$1 from '../../transport/ProxyTransport.js';
1
+ import export_default from '../../transport/ProxyTransport.js';
2
2
  import { DeepAsyncProxy } from '../../types/helpers.js';
3
3
  import { TransportName, TransportDictionary, TransportMessage, TransportManager } from '../../types/transport.js';
4
4
  import '../../transport/BaseTransport.js';
@@ -8,14 +8,16 @@ import '../../types/browser.js';
8
8
  import '../../types/message.js';
9
9
 
10
10
  type CreateParameters = chrome.offscreen.CreateParameters;
11
- declare class export_default<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>> extends export_default$1<N, T> {
11
+ declare class ProxyOffscreen<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>> extends export_default<N, T> {
12
12
  private parameters;
13
13
  protected message: TransportMessage;
14
14
  private url?;
15
+ private static instance?;
16
+ static getInstance<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>>(name: N, parameters: CreateParameters): ProxyOffscreen<N, T>;
15
17
  constructor(name: N, parameters: CreateParameters);
16
18
  protected manager(): TransportManager;
17
19
  protected apply(args: any[], path?: string): Promise<any>;
18
20
  get(): T;
19
21
  }
20
22
 
21
- export { export_default as default };
23
+ export { ProxyOffscreen as default };
@@ -7,7 +7,7 @@ import OffscreenMessage from "../OffscreenMessage.js";
7
7
  import OffscreenBridge from "../OffscreenBridge.js";
8
8
  import { isOffscreen } from "../utils.js";
9
9
  import { Browser } from "./../../types/browser.js";
10
- class ProxyOffscreen_default extends ProxyTransport {
10
+ class ProxyOffscreen extends ProxyTransport {
11
11
  constructor(name, parameters) {
12
12
  super(name);
13
13
  this.parameters = parameters;
@@ -15,6 +15,10 @@ class ProxyOffscreen_default extends ProxyTransport {
15
15
  }
16
16
  message;
17
17
  url;
18
+ static instance;
19
+ static getInstance(name, parameters) {
20
+ return this.instance ?? (this.instance = new ProxyOffscreen(name, parameters));
21
+ }
18
22
  manager() {
19
23
  return OffscreenManager.getInstance();
20
24
  }
@@ -25,12 +29,15 @@ class ProxyOffscreen_default extends ProxyTransport {
25
29
  };
26
30
  if (!isManifestVersion3() || getBrowser() === Browser.Firefox) {
27
31
  await OffscreenBridge.createOffscreen(parameters);
28
- } else if (this.url !== parameters.url) {
29
- if (await hasOffscreen()) {
30
- await closeOffscreen();
32
+ } else {
33
+ const exists = await hasOffscreen();
34
+ if (!exists || this.url !== parameters.url) {
35
+ if (exists) {
36
+ await closeOffscreen();
37
+ }
38
+ await createOffscreen(parameters);
39
+ this.url = parameters.url;
31
40
  }
32
- await createOffscreen(parameters);
33
- this.url = parameters.url;
34
41
  }
35
42
  return this.message.send({ path, args });
36
43
  }
@@ -44,6 +51,6 @@ class ProxyOffscreen_default extends ProxyTransport {
44
51
  }
45
52
  }
46
53
  export {
47
- ProxyOffscreen_default as default
54
+ ProxyOffscreen as default
48
55
  };
49
56
  //# sourceMappingURL=ProxyOffscreen.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/offscreen/providers/ProxyOffscreen.ts"],"sourcesContent":["import {closeOffscreen, createOffscreen, hasOffscreen, isManifestVersion3} from \"@adnbn/browser\";\n\nimport {getBrowser} from \"@main/env\";\n\nimport {__t} from \"@locale/helpers\";\n\nimport ProxyTransport from \"@transport/ProxyTransport\";\n\nimport OffscreenManager from \"../OffscreenManager\";\nimport OffscreenMessage from \"../OffscreenMessage\";\nimport OffscreenBridge from \"../OffscreenBridge\";\n\nimport {isOffscreen} from \"../utils\";\n\nimport {Browser} from \"@typing/browser\";\nimport {DeepAsyncProxy} from \"@typing/helpers\";\nimport {TransportDictionary, TransportManager, TransportMessage, TransportName} from \"@typing/transport\";\n\ntype CreateParameters = chrome.offscreen.CreateParameters;\n\nexport default class<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {\n protected message: TransportMessage;\n\n private url?: string;\n\n constructor(\n name: N,\n private parameters: CreateParameters\n ) {\n super(name);\n\n this.message = new OffscreenMessage(name);\n }\n\n protected manager(): TransportManager {\n return OffscreenManager.getInstance();\n }\n\n protected async apply(args: any[], path?: string): Promise<any> {\n const parameters: CreateParameters = {\n ...this.parameters,\n justification: __t(this.parameters.justification),\n };\n\n if (!isManifestVersion3() || getBrowser() === Browser.Firefox) {\n await OffscreenBridge.createOffscreen(parameters);\n } else if (this.url !== parameters.url) {\n if (await hasOffscreen()) {\n await closeOffscreen();\n }\n\n await createOffscreen(parameters);\n\n this.url = parameters.url;\n }\n\n return this.message.send({path, args});\n }\n\n public get(): T {\n if (isOffscreen()) {\n throw new Error(\n `You are trying to get proxy offscreen service \"${this.name}\" from offscreen. You can get original offscreen service instead`\n );\n }\n\n return super.get();\n }\n}\n"],"mappings":"AAAA,SAAQ,gBAAgB,iBAAiB,cAAc,0BAAyB;AAEhF,SAAQ,kBAAiB;AAEzB,SAAQ,WAAU;AAElB,OAAO,oBAAoB;AAE3B,OAAO,sBAAsB;AAC7B,OAAO,sBAAsB;AAC7B,OAAO,qBAAqB;AAE5B,SAAQ,mBAAkB;AAE1B,SAAQ,eAAc;AAMtB,MAAO,+BAA2F,eAAqB;AAAA,EAKnH,YACI,MACQ,YACV;AACE,UAAM,IAAI;AAFF;AAIR,SAAK,UAAU,IAAI,iBAAiB,IAAI;AAAA,EAC5C;AAAA,EAXU;AAAA,EAEF;AAAA,EAWE,UAA4B;AAClC,WAAO,iBAAiB,YAAY;AAAA,EACxC;AAAA,EAEA,MAAgB,MAAM,MAAa,MAA6B;AAC5D,UAAM,aAA+B;AAAA,MACjC,GAAG,KAAK;AAAA,MACR,eAAe,IAAI,KAAK,WAAW,aAAa;AAAA,IACpD;AAEA,QAAI,CAAC,mBAAmB,KAAK,WAAW,MAAM,QAAQ,SAAS;AAC3D,YAAM,gBAAgB,gBAAgB,UAAU;AAAA,IACpD,WAAW,KAAK,QAAQ,WAAW,KAAK;AACpC,UAAI,MAAM,aAAa,GAAG;AACtB,cAAM,eAAe;AAAA,MACzB;AAEA,YAAM,gBAAgB,UAAU;AAEhC,WAAK,MAAM,WAAW;AAAA,IAC1B;AAEA,WAAO,KAAK,QAAQ,KAAK,EAAC,MAAM,KAAI,CAAC;AAAA,EACzC;AAAA,EAEO,MAAS;AACZ,QAAI,YAAY,GAAG;AACf,YAAM,IAAI;AAAA,QACN,kDAAkD,KAAK,IAAI;AAAA,MAC/D;AAAA,IACJ;AAEA,WAAO,MAAM,IAAI;AAAA,EACrB;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/offscreen/providers/ProxyOffscreen.ts"],"sourcesContent":["import {closeOffscreen, createOffscreen, hasOffscreen, isManifestVersion3} from \"@adnbn/browser\";\n\nimport {getBrowser} from \"@main/env\";\n\nimport {__t} from \"@locale/helpers\";\n\nimport ProxyTransport from \"@transport/ProxyTransport\";\n\nimport OffscreenManager from \"../OffscreenManager\";\nimport OffscreenMessage from \"../OffscreenMessage\";\nimport OffscreenBridge from \"../OffscreenBridge\";\n\nimport {isOffscreen} from \"../utils\";\n\nimport {Browser} from \"@typing/browser\";\nimport {DeepAsyncProxy} from \"@typing/helpers\";\nimport {TransportDictionary, TransportManager, TransportMessage, TransportName} from \"@typing/transport\";\n\ntype CreateParameters = chrome.offscreen.CreateParameters;\n\nexport default class ProxyOffscreen<\n N extends TransportName,\n T = DeepAsyncProxy<TransportDictionary[N]>,\n> extends ProxyTransport<N, T> {\n protected message: TransportMessage;\n\n private url?: string;\n\n private static instance?: ProxyOffscreen<any, any>;\n\n public static getInstance<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>>(\n name: N,\n parameters: CreateParameters\n ): ProxyOffscreen<N, T> {\n return (this.instance ??= new ProxyOffscreen(name, parameters));\n }\n\n constructor(\n name: N,\n private parameters: CreateParameters\n ) {\n super(name);\n\n this.message = new OffscreenMessage(name);\n }\n\n protected manager(): TransportManager {\n return OffscreenManager.getInstance();\n }\n\n protected async apply(args: any[], path?: string): Promise<any> {\n const parameters: CreateParameters = {\n ...this.parameters,\n justification: __t(this.parameters.justification),\n };\n\n if (!isManifestVersion3() || getBrowser() === Browser.Firefox) {\n await OffscreenBridge.createOffscreen(parameters);\n } else {\n const exists = await hasOffscreen();\n\n if (!exists || this.url !== parameters.url) {\n if (exists) {\n await closeOffscreen();\n }\n\n await createOffscreen(parameters);\n\n this.url = parameters.url;\n }\n }\n\n return this.message.send({path, args});\n }\n\n public get(): T {\n if (isOffscreen()) {\n throw new Error(\n `You are trying to get proxy offscreen service \"${this.name}\" from offscreen. You can get original offscreen service instead`\n );\n }\n\n return super.get();\n }\n}\n"],"mappings":"AAAA,SAAQ,gBAAgB,iBAAiB,cAAc,0BAAyB;AAEhF,SAAQ,kBAAiB;AAEzB,SAAQ,WAAU;AAElB,OAAO,oBAAoB;AAE3B,OAAO,sBAAsB;AAC7B,OAAO,sBAAsB;AAC7B,OAAO,qBAAqB;AAE5B,SAAQ,mBAAkB;AAE1B,SAAQ,eAAc;AAMtB,MAAO,uBAGG,eAAqB;AAAA,EAc3B,YACI,MACQ,YACV;AACE,UAAM,IAAI;AAFF;AAIR,SAAK,UAAU,IAAI,iBAAiB,IAAI;AAAA,EAC5C;AAAA,EApBU;AAAA,EAEF;AAAA,EAER,OAAe;AAAA,EAEf,OAAc,YACV,MACA,YACoB;AACpB,WAAQ,KAAK,aAAL,KAAK,WAAa,IAAI,eAAe,MAAM,UAAU;AAAA,EACjE;AAAA,EAWU,UAA4B;AAClC,WAAO,iBAAiB,YAAY;AAAA,EACxC;AAAA,EAEA,MAAgB,MAAM,MAAa,MAA6B;AAC5D,UAAM,aAA+B;AAAA,MACjC,GAAG,KAAK;AAAA,MACR,eAAe,IAAI,KAAK,WAAW,aAAa;AAAA,IACpD;AAEA,QAAI,CAAC,mBAAmB,KAAK,WAAW,MAAM,QAAQ,SAAS;AAC3D,YAAM,gBAAgB,gBAAgB,UAAU;AAAA,IACpD,OAAO;AACH,YAAM,SAAS,MAAM,aAAa;AAElC,UAAI,CAAC,UAAU,KAAK,QAAQ,WAAW,KAAK;AACxC,YAAI,QAAQ;AACR,gBAAM,eAAe;AAAA,QACzB;AAEA,cAAM,gBAAgB,UAAU;AAEhC,aAAK,MAAM,WAAW;AAAA,MAC1B;AAAA,IACJ;AAEA,WAAO,KAAK,QAAQ,KAAK,EAAC,MAAM,KAAI,CAAC;AAAA,EACzC;AAAA,EAEO,MAAS;AACZ,QAAI,YAAY,GAAG;AACf,YAAM,IAAI;AAAA,QACN,kDAAkD,KAAK,IAAI;AAAA,MAC/D;AAAA,IACJ;AAEA,WAAO,MAAM,IAAI;AAAA,EACrB;AACJ;","names":[]}
@@ -10,11 +10,6 @@ import '../types/message.js';
10
10
  import '../transport/ProxyTransport.js';
11
11
  import '../transport/BaseTransport.js';
12
12
  import '../transport/RegisterTransport.js';
13
- import './ServiceMessage.js';
14
- import '../transport/TransportMessage.js';
15
- import '../message/providers/Message.js';
16
- import '../message/providers/AbstractMessage.js';
17
- import '../message/MessageManager.js';
18
13
 
19
14
  declare const getService: <N extends TransportName>(name: N) => TransportDictionary[N];
20
15
 
@@ -1,21 +1,16 @@
1
- import { TransportName, TransportDictionary, TransportManager } from '../../types/transport.js';
2
1
  import export_default$1 from '../../transport/RegisterTransport.js';
3
- import ServiceMessage from '../ServiceMessage.js';
2
+ import { TransportName, TransportDictionary, TransportMessage, TransportManager } from '../../types/transport.js';
3
+ import '../../transport/BaseTransport.js';
4
4
  import 'utility-types';
5
5
  import '../../types/entrypoint.js';
6
6
  import '../../types/browser.js';
7
7
  import '../../types/helpers.js';
8
8
  import '../../types/message.js';
9
- import '../../transport/BaseTransport.js';
10
- import '../../transport/TransportMessage.js';
11
- import '../../message/providers/Message.js';
12
- import '../../message/providers/AbstractMessage.js';
13
- import '../../message/MessageManager.js';
14
9
 
15
10
  declare class export_default<N extends TransportName, T extends object = TransportDictionary[N], A extends any[] = []> extends export_default$1<N, T, A> {
16
11
  protected readonly init: (...args: A) => T;
17
12
  constructor(name: N, init: (...args: A) => T);
18
- protected message(): ServiceMessage;
13
+ protected message(): TransportMessage;
19
14
  protected manager(): TransportManager;
20
15
  get(): T;
21
16
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/service/providers/RegisterService.ts"],"sourcesContent":["import {isBackground} from \"@adnbn/browser\";\n\nimport RegisterTransport from \"@transport/RegisterTransport\";\n\nimport ServiceMessage from \"../ServiceMessage\";\nimport ServiceManager from \"../ServiceManager\";\n\nimport type {TransportDictionary, TransportName} from \"@typing/transport\";\n\nexport default class<\n N extends TransportName,\n T extends object = TransportDictionary[N],\n A extends any[] = [],\n> extends RegisterTransport<N, T, A> {\n constructor(\n name: N,\n protected readonly init: (...args: A) => T\n ) {\n super(name, init);\n }\n\n protected message() {\n return new ServiceMessage(this.name);\n }\n\n protected manager() {\n return ServiceManager.getInstance();\n }\n\n public get(): T {\n if (!isBackground()) {\n throw new Error(`Service \"${this.name}\" can be getting only from background context.`);\n }\n\n return super.get();\n }\n}\n"],"mappings":"AAAA,SAAQ,oBAAmB;AAE3B,OAAO,uBAAuB;AAE9B,OAAO,oBAAoB;AAC3B,OAAO,oBAAoB;AAI3B,MAAO,gCAIG,kBAA2B;AAAA,EACjC,YACI,MACmB,MACrB;AACE,UAAM,MAAM,IAAI;AAFG;AAAA,EAGvB;AAAA,EAEU,UAAU;AAChB,WAAO,IAAI,eAAe,KAAK,IAAI;AAAA,EACvC;AAAA,EAEU,UAAU;AAChB,WAAO,eAAe,YAAY;AAAA,EACtC;AAAA,EAEO,MAAS;AACZ,QAAI,CAAC,aAAa,GAAG;AACjB,YAAM,IAAI,MAAM,YAAY,KAAK,IAAI,gDAAgD;AAAA,IACzF;AAEA,WAAO,MAAM,IAAI;AAAA,EACrB;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/service/providers/RegisterService.ts"],"sourcesContent":["import {isBackground} from \"@adnbn/browser\";\n\nimport RegisterTransport from \"@transport/RegisterTransport\";\n\nimport ServiceMessage from \"../ServiceMessage\";\nimport ServiceManager from \"../ServiceManager\";\n\nimport {TransportDictionary, TransportManager, TransportMessage, TransportName} from \"@typing/transport\";\n\nexport default class<\n N extends TransportName,\n T extends object = TransportDictionary[N],\n A extends any[] = [],\n> extends RegisterTransport<N, T, A> {\n constructor(\n name: N,\n protected readonly init: (...args: A) => T\n ) {\n super(name, init);\n }\n\n protected message(): TransportMessage {\n return new ServiceMessage(this.name);\n }\n\n protected manager(): TransportManager {\n return ServiceManager.getInstance();\n }\n\n public get(): T {\n if (!isBackground()) {\n throw new Error(`Service \"${this.name}\" can be getting only from background context.`);\n }\n\n return super.get();\n }\n}\n"],"mappings":"AAAA,SAAQ,oBAAmB;AAE3B,OAAO,uBAAuB;AAE9B,OAAO,oBAAoB;AAC3B,OAAO,oBAAoB;AAI3B,MAAO,gCAIG,kBAA2B;AAAA,EACjC,YACI,MACmB,MACrB;AACE,UAAM,MAAM,IAAI;AAFG;AAAA,EAGvB;AAAA,EAEU,UAA4B;AAClC,WAAO,IAAI,eAAe,KAAK,IAAI;AAAA,EACvC;AAAA,EAEU,UAA4B;AAClC,WAAO,eAAe,YAAY;AAAA,EACtC;AAAA,EAEO,MAAS;AACZ,QAAI,CAAC,aAAa,GAAG;AACjB,YAAM,IAAI,MAAM,YAAY,KAAK,IAAI,gDAAgD;AAAA,IACzF;AAEA,WAAO,MAAM,IAAI;AAAA,EACrB;AACJ;","names":[]}
@@ -10,8 +10,3 @@ import '../../types/helpers.js';
10
10
  import '../../types/message.js';
11
11
  import '../../transport/ProxyTransport.js';
12
12
  import '../../transport/RegisterTransport.js';
13
- import '../ServiceMessage.js';
14
- import '../../transport/TransportMessage.js';
15
- import '../../message/providers/Message.js';
16
- import '../../message/providers/AbstractMessage.js';
17
- import '../../message/MessageManager.js';
@@ -29,7 +29,7 @@ interface MessageProvider<T extends MessageDictionary, TOptions = void> {
29
29
  watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;
30
30
  }
31
31
  interface MessageHandler<T extends MessageDictionary> {
32
- run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined;
32
+ run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined | null;
33
33
  }
34
34
 
35
35
  export { type MessageBody, type MessageData, type MessageDictionary, type MessageGeneralHandler, MessageGlobalKey, type MessageHandler, type MessageMapHandler, type MessageProvider, type MessageResponse, type MessageSender, type MessageSenderAware, MessageSenderProperty, type MessageTargetHandler, type MessageType, MessageTypeSeparator };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/message.ts"],"sourcesContent":["export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport const MessageSenderProperty = \"_sender\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n [MessageSenderProperty]?: MessageSender;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined;\n}\n"],"mappings":"AAAO,MAAM,mBAAmB;AAEzB,MAAM,uBAAuB;AAE7B,MAAM,wBAAwB;","names":[]}
1
+ {"version":3,"sources":["../../src/types/message.ts"],"sourcesContent":["export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport const MessageSenderProperty = \"_sender\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n [MessageSenderProperty]?: MessageSender;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined | null;\n}\n"],"mappings":"AAAO,MAAM,mBAAmB;AAEzB,MAAM,uBAAuB;AAE7B,MAAM,wBAAwB;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "adnbn",
3
3
  "type": "module",
4
- "version": "0.2.7",
4
+ "version": "0.2.9",
5
5
  "description": "Addon 💀 Bone - Cross-browser web extension framework with shared code base",
6
6
  "homepage": "https://github.com/addonbone/addonbone",
7
7
  "repository": {
@@ -123,6 +123,8 @@
123
123
  "@types/lodash": "^4.17.14",
124
124
  "@types/node": "^22.13.1",
125
125
  "@types/pluralize": "^0.0.33",
126
+ "@types/react": "^19.1.10",
127
+ "@types/react-dom": "^19.1.7",
126
128
  "@types/validator": "^13.15.1",
127
129
  "cross-env": "^7.0.3",
128
130
  "depcheck": "^1.4.7",
@@ -170,7 +172,6 @@
170
172
  "tsconfig-paths": "^4.2.0",
171
173
  "type-fest": "^4.37.0",
172
174
  "typescript": "^5.7.3",
173
- "validator": "^13.15.15",
174
175
  "webpack-merge": "^6.0.1",
175
176
  "zod": "^3.24.2"
176
177
  },