adnbn 0.7.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/cli/builders/locale/LocaleStructureValidator.js +7 -0
  2. package/dist/cli/builders/locale/LocaleStructureValidator.js.map +1 -1
  3. package/dist/cli/bundler/plugins/GenerateJsonPlugin.js +3 -7
  4. package/dist/cli/bundler/plugins/GenerateJsonPlugin.js.map +1 -1
  5. package/dist/cli/entrypoint/file/injectors/core.js +9 -1
  6. package/dist/cli/entrypoint/file/injectors/core.js.map +1 -1
  7. package/dist/cli/entrypoint/finder/AbstractAssetFinder.js +22 -11
  8. package/dist/cli/entrypoint/finder/AbstractAssetFinder.js.map +1 -1
  9. package/dist/cli/entrypoint/finder/AbstractEntrypointFinder.js +7 -0
  10. package/dist/cli/entrypoint/finder/AbstractEntrypointFinder.js.map +1 -1
  11. package/dist/cli/entrypoint/finder/AbstractFinder.d.ts +0 -2
  12. package/dist/cli/entrypoint/finder/AbstractFinder.js +5 -25
  13. package/dist/cli/entrypoint/finder/AbstractFinder.js.map +1 -1
  14. package/dist/cli/entrypoint/finder/AbstractViewFinder.js +3 -4
  15. package/dist/cli/entrypoint/finder/AbstractViewFinder.js.map +1 -1
  16. package/dist/cli/entrypoint/finder/AssetPluginFinder.js +14 -1
  17. package/dist/cli/entrypoint/finder/AssetPluginFinder.js.map +1 -1
  18. package/dist/cli/entrypoint/finder/LocaleFinder.d.ts +2 -0
  19. package/dist/cli/entrypoint/finder/LocaleFinder.js +27 -0
  20. package/dist/cli/entrypoint/finder/LocaleFinder.js.map +1 -1
  21. package/dist/cli/entrypoint/finder/PluginFinder.js +12 -3
  22. package/dist/cli/entrypoint/finder/PluginFinder.js.map +1 -1
  23. package/dist/cli/entrypoint/finder/ViewCspFinder.d.ts +2 -0
  24. package/dist/cli/entrypoint/finder/ViewCspFinder.js +13 -6
  25. package/dist/cli/entrypoint/finder/ViewCspFinder.js.map +1 -1
  26. package/dist/cli/entrypoint/finder/utils/filePrecedence.d.ts +35 -0
  27. package/dist/cli/entrypoint/finder/utils/filePrecedence.js +64 -0
  28. package/dist/cli/entrypoint/finder/utils/filePrecedence.js.map +1 -0
  29. package/dist/cli/entrypoint/parser/ContentParser.d.ts +2 -2
  30. package/dist/cli/entrypoint/parser/ContentParser.js.map +1 -1
  31. package/dist/cli/entrypoint/parser/RelayParser.js +2 -1
  32. package/dist/cli/entrypoint/parser/RelayParser.js.map +1 -1
  33. package/dist/cli/index.js +2 -0
  34. package/dist/cli/index.js.map +1 -1
  35. package/dist/cli/plugins/content/ContentDriver.d.ts +21 -8
  36. package/dist/cli/plugins/content/ContentDriver.js +24 -2
  37. package/dist/cli/plugins/content/ContentDriver.js.map +1 -1
  38. package/dist/cli/plugins/content/ContentManager.d.ts +8 -3
  39. package/dist/cli/plugins/content/ContentManager.js +41 -6
  40. package/dist/cli/plugins/content/ContentManager.js.map +1 -1
  41. package/dist/cli/plugins/content/Relay.d.ts +6 -8
  42. package/dist/cli/plugins/content/Relay.js +2 -14
  43. package/dist/cli/plugins/content/Relay.js.map +1 -1
  44. package/dist/cli/plugins/content/RelayDeclaration.d.ts +0 -1
  45. package/dist/cli/plugins/content/RelayDeclaration.js +0 -3
  46. package/dist/cli/plugins/content/RelayDeclaration.js.map +1 -1
  47. package/dist/cli/plugins/content/RelayDriver.d.ts +10 -0
  48. package/dist/cli/plugins/content/RelayDriver.js +39 -0
  49. package/dist/cli/plugins/content/RelayDriver.js.map +1 -0
  50. package/dist/cli/plugins/content/index.js +1 -10
  51. package/dist/cli/plugins/content/index.js.map +1 -1
  52. package/dist/cli/plugins/content/types.d.ts +3 -0
  53. package/dist/cli/plugins/locale/Locale.js +5 -1
  54. package/dist/cli/plugins/locale/Locale.js.map +1 -1
  55. package/dist/cli/plugins/locale/declaration/LocaleDeclaration.js +2 -3
  56. package/dist/cli/plugins/locale/declaration/LocaleDeclaration.js.map +1 -1
  57. package/dist/cli/plugins/locale/declaration/locale.d.ts +3 -124
  58. package/dist/cli/virtual/index.js +2 -2
  59. package/dist/cli/virtual/virtual.d.ts +52 -147
  60. package/dist/entry/relay/index.d.ts +2 -1
  61. package/dist/entry/relay/index.js.map +1 -1
  62. package/dist/locale/adapters/react/LocaleProvider.js +2 -0
  63. package/dist/locale/adapters/react/LocaleProvider.js.map +1 -1
  64. package/dist/locale/adapters/react/context.d.ts +1 -0
  65. package/dist/locale/adapters/react/context.js +3 -2
  66. package/dist/locale/adapters/react/context.js.map +1 -1
  67. package/dist/locale/helpers.js.map +1 -1
  68. package/dist/locale/providers/AbstractLocale.d.ts +2 -0
  69. package/dist/locale/providers/AbstractLocale.js +5 -0
  70. package/dist/locale/providers/AbstractLocale.js.map +1 -1
  71. package/dist/locale/providers/NativeLocale.d.ts +3 -2
  72. package/dist/locale/providers/NativeLocale.js +1 -1
  73. package/dist/locale/providers/NativeLocale.js.map +1 -1
  74. package/dist/main/relay.d.ts +7 -6
  75. package/dist/main/relay.js +12 -5
  76. package/dist/main/relay.js.map +1 -1
  77. package/dist/message/error.d.ts +6 -0
  78. package/dist/message/error.js +21 -0
  79. package/dist/message/error.js.map +1 -1
  80. package/dist/message/index.d.ts +2 -1
  81. package/dist/message/index.js +2 -0
  82. package/dist/message/index.js.map +1 -1
  83. package/dist/message/providers/Message.d.ts +3 -0
  84. package/dist/message/providers/Message.js +36 -6
  85. package/dist/message/providers/Message.js.map +1 -1
  86. package/dist/offscreen/providers/ProxyOffscreen.d.ts +2 -2
  87. package/dist/offscreen/providers/ProxyOffscreen.js.map +1 -1
  88. package/dist/relay/RelayPermission.d.ts +6 -3
  89. package/dist/relay/RelayPermission.js +28 -12
  90. package/dist/relay/RelayPermission.js.map +1 -1
  91. package/dist/relay/adapters/RelayAdapter.d.ts +8 -0
  92. package/dist/relay/adapters/RelayAdapter.js +16 -0
  93. package/dist/relay/adapters/RelayAdapter.js.map +1 -0
  94. package/dist/relay/adapters/RelayMessagingAdapter.d.ts +11 -0
  95. package/dist/relay/adapters/RelayMessagingAdapter.js +91 -0
  96. package/dist/relay/adapters/RelayMessagingAdapter.js.map +1 -0
  97. package/dist/relay/adapters/RelayScriptingAdapter.d.ts +15 -0
  98. package/dist/relay/adapters/RelayScriptingAdapter.js +170 -0
  99. package/dist/relay/adapters/RelayScriptingAdapter.js.map +1 -0
  100. package/dist/relay/discovery/RelayDiscovery.d.ts +10 -0
  101. package/dist/relay/discovery/RelayDiscovery.js +62 -0
  102. package/dist/relay/discovery/RelayDiscovery.js.map +1 -0
  103. package/dist/relay/index.d.ts +1 -4
  104. package/dist/relay/index.js +1 -3
  105. package/dist/relay/index.js.map +1 -1
  106. package/dist/relay/providers/ProxyRelay.d.ts +20 -17
  107. package/dist/relay/providers/ProxyRelay.js +79 -52
  108. package/dist/relay/providers/ProxyRelay.js.map +1 -1
  109. package/dist/relay/providers/RegisterRelay.js +1 -2
  110. package/dist/relay/providers/RegisterRelay.js.map +1 -1
  111. package/dist/relay/result.d.ts +12 -0
  112. package/dist/relay/result.js +88 -0
  113. package/dist/relay/result.js.map +1 -0
  114. package/dist/sandbox/index.d.ts +2 -2
  115. package/dist/sandbox/index.js.map +1 -1
  116. package/dist/sandbox/providers/ProxySandbox.d.ts +2 -2
  117. package/dist/sandbox/providers/ProxySandbox.js.map +1 -1
  118. package/dist/service/providers/ProxyService.d.ts +2 -2
  119. package/dist/service/providers/ProxyService.js.map +1 -1
  120. package/dist/transport/ProxyTransport.d.ts +2 -2
  121. package/dist/transport/ProxyTransport.js.map +1 -1
  122. package/dist/transport/index.d.ts +3 -2
  123. package/dist/types/config.d.ts +8 -0
  124. package/dist/types/helpers.d.ts +0 -4
  125. package/dist/types/locale.d.ts +3 -0
  126. package/dist/types/locale.js +58 -0
  127. package/dist/types/locale.js.map +1 -1
  128. package/dist/types/relay.d.ts +130 -3
  129. package/dist/types/relay.js +16 -0
  130. package/dist/types/relay.js.map +1 -1
  131. package/dist/types/rpc.d.ts +4 -0
  132. package/dist/types/rpc.js +1 -0
  133. package/dist/types/rpc.js.map +1 -0
  134. package/dist/types/transport.d.ts +3 -2
  135. package/package.json +5 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/plugins/content/ContentManager.ts"],"sourcesContent":["import ContentName from \"./ContentName\";\n\nimport {ContentGroupItems, ContentProvider} from \"./types\";\nimport {getContentScriptConfigFromOptions} from \"./utils\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\nimport {ContentScriptDeclarative, ContentScriptEntrypointOptions} from \"@typing/content\";\nimport {EntrypointEntries, EntrypointFile, EntrypointType} from \"@typing/entrypoint\";\nimport {ManifestContentScripts, ManifestHostPermissions} from \"@typing/manifest\";\n\nexport default class {\n protected readonly providers = new Set<ContentProvider<ContentScriptEntrypointOptions>>();\n\n protected readonly names: ContentName;\n\n protected _group?: ContentGroupItems<ContentScriptEntrypointOptions>;\n\n protected _permissions?: [ManifestHostPermissions, ManifestHostPermissions];\n\n constructor(config: ReadonlyConfig) {\n this.names = new ContentName(config);\n }\n\n public provider(provider: ContentProvider<ContentScriptEntrypointOptions>): this {\n this.providers.add(provider);\n\n return this;\n }\n\n protected async getGroup(): Promise<ContentGroupItems<ContentScriptEntrypointOptions>> {\n const content = await Promise.all(Array.from(this.providers, provider => provider.driver().items()));\n\n const group: ContentGroupItems<ContentScriptEntrypointOptions> = new Map();\n\n for (const items of content) {\n for (const [name, item] of items) {\n const entry = this.names.create(name, item.options);\n\n group.set(entry, new Set([...(group.get(entry) || []), item]));\n }\n }\n\n return group;\n }\n\n public async group(): Promise<ContentGroupItems<ContentScriptEntrypointOptions>> {\n return (this._group ??= await this.getGroup());\n }\n\n public async entries(): Promise<EntrypointEntries> {\n const entries: EntrypointEntries = new Map();\n\n for (const [entry, items] of await this.group()) {\n entries.set(entry, new Set(Array.from(items, ({file}) => file)));\n }\n\n return entries;\n }\n\n public async manifest(): Promise<ManifestContentScripts> {\n const manifest: ManifestContentScripts = new Set();\n\n for (const [entry, items] of await this.group()) {\n const options = Array.from(items, ({options}) => options).reduce((acc, opt) => {\n return {...acc, ...opt};\n }, {} as ContentScriptEntrypointOptions);\n\n manifest.add({entry, ...getContentScriptConfigFromOptions(options)});\n }\n\n return manifest;\n }\n\n public async hostPermissions(): Promise<ManifestHostPermissions> {\n return (await this.calculatePermissions())[0];\n }\n\n public async optionalHostPermissions(): Promise<ManifestHostPermissions> {\n return (await this.calculatePermissions())[1];\n }\n\n protected async calculatePermissions(): Promise<[ManifestHostPermissions, ManifestHostPermissions]> {\n if (this._permissions) {\n return this._permissions;\n }\n\n const hostPermissions = new Set<string>();\n const optionalHostPermissions = new Set<string>();\n\n const group = await this.group();\n\n for (const items of group.values()) {\n for (const {options} of items) {\n const {matches, declarative} = options;\n\n if (!declarative || !matches) {\n continue;\n }\n\n for (const match of matches) {\n switch (declarative) {\n case ContentScriptDeclarative.Optional:\n optionalHostPermissions.add(match);\n\n break;\n case ContentScriptDeclarative.Required:\n case true:\n hostPermissions.add(match);\n\n break;\n }\n }\n }\n }\n\n return (this._permissions = [hostPermissions, optionalHostPermissions]);\n }\n\n public virtual(file: EntrypointFile): string {\n for (const provider of this.providers) {\n try {\n return provider.virtual(file);\n } catch {}\n }\n\n throw new Error(`Virtual file \"${file.file}\" not found.`);\n }\n\n public async empty(): Promise<boolean> {\n return (await this.group()).size === 0;\n }\n\n public chunkName(): string {\n return this.names.getChunkName();\n }\n\n public likely(name?: string): boolean {\n if (!name) {\n return false;\n }\n\n return [EntrypointType.Relay, EntrypointType.ContentScript].some(\n type => name === type || name.endsWith(`.${type}`)\n );\n }\n\n public clear(): this {\n for (const provider of this.providers) {\n provider.clear();\n }\n\n this.names.reset();\n\n this._group = undefined;\n this._permissions = undefined;\n\n return this;\n }\n}\n"],"mappings":"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","names":["options"]}
1
+ {"version":3,"sources":["../../../../src/cli/plugins/content/ContentManager.ts"],"sourcesContent":["import ContentName from \"./ContentName\";\n\nimport {ContentGroupItems, ContentProvider} from \"./types\";\nimport {getContentScriptConfigFromOptions} from \"./utils\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\nimport {ContentScriptDeclarative, ContentScriptEntrypointOptions} from \"@typing/content\";\nimport {EntrypointEntries, EntrypointFile, EntrypointType} from \"@typing/entrypoint\";\nimport {\n ManifestContentScripts,\n ManifestHostPermissions,\n ManifestOptionalPermissions,\n ManifestPermissions,\n} from \"@typing/manifest\";\n\nexport default class {\n protected readonly providers = new Set<ContentProvider<ContentScriptEntrypointOptions>>();\n\n protected readonly names: ContentName;\n\n protected _group?: ContentGroupItems<ContentScriptEntrypointOptions>;\n\n protected _hostPermissions?: [ManifestHostPermissions, ManifestHostPermissions];\n\n protected _permissions?: Promise<[ManifestPermissions, ManifestOptionalPermissions]>;\n\n constructor(config: ReadonlyConfig) {\n this.names = new ContentName(config);\n }\n\n public provider(provider: ContentProvider<ContentScriptEntrypointOptions>): this {\n this.providers.add(provider);\n\n return this;\n }\n\n protected async getGroup(): Promise<ContentGroupItems<ContentScriptEntrypointOptions>> {\n const content = await Promise.all(Array.from(this.providers, provider => provider.driver().items()));\n\n const group: ContentGroupItems<ContentScriptEntrypointOptions> = new Map();\n\n for (const items of content) {\n for (const [name, item] of items) {\n const entry = this.names.create(name, item.options);\n\n group.set(entry, new Set([...(group.get(entry) || []), item]));\n }\n }\n\n return group;\n }\n\n public async group(): Promise<ContentGroupItems<ContentScriptEntrypointOptions>> {\n return (this._group ??= await this.getGroup());\n }\n\n public async entries(): Promise<EntrypointEntries> {\n const entries: EntrypointEntries = new Map();\n\n for (const [entry, items] of await this.group()) {\n entries.set(entry, new Set(Array.from(items, ({file}) => file)));\n }\n\n return entries;\n }\n\n public async manifest(): Promise<ManifestContentScripts> {\n const manifest: ManifestContentScripts = new Set();\n\n for (const [entry, items] of await this.group()) {\n const options = Array.from(items, ({options}) => options).reduce((acc, opt) => {\n return {...acc, ...opt};\n }, {} as ContentScriptEntrypointOptions);\n\n manifest.add({entry, ...getContentScriptConfigFromOptions(options)});\n }\n\n return manifest;\n }\n\n public async hostPermissions(): Promise<ManifestHostPermissions> {\n return (await this.calculateHostPermissions())[0];\n }\n\n public async optionalHostPermissions(): Promise<ManifestHostPermissions> {\n return (await this.calculateHostPermissions())[1];\n }\n\n protected async calculateHostPermissions(): Promise<[ManifestHostPermissions, ManifestHostPermissions]> {\n if (this._hostPermissions) {\n return this._hostPermissions;\n }\n\n const hostPermissions = new Set<string>();\n const optionalHostPermissions = new Set<string>();\n\n const group = await this.group();\n\n for (const items of group.values()) {\n for (const {options} of items) {\n const {matches, declarative} = options;\n\n if (!declarative || !matches) {\n continue;\n }\n\n for (const match of matches) {\n switch (declarative) {\n case ContentScriptDeclarative.Optional:\n optionalHostPermissions.add(match);\n\n break;\n case ContentScriptDeclarative.Required:\n case true:\n hostPermissions.add(match);\n\n break;\n }\n }\n }\n }\n\n return (this._hostPermissions = [hostPermissions, optionalHostPermissions]);\n }\n\n public async permissions(): Promise<ManifestPermissions> {\n return (await this.getPermissions())[0];\n }\n\n public async optionalPermissions(): Promise<ManifestOptionalPermissions> {\n return (await this.getPermissions())[1];\n }\n\n protected getPermissions(): Promise<[ManifestPermissions, ManifestOptionalPermissions]> {\n return (this._permissions ??= this.calculatePermissions());\n }\n\n protected async calculatePermissions(): Promise<[ManifestPermissions, ManifestOptionalPermissions]> {\n const permissions: ManifestPermissions = new Set();\n const optionalPermissions: ManifestOptionalPermissions = new Set();\n\n const contributions = await Promise.all(\n Array.from(this.providers, async provider => {\n const driver = provider.driver();\n\n return Promise.all([driver.permissions(), driver.optionalPermissions()]);\n })\n );\n\n for (const [required, optional] of contributions) {\n for (const permission of required) {\n permissions.add(permission);\n }\n\n for (const permission of optional) {\n optionalPermissions.add(permission);\n }\n }\n\n for (const permission of optionalPermissions) {\n if (permissions.has(permission)) {\n optionalPermissions.delete(permission);\n }\n }\n\n return [permissions, optionalPermissions];\n }\n\n public virtual(file: EntrypointFile): string {\n for (const provider of this.providers) {\n try {\n return provider.virtual(file);\n } catch {}\n }\n\n throw new Error(`Virtual file \"${file.file}\" not found.`);\n }\n\n public async empty(): Promise<boolean> {\n return (await this.group()).size === 0;\n }\n\n public chunkName(): string {\n return this.names.getChunkName();\n }\n\n public likely(name?: string): boolean {\n if (!name) {\n return false;\n }\n\n return [EntrypointType.Relay, EntrypointType.ContentScript].some(\n type => name === type || name.endsWith(`.${type}`)\n );\n }\n\n public clear(): this {\n for (const provider of this.providers) {\n provider.clear();\n }\n\n this.names.reset();\n\n this._group = undefined;\n this._hostPermissions = undefined;\n this._permissions = undefined;\n\n return this;\n }\n}\n"],"mappings":"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","names":["options"]}
@@ -1,19 +1,17 @@
1
- import ContentDriver from "./ContentDriver.js";
1
+ import RelayDriver from "./RelayDriver.js";
2
2
  import { ContentProvider } from "./types.js";
3
3
  import { RelayFinder } from "../../entrypoint/index.js";
4
- import { RelayEntrypointOptions, RelayMethod, RelayOptions } from "../../../types/relay.js";
5
- import { ContentScriptDeclarative } from "../../../types/content.js";
4
+ import { RelayOptions } from "../../../types/relay.js";
5
+ import { ContentScriptEntrypointOptions } from "../../../types/content.js";
6
6
  import { EntrypointFile } from "../../../types/entrypoint.js";
7
- export default class extends RelayFinder implements ContentProvider<RelayEntrypointOptions> {
8
- protected _driver?: ContentDriver<RelayEntrypointOptions>;
9
- driver(): ContentDriver<RelayEntrypointOptions>;
7
+ export default class extends RelayFinder implements ContentProvider<ContentScriptEntrypointOptions> {
8
+ protected _driver?: RelayDriver;
9
+ driver(): RelayDriver;
10
10
  /**
11
11
  * Before creating the virtual module, it is necessary to run a command `await this.transport()` that caches the Relays.
12
12
  * This command is executed during the type declaration generation stage for the Relays.
13
13
  */
14
14
  virtual(file: EntrypointFile): string;
15
15
  getOptionsMap(): Promise<Record<string, RelayOptions>>;
16
- hasMethod(method: RelayMethod): Promise<boolean>;
17
- hasDeclarative(declarative: ContentScriptDeclarative): Promise<boolean>;
18
16
  clear(): this;
19
17
  }
@@ -1,12 +1,11 @@
1
- import ContentDriver from "./ContentDriver.js";
1
+ import RelayDriver from "./RelayDriver.js";
2
2
  import { RelayFinder } from "./../../../cli/entrypoint/index.js";
3
3
  import { virtualRelayModule } from "./../../../cli/virtual/index.js";
4
4
  import { RelayMethod } from "./../../../types/relay.js";
5
- import { ContentScriptDeclarative } from "./../../../types/content.js";
6
5
  class Relay_default extends RelayFinder {
7
6
  _driver;
8
7
  driver() {
9
- return this._driver ?? (this._driver = new ContentDriver(this));
8
+ return this._driver ?? (this._driver = new RelayDriver(this));
10
9
  }
11
10
  /**
12
11
  * Before creating the virtual module, it is necessary to run a command `await this.transport()` that caches the Relays.
@@ -33,17 +32,6 @@ class Relay_default extends RelayFinder {
33
32
  {}
34
33
  );
35
34
  }
36
- async hasMethod(method) {
37
- return Object.values(await this.getOptionsMap()).map(({ method: method2 }) => method2).includes(method);
38
- }
39
- async hasDeclarative(declarative) {
40
- return !!Object.values(await this.getOptionsMap()).filter((options) => {
41
- if (declarative === ContentScriptDeclarative.Required && options.declarative === true) {
42
- return true;
43
- }
44
- return declarative === options.declarative;
45
- }).length;
46
- }
47
35
  clear() {
48
36
  var _a;
49
37
  (_a = this._driver) == null ? void 0 : _a.clear();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/plugins/content/Relay.ts"],"sourcesContent":["import ContentDriver from \"./ContentDriver\";\n\nimport {ContentProvider} from \"./types\";\n\nimport {RelayFinder} from \"@cli/entrypoint/index.js\";\nimport {virtualRelayModule} from \"@cli/virtual/index.js\";\n\nimport {RelayEntrypointOptions, RelayMethod, RelayOptions} from \"@typing/relay\";\nimport {ContentScriptDeclarative} from \"@typing/content\";\nimport {EntrypointFile} from \"@typing/entrypoint\";\n\nexport default class extends RelayFinder implements ContentProvider<RelayEntrypointOptions> {\n protected _driver?: ContentDriver<RelayEntrypointOptions>;\n\n public driver(): ContentDriver<RelayEntrypointOptions> {\n return (this._driver ??= new ContentDriver(this));\n }\n\n /**\n * Before creating the virtual module, it is necessary to run a command `await this.transport()` that caches the Relays.\n * This command is executed during the type declaration generation stage for the Relays.\n */\n public virtual(file: EntrypointFile): string {\n const options = this._transport?.get(file)?.options;\n\n if (!options) {\n throw new Error(`Relay options not found for \"${file}\"`);\n }\n\n return virtualRelayModule(file, options.name);\n }\n\n public async getOptionsMap(): Promise<Record<string, RelayOptions>> {\n const transport = await this.transport();\n\n return Array.from(transport.values()).reduce(\n (map, {options}) => {\n map[options.name] = {\n ...options,\n method: options.method || RelayMethod.Messaging,\n };\n\n return map;\n },\n {} as Record<string, RelayOptions>\n );\n }\n\n public async hasMethod(method: RelayMethod): Promise<boolean> {\n return Object.values(await this.getOptionsMap())\n .map(({method}) => method)\n .includes(method);\n }\n\n public async hasDeclarative(declarative: ContentScriptDeclarative): Promise<boolean> {\n return !!Object.values(await this.getOptionsMap()).filter(options => {\n if (declarative === ContentScriptDeclarative.Required && options.declarative === true) {\n return true;\n }\n return declarative === options.declarative;\n }).length;\n }\n\n public clear(): this {\n this._driver?.clear();\n\n return super.clear();\n }\n}\n"],"mappings":"AAAA,OAAO,mBAAmB;AAI1B,SAAQ,mBAAkB;AAC1B,SAAQ,0BAAyB;AAEjC,SAAgC,mBAAgC;AAChE,SAAQ,gCAA+B;AAGvC,MAAO,sBAAsB,YAA+D;AAAA,EAC9E;AAAA,EAEH,SAAgD;AACnD,WAAQ,KAAK,YAAL,KAAK,UAAY,IAAI,cAAc,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,QAAQ,MAA8B;AAtBjD;AAuBQ,UAAM,WAAU,gBAAK,eAAL,mBAAiB,IAAI,UAArB,mBAA4B;AAE5C,QAAI,CAAC,SAAS;AACV,YAAM,IAAI,MAAM,gCAAgC,IAAI,GAAG;AAAA,IAC3D;AAEA,WAAO,mBAAmB,MAAM,QAAQ,IAAI;AAAA,EAChD;AAAA,EAEA,MAAa,gBAAuD;AAChE,UAAM,YAAY,MAAM,KAAK,UAAU;AAEvC,WAAO,MAAM,KAAK,UAAU,OAAO,CAAC,EAAE;AAAA,MAClC,CAAC,KAAK,EAAC,QAAO,MAAM;AAChB,YAAI,QAAQ,IAAI,IAAI;AAAA,UAChB,GAAG;AAAA,UACH,QAAQ,QAAQ,UAAU,YAAY;AAAA,QAC1C;AAEA,eAAO;AAAA,MACX;AAAA,MACA,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEA,MAAa,UAAU,QAAuC;AAC1D,WAAO,OAAO,OAAO,MAAM,KAAK,cAAc,CAAC,EAC1C,IAAI,CAAC,EAAC,QAAAA,QAAM,MAAMA,OAAM,EACxB,SAAS,MAAM;AAAA,EACxB;AAAA,EAEA,MAAa,eAAe,aAAyD;AACjF,WAAO,CAAC,CAAC,OAAO,OAAO,MAAM,KAAK,cAAc,CAAC,EAAE,OAAO,aAAW;AACjE,UAAI,gBAAgB,yBAAyB,YAAY,QAAQ,gBAAgB,MAAM;AACnF,eAAO;AAAA,MACX;AACA,aAAO,gBAAgB,QAAQ;AAAA,IACnC,CAAC,EAAE;AAAA,EACP;AAAA,EAEO,QAAc;AA/DzB;AAgEQ,eAAK,YAAL,mBAAc;AAEd,WAAO,MAAM,MAAM;AAAA,EACvB;AACJ;","names":["method"]}
1
+ {"version":3,"sources":["../../../../src/cli/plugins/content/Relay.ts"],"sourcesContent":["import RelayDriver from \"./RelayDriver\";\n\nimport {ContentProvider} from \"./types\";\n\nimport {RelayFinder} from \"@cli/entrypoint/index.js\";\nimport {virtualRelayModule} from \"@cli/virtual/index.js\";\n\nimport {RelayMethod, RelayOptions} from \"@typing/relay\";\nimport {ContentScriptEntrypointOptions} from \"@typing/content\";\nimport {EntrypointFile} from \"@typing/entrypoint\";\n\nexport default class extends RelayFinder implements ContentProvider<ContentScriptEntrypointOptions> {\n protected _driver?: RelayDriver;\n\n public driver(): RelayDriver {\n return (this._driver ??= new RelayDriver(this));\n }\n\n /**\n * Before creating the virtual module, it is necessary to run a command `await this.transport()` that caches the Relays.\n * This command is executed during the type declaration generation stage for the Relays.\n */\n public virtual(file: EntrypointFile): string {\n const options = this._transport?.get(file)?.options;\n\n if (!options) {\n throw new Error(`Relay options not found for \"${file}\"`);\n }\n\n return virtualRelayModule(file, options.name);\n }\n\n public async getOptionsMap(): Promise<Record<string, RelayOptions>> {\n const transport = await this.transport();\n\n return Array.from(transport.values()).reduce(\n (map, {options}) => {\n map[options.name] = {\n ...options,\n method: options.method || RelayMethod.Messaging,\n };\n\n return map;\n },\n {} as Record<string, RelayOptions>\n );\n }\n\n public clear(): this {\n this._driver?.clear();\n\n return super.clear();\n }\n}\n"],"mappings":"AAAA,OAAO,iBAAiB;AAIxB,SAAQ,mBAAkB;AAC1B,SAAQ,0BAAyB;AAEjC,SAAQ,mBAAgC;AAIxC,MAAO,sBAAsB,YAAuE;AAAA,EACtF;AAAA,EAEH,SAAsB;AACzB,WAAQ,KAAK,YAAL,KAAK,UAAY,IAAI,YAAY,IAAI;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,QAAQ,MAA8B;AAtBjD;AAuBQ,UAAM,WAAU,gBAAK,eAAL,mBAAiB,IAAI,UAArB,mBAA4B;AAE5C,QAAI,CAAC,SAAS;AACV,YAAM,IAAI,MAAM,gCAAgC,IAAI,GAAG;AAAA,IAC3D;AAEA,WAAO,mBAAmB,MAAM,QAAQ,IAAI;AAAA,EAChD;AAAA,EAEA,MAAa,gBAAuD;AAChE,UAAM,YAAY,MAAM,KAAK,UAAU;AAEvC,WAAO,MAAM,KAAK,UAAU,OAAO,CAAC,EAAE;AAAA,MAClC,CAAC,KAAK,EAAC,QAAO,MAAM;AAChB,YAAI,QAAQ,IAAI,IAAI;AAAA,UAChB,GAAG;AAAA,UACH,QAAQ,QAAQ,UAAU,YAAY;AAAA,QAC1C;AAEA,eAAO;AAAA,MACX;AAAA,MACA,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAEO,QAAc;AAhDzB;AAiDQ,eAAK,YAAL,mBAAc;AAEd,WAAO,MAAM,MAAM;AAAA,EACvB;AACJ;","names":[]}
@@ -2,5 +2,4 @@ import { TransportDeclaration } from "../typescript/index.js";
2
2
  import { ReadonlyConfig } from "../../../types/config.js";
3
3
  export default class extends TransportDeclaration {
4
4
  constructor(config: ReadonlyConfig);
5
- protected template(): string;
6
5
  }
@@ -3,9 +3,6 @@ class RelayDeclaration_default extends TransportDeclaration {
3
3
  constructor(config) {
4
4
  super(config, TransportDeclarationLayer.Relay);
5
5
  }
6
- template() {
7
- return super.template().replace("RelayProxyTarget, RelayTarget", "RelayProxyTarget, RelayTarget, ProxyRelayParams").replace("(name: N): RelayProxyTarget", "(name: N, params: ProxyRelayParams): RelayProxyTarget");
8
- }
9
6
  }
10
7
  export {
11
8
  RelayDeclaration_default as default
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/plugins/content/RelayDeclaration.ts"],"sourcesContent":["import {TransportDeclaration, TransportDeclarationLayer} from \"../typescript\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\n\nexport default class extends TransportDeclaration {\n constructor(config: ReadonlyConfig) {\n super(config, TransportDeclarationLayer.Relay);\n }\n\n protected template(): string {\n return super\n .template()\n .replace(\"RelayProxyTarget, RelayTarget\", \"RelayProxyTarget, RelayTarget, ProxyRelayParams\")\n .replace(\"(name: N): RelayProxyTarget\", \"(name: N, params: ProxyRelayParams): RelayProxyTarget\");\n }\n}\n"],"mappings":"AAAA,SAAQ,sBAAsB,iCAAgC;AAI9D,MAAO,iCAAsB,qBAAqB;AAAA,EAC9C,YAAY,QAAwB;AAChC,UAAM,QAAQ,0BAA0B,KAAK;AAAA,EACjD;AAAA,EAEU,WAAmB;AACzB,WAAO,MACF,SAAS,EACT,QAAQ,iCAAiC,iDAAiD,EAC1F,QAAQ,+BAA+B,uDAAuD;AAAA,EACvG;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/cli/plugins/content/RelayDeclaration.ts"],"sourcesContent":["import {TransportDeclaration, TransportDeclarationLayer} from \"../typescript\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\n\nexport default class extends TransportDeclaration {\n constructor(config: ReadonlyConfig) {\n super(config, TransportDeclarationLayer.Relay);\n }\n}\n"],"mappings":"AAAA,SAAQ,sBAAsB,iCAAgC;AAI9D,MAAO,iCAAsB,qBAAqB;AAAA,EAC9C,YAAY,QAAwB;AAChC,UAAM,QAAQ,0BAA0B,KAAK;AAAA,EACjD;AACJ;","names":[]}
@@ -0,0 +1,10 @@
1
+ import ContentDriver from "./ContentDriver.js";
2
+ import RelayFinder from "../../entrypoint/finder/RelayFinder.js";
3
+ import { type ContentScriptEntrypointOptions } from "../../../types/content.js";
4
+ import { type RelayEntrypointOptions } from "../../../types/relay.js";
5
+ import type { ManifestOptionalPermissions, ManifestPermissions } from "../../../types/manifest.js";
6
+ export default class extends ContentDriver<ContentScriptEntrypointOptions, RelayEntrypointOptions> {
7
+ constructor(finder: RelayFinder);
8
+ protected transform(relayOptions: RelayEntrypointOptions): ContentScriptEntrypointOptions;
9
+ protected calculatePermissions(): Promise<[ManifestPermissions, ManifestOptionalPermissions]>;
10
+ }
@@ -0,0 +1,39 @@
1
+ import ContentDriver from "./ContentDriver.js";
2
+ import { ContentScriptDeclarative } from "./../../../types/content.js";
3
+ import { RelayAllFrames, RelayMethod } from "./../../../types/relay.js";
4
+ class RelayDriver_default extends ContentDriver {
5
+ constructor(finder) {
6
+ super(finder);
7
+ }
8
+ transform(relayOptions) {
9
+ const { allFrames, method: _method, name: _name, ...options } = relayOptions;
10
+ return {
11
+ ...options,
12
+ ...allFrames === void 0 ? {} : { allFrames: allFrames !== false }
13
+ };
14
+ }
15
+ async calculatePermissions() {
16
+ const permissions = /* @__PURE__ */ new Set();
17
+ const optionalPermissions = /* @__PURE__ */ new Set();
18
+ const relays = Array.from((await this.getOptions()).values());
19
+ if (relays.some(
20
+ (options) => (options.method ?? RelayMethod.Messaging) === RelayMethod.Messaging && options.allFrames === RelayAllFrames.All
21
+ )) {
22
+ permissions.add("webNavigation");
23
+ }
24
+ if (relays.some(
25
+ (options) => options.method === RelayMethod.Scripting && (options.declarative === true || options.declarative === ContentScriptDeclarative.Required)
26
+ )) {
27
+ permissions.add("scripting");
28
+ } else if (relays.some(
29
+ (options) => options.method === RelayMethod.Scripting && options.declarative === ContentScriptDeclarative.Optional
30
+ )) {
31
+ optionalPermissions.add("scripting");
32
+ }
33
+ return [permissions, optionalPermissions];
34
+ }
35
+ }
36
+ export {
37
+ RelayDriver_default as default
38
+ };
39
+ //# sourceMappingURL=RelayDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/cli/plugins/content/RelayDriver.ts"],"sourcesContent":["import ContentDriver from \"./ContentDriver\";\n\nimport RelayFinder from \"@cli/entrypoint/finder/RelayFinder\";\n\nimport {ContentScriptDeclarative, type ContentScriptEntrypointOptions} from \"@typing/content\";\nimport {RelayAllFrames, type RelayEntrypointOptions, RelayMethod} from \"@typing/relay\";\nimport type {ManifestOptionalPermissions, ManifestPermissions} from \"@typing/manifest\";\n\nexport default class extends ContentDriver<ContentScriptEntrypointOptions, RelayEntrypointOptions> {\n public constructor(finder: RelayFinder) {\n super(finder);\n }\n\n protected transform(relayOptions: RelayEntrypointOptions): ContentScriptEntrypointOptions {\n const {allFrames, method: _method, name: _name, ...options} = relayOptions;\n\n return {\n ...options,\n ...(allFrames === undefined ? {} : {allFrames: allFrames !== false}),\n };\n }\n\n protected async calculatePermissions(): Promise<[ManifestPermissions, ManifestOptionalPermissions]> {\n const permissions: ManifestPermissions = new Set();\n const optionalPermissions: ManifestOptionalPermissions = new Set();\n const relays = Array.from((await this.getOptions()).values());\n\n if (\n relays.some(\n options =>\n (options.method ?? RelayMethod.Messaging) === RelayMethod.Messaging &&\n options.allFrames === RelayAllFrames.All\n )\n ) {\n permissions.add(\"webNavigation\");\n }\n\n if (\n relays.some(\n options =>\n options.method === RelayMethod.Scripting &&\n (options.declarative === true || options.declarative === ContentScriptDeclarative.Required)\n )\n ) {\n permissions.add(\"scripting\");\n } else if (\n relays.some(\n options =>\n options.method === RelayMethod.Scripting &&\n options.declarative === ContentScriptDeclarative.Optional\n )\n ) {\n optionalPermissions.add(\"scripting\");\n }\n\n return [permissions, optionalPermissions];\n }\n}\n"],"mappings":"AAAA,OAAO,mBAAmB;AAI1B,SAAQ,gCAAoE;AAC5E,SAAQ,gBAA6C,mBAAkB;AAGvE,MAAO,4BAAsB,cAAsE;AAAA,EACxF,YAAY,QAAqB;AACpC,UAAM,MAAM;AAAA,EAChB;AAAA,EAEU,UAAU,cAAsE;AACtF,UAAM,EAAC,WAAW,QAAQ,SAAS,MAAM,OAAO,GAAG,QAAO,IAAI;AAE9D,WAAO;AAAA,MACH,GAAG;AAAA,MACH,GAAI,cAAc,SAAY,CAAC,IAAI,EAAC,WAAW,cAAc,MAAK;AAAA,IACtE;AAAA,EACJ;AAAA,EAEA,MAAgB,uBAAoF;AAChG,UAAM,cAAmC,oBAAI,IAAI;AACjD,UAAM,sBAAmD,oBAAI,IAAI;AACjE,UAAM,SAAS,MAAM,MAAM,MAAM,KAAK,WAAW,GAAG,OAAO,CAAC;AAE5D,QACI,OAAO;AAAA,MACH,cACK,QAAQ,UAAU,YAAY,eAAe,YAAY,aAC1D,QAAQ,cAAc,eAAe;AAAA,IAC7C,GACF;AACE,kBAAY,IAAI,eAAe;AAAA,IACnC;AAEA,QACI,OAAO;AAAA,MACH,aACI,QAAQ,WAAW,YAAY,cAC9B,QAAQ,gBAAgB,QAAQ,QAAQ,gBAAgB,yBAAyB;AAAA,IAC1F,GACF;AACE,kBAAY,IAAI,WAAW;AAAA,IAC/B,WACI,OAAO;AAAA,MACH,aACI,QAAQ,WAAW,YAAY,aAC/B,QAAQ,gBAAgB,yBAAyB;AAAA,IACzD,GACF;AACE,0BAAoB,IAAI,WAAW;AAAA,IACvC;AAEA,WAAO,CAAC,aAAa,mBAAmB;AAAA,EAC5C;AACJ;","names":[]}
@@ -8,8 +8,6 @@ import { definePlugin } from "./../../../main/plugin.js";
8
8
  import { EntrypointPlugin, onlyViaTopLevelEntry } from "./../../../cli/bundler/index.js";
9
9
  import { getResolvePath, getSourcePath } from "./../../../cli/resolvers/path.js";
10
10
  import { Command } from "./../../../types/app.js";
11
- import { RelayMethod } from "./../../../types/relay.js";
12
- import { ContentScriptDeclarative } from "./../../../types/content.js";
13
11
  var content_default = definePlugin(() => {
14
12
  let content;
15
13
  let relay;
@@ -83,14 +81,7 @@ var content_default = definePlugin(() => {
83
81
  });
84
82
  },
85
83
  manifest: async ({ manifest }) => {
86
- manifest.setContentScripts(await manager.manifest()).appendHostPermissions(await manager.hostPermissions()).appendOptionalHostPermissions(await manager.optionalHostPermissions());
87
- if (await relay.exists() && await relay.hasMethod(RelayMethod.Scripting)) {
88
- if (await relay.hasDeclarative(ContentScriptDeclarative.Required)) {
89
- manifest.addPermission("scripting");
90
- } else if (await relay.hasDeclarative(ContentScriptDeclarative.Optional)) {
91
- manifest.addOptionalPermission("scripting");
92
- }
93
- }
84
+ manifest.setContentScripts(await manager.manifest()).appendHostPermissions(await manager.hostPermissions()).appendOptionalHostPermissions(await manager.optionalHostPermissions()).appendPermissions(await manager.permissions()).appendOptionalPermissions(await manager.optionalPermissions());
94
85
  }
95
86
  };
96
87
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/plugins/content/index.ts"],"sourcesContent":["import {Configuration as RspackConfig, DefinePlugin, NormalModule} from \"@rspack/core\";\nimport {merge as mergeConfig} from \"webpack-merge\";\n\nimport ContentManager from \"./ContentManager\";\nimport Content from \"./Content\";\nimport Relay from \"./Relay\";\nimport RelayDeclaration from \"./RelayDeclaration\";\n\nimport {definePlugin} from \"@main/plugin\";\n\nimport {EntrypointPlugin, onlyViaTopLevelEntry} from \"@cli/bundler\";\nimport {getResolvePath, getSourcePath} from \"@cli/resolvers/path\";\n\nimport {Command} from \"@typing/app\";\nimport {RelayMethod, RelayOptions} from \"@typing/relay\";\nimport {ContentScriptDeclarative} from \"@typing/content\";\n\nexport default definePlugin(() => {\n let content: Content;\n let relay: Relay;\n let manager: ContentManager;\n let relayDeclaration: RelayDeclaration;\n\n return {\n name: \"adnbn:content\",\n startup: async ({config}) => {\n content = new Content(config);\n relay = new Relay(config);\n\n // prettier-ignore\n manager = new ContentManager(config)\n .provider(content)\n .provider(relay);\n\n relayDeclaration = new RelayDeclaration(config);\n },\n content: () => content.files(),\n relay: () => relay.files(),\n bundler: async ({config}) => {\n relayDeclaration.dictionary(await relay.dictionary()).build();\n\n let rspack: RspackConfig = {};\n let options: Record<string, RelayOptions> = {};\n\n if (await manager.empty()) {\n if (config.debug) {\n console.warn(\"Content script or relay entries not found\");\n }\n } else {\n options = await relay.getOptionsMap();\n\n // prettier-ignore\n const plugin = EntrypointPlugin.from(await manager.entries())\n .virtual(file => manager.virtual(file));\n\n if (config.command === Command.Watch) {\n plugin.watch(async () => {\n manager.clear();\n\n relayDeclaration.dictionary(await relay.dictionary()).build();\n\n return manager.entries();\n });\n }\n\n const entryTypeFilter = onlyViaTopLevelEntry([\"content\", \"relay\"]);\n\n rspack = {\n plugins: [plugin],\n optimization: {\n splitChunks: {\n cacheGroups: {\n adnbnContent: {\n minChunks: 2,\n name: manager.chunkName(),\n test: (module, context) => {\n const nm = module as NormalModule;\n\n if (!nm.resource) {\n return false;\n }\n\n if (nm.resource.startsWith(getResolvePath(getSourcePath(config)))) {\n return false;\n }\n\n return entryTypeFilter(module, context);\n },\n chunks: (chunk): boolean => {\n return manager.likely(chunk.name);\n },\n enforce: false,\n reuseExistingChunk: true,\n priority: 20,\n },\n },\n },\n },\n };\n }\n\n return mergeConfig(rspack, {\n plugins: [\n new DefinePlugin({\n __ADNBN_RELAY_OPTIONS__: JSON.stringify(options),\n }),\n ],\n });\n },\n manifest: async ({manifest}) => {\n // prettier-ignore\n manifest\n .setContentScripts(await manager.manifest())\n .appendHostPermissions(await manager.hostPermissions())\n .appendOptionalHostPermissions(await manager.optionalHostPermissions());\n\n if ((await relay.exists()) && (await relay.hasMethod(RelayMethod.Scripting))) {\n if (await relay.hasDeclarative(ContentScriptDeclarative.Required)) {\n manifest.addPermission(\"scripting\");\n } else if (await relay.hasDeclarative(ContentScriptDeclarative.Optional)) {\n manifest.addOptionalPermission(\"scripting\");\n }\n }\n },\n };\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/cli/plugins/content/index.ts"],"sourcesContent":["import {Configuration as RspackConfig, DefinePlugin, NormalModule} from \"@rspack/core\";\nimport {merge as mergeConfig} from \"webpack-merge\";\n\nimport ContentManager from \"./ContentManager\";\nimport Content from \"./Content\";\nimport Relay from \"./Relay\";\nimport RelayDeclaration from \"./RelayDeclaration\";\n\nimport {definePlugin} from \"@main/plugin\";\n\nimport {EntrypointPlugin, onlyViaTopLevelEntry} from \"@cli/bundler\";\nimport {getResolvePath, getSourcePath} from \"@cli/resolvers/path\";\n\nimport {Command} from \"@typing/app\";\nimport {RelayOptions} from \"@typing/relay\";\n\nexport default definePlugin(() => {\n let content: Content;\n let relay: Relay;\n let manager: ContentManager;\n let relayDeclaration: RelayDeclaration;\n\n return {\n name: \"adnbn:content\",\n startup: async ({config}) => {\n content = new Content(config);\n relay = new Relay(config);\n\n // prettier-ignore\n manager = new ContentManager(config)\n .provider(content)\n .provider(relay);\n\n relayDeclaration = new RelayDeclaration(config);\n },\n content: () => content.files(),\n relay: () => relay.files(),\n bundler: async ({config}) => {\n relayDeclaration.dictionary(await relay.dictionary()).build();\n\n let rspack: RspackConfig = {};\n let options: Record<string, RelayOptions> = {};\n\n if (await manager.empty()) {\n if (config.debug) {\n console.warn(\"Content script or relay entries not found\");\n }\n } else {\n options = await relay.getOptionsMap();\n\n // prettier-ignore\n const plugin = EntrypointPlugin.from(await manager.entries())\n .virtual(file => manager.virtual(file));\n\n if (config.command === Command.Watch) {\n plugin.watch(async () => {\n manager.clear();\n\n relayDeclaration.dictionary(await relay.dictionary()).build();\n\n return manager.entries();\n });\n }\n\n const entryTypeFilter = onlyViaTopLevelEntry([\"content\", \"relay\"]);\n\n rspack = {\n plugins: [plugin],\n optimization: {\n splitChunks: {\n cacheGroups: {\n adnbnContent: {\n minChunks: 2,\n name: manager.chunkName(),\n test: (module, context) => {\n const nm = module as NormalModule;\n\n if (!nm.resource) {\n return false;\n }\n\n if (nm.resource.startsWith(getResolvePath(getSourcePath(config)))) {\n return false;\n }\n\n return entryTypeFilter(module, context);\n },\n chunks: (chunk): boolean => {\n return manager.likely(chunk.name);\n },\n enforce: false,\n reuseExistingChunk: true,\n priority: 20,\n },\n },\n },\n },\n };\n }\n\n return mergeConfig(rspack, {\n plugins: [\n new DefinePlugin({\n __ADNBN_RELAY_OPTIONS__: JSON.stringify(options),\n }),\n ],\n });\n },\n manifest: async ({manifest}) => {\n // prettier-ignore\n manifest\n .setContentScripts(await manager.manifest())\n .appendHostPermissions(await manager.hostPermissions())\n .appendOptionalHostPermissions(await manager.optionalHostPermissions())\n .appendPermissions(await manager.permissions())\n .appendOptionalPermissions(await manager.optionalPermissions());\n },\n };\n});\n"],"mappings":"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","names":[]}
@@ -1,5 +1,6 @@
1
1
  import { ContentScriptEntrypointOptions } from "../../../types/content.js";
2
2
  import { EntrypointFile } from "../../../types/entrypoint.js";
3
+ import { ManifestOptionalPermissions, ManifestPermissions } from "../../../types/manifest.js";
3
4
  export interface ContentItem<O extends ContentScriptEntrypointOptions> {
4
5
  file: EntrypointFile;
5
6
  options: O;
@@ -11,6 +12,8 @@ export interface ContentNameGenerator<O extends ContentScriptEntrypointOptions>
11
12
  }
12
13
  export interface ContentDriver<O extends ContentScriptEntrypointOptions> {
13
14
  items(): Promise<ContentItems<O>>;
15
+ permissions(): Promise<ManifestPermissions>;
16
+ optionalPermissions(): Promise<ManifestOptionalPermissions>;
14
17
  }
15
18
  export interface ContentProvider<O extends ContentScriptEntrypointOptions> {
16
19
  virtual(file: EntrypointFile): string;
@@ -2,10 +2,14 @@ import { getLocaleFilename } from "./../../../locale/utils.js";
2
2
  import { LocaleFinder } from "./../../../cli/entrypoint/index.js";
3
3
  class Locale_default extends LocaleFinder {
4
4
  async json() {
5
+ await this.validate();
5
6
  const data = {};
6
7
  const builders = await this.builders();
8
+ const defaultBuilder = this.getValidator().getDefaultBuilder(builders);
9
+ const defaultMessages = (defaultBuilder == null ? void 0 : defaultBuilder.build()) ?? {};
7
10
  for (const builder of builders.values()) {
8
- data[getLocaleFilename(builder.lang())] = builder.build();
11
+ const messages = builder === defaultBuilder ? defaultMessages : builder.build();
12
+ data[getLocaleFilename(builder.lang())] = { ...defaultMessages, ...messages };
9
13
  }
10
14
  return data;
11
15
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/plugins/locale/Locale.ts"],"sourcesContent":["import {getLocaleFilename} from \"@locale/utils\";\n\nimport {LocaleFinder} from \"@cli/entrypoint/index.js\";\nimport {GenerateJsonPluginData} from \"@cli/bundler\";\n\nexport default class extends LocaleFinder {\n public async json(): Promise<GenerateJsonPluginData> {\n const data: GenerateJsonPluginData = {};\n\n const builders = await this.builders();\n\n for (const builder of builders.values()) {\n data[getLocaleFilename(builder.lang())] = builder.build();\n }\n\n return data;\n }\n}\n"],"mappings":"AAAA,SAAQ,yBAAwB;AAEhC,SAAQ,oBAAmB;AAG3B,MAAO,uBAAsB,aAAa;AAAA,EACtC,MAAa,OAAwC;AACjD,UAAM,OAA+B,CAAC;AAEtC,UAAM,WAAW,MAAM,KAAK,SAAS;AAErC,eAAW,WAAW,SAAS,OAAO,GAAG;AACrC,WAAK,kBAAkB,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,MAAM;AAAA,IAC5D;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/cli/plugins/locale/Locale.ts"],"sourcesContent":["import {getLocaleFilename} from \"@locale/utils\";\n\nimport {LocaleFinder} from \"@cli/entrypoint/index.js\";\nimport {GenerateJsonPluginData} from \"@cli/bundler\";\n\nexport default class extends LocaleFinder {\n public async json(): Promise<GenerateJsonPluginData> {\n await this.validate();\n\n const data: GenerateJsonPluginData = {};\n\n const builders = await this.builders();\n const defaultBuilder = this.getValidator().getDefaultBuilder(builders);\n const defaultMessages = defaultBuilder?.build() ?? {};\n\n for (const builder of builders.values()) {\n // Builders already include this app's layers and browser overrides.\n // Every target plural has been validated; only ordinary gaps remain.\n const messages = builder === defaultBuilder ? defaultMessages : builder.build();\n data[getLocaleFilename(builder.lang())] = {...defaultMessages, ...messages};\n }\n\n return data;\n }\n}\n"],"mappings":"AAAA,SAAQ,yBAAwB;AAEhC,SAAQ,oBAAmB;AAG3B,MAAO,uBAAsB,aAAa;AAAA,EACtC,MAAa,OAAwC;AACjD,UAAM,KAAK,SAAS;AAEpB,UAAM,OAA+B,CAAC;AAEtC,UAAM,WAAW,MAAM,KAAK,SAAS;AACrC,UAAM,iBAAiB,KAAK,aAAa,EAAE,kBAAkB,QAAQ;AACrE,UAAM,mBAAkB,iDAAgB,YAAW,CAAC;AAEpD,eAAW,WAAW,SAAS,OAAO,GAAG;AAGrC,YAAM,WAAW,YAAY,iBAAiB,kBAAkB,QAAQ,MAAM;AAC9E,WAAK,kBAAkB,QAAQ,KAAK,CAAC,CAAC,IAAI,EAAC,GAAG,iBAAiB,GAAG,SAAQ;AAAA,IAC9E;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
@@ -15,9 +15,8 @@ class LocaleDeclaration_default extends FileBuilder {
15
15
  if (!structure) {
16
16
  throw new Error("Locale structure is not set");
17
17
  }
18
- const type = JSON.stringify(structure, null, 4);
19
- const name = "GeneratedNativeStructure";
20
- return this.readFile().replace(`interface ${name} {}`, `interface ${name} ${type}`);
18
+ const type = Object.entries(structure).map(([key, value]) => `${JSON.stringify(key)}: ${JSON.stringify(value)};`).join("\n ");
19
+ return this.readFile().replace("__LOCALE_DICTIONARY__", () => type);
21
20
  }
22
21
  structure(structure) {
23
22
  this._structure = structure;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/cli/plugins/locale/declaration/LocaleDeclaration.ts"],"sourcesContent":["import {FileBuilder} from \"@cli/plugins/typescript\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\nimport {LocaleStructure} from \"@typing/locale\";\n\nexport default class extends FileBuilder {\n protected _structure?: LocaleStructure;\n\n public constructor(config: ReadonlyConfig) {\n super(config);\n }\n\n protected filename(): string {\n return \"locale.d.ts\";\n }\n\n protected url(): string {\n return import.meta.url;\n }\n\n protected template(): string {\n const structure = this._structure;\n\n if (!structure) {\n throw new Error(\"Locale structure is not set\");\n }\n\n const type = JSON.stringify(structure, null, 4);\n\n const name = \"GeneratedNativeStructure\";\n\n return this.readFile().replace(`interface ${name} {}`, `interface ${name} ${type}`);\n }\n\n public structure(structure: LocaleStructure): this {\n this._structure = structure;\n\n return this;\n }\n}\n"],"mappings":"AAAA,SAAQ,mBAAkB;AAK1B,MAAO,kCAAsB,YAAY;AAAA,EAC3B;AAAA,EAEH,YAAY,QAAwB;AACvC,UAAM,MAAM;AAAA,EAChB;AAAA,EAEU,WAAmB;AACzB,WAAO;AAAA,EACX;AAAA,EAEU,MAAc;AACpB,WAAO,YAAY;AAAA,EACvB;AAAA,EAEU,WAAmB;AACzB,UAAM,YAAY,KAAK;AAEvB,QAAI,CAAC,WAAW;AACZ,YAAM,IAAI,MAAM,6BAA6B;AAAA,IACjD;AAEA,UAAM,OAAO,KAAK,UAAU,WAAW,MAAM,CAAC;AAE9C,UAAM,OAAO;AAEb,WAAO,KAAK,SAAS,EAAE,QAAQ,aAAa,IAAI,OAAO,aAAa,IAAI,IAAI,IAAI,EAAE;AAAA,EACtF;AAAA,EAEO,UAAU,WAAkC;AAC/C,SAAK,aAAa;AAElB,WAAO;AAAA,EACX;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/cli/plugins/locale/declaration/LocaleDeclaration.ts"],"sourcesContent":["import {FileBuilder} from \"@cli/plugins/typescript\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\nimport {LocaleStructure} from \"@typing/locale\";\n\nexport default class extends FileBuilder {\n protected _structure?: LocaleStructure;\n\n public constructor(config: ReadonlyConfig) {\n super(config);\n }\n\n protected filename(): string {\n return \"locale.d.ts\";\n }\n\n protected url(): string {\n return import.meta.url;\n }\n\n protected template(): string {\n const structure = this._structure;\n\n if (!structure) {\n throw new Error(\"Locale structure is not set\");\n }\n\n const type = Object.entries(structure)\n .map(([key, value]) => `${JSON.stringify(key)}: ${JSON.stringify(value)};`)\n .join(\"\\n \");\n\n return this.readFile().replace(\"__LOCALE_DICTIONARY__\", () => type);\n }\n\n public structure(structure: LocaleStructure): this {\n this._structure = structure;\n\n return this;\n }\n}\n"],"mappings":"AAAA,SAAQ,mBAAkB;AAK1B,MAAO,kCAAsB,YAAY;AAAA,EAC3B;AAAA,EAEH,YAAY,QAAwB;AACvC,UAAM,MAAM;AAAA,EAChB;AAAA,EAEU,WAAmB;AACzB,WAAO;AAAA,EACX;AAAA,EAEU,MAAc;AACpB,WAAO,YAAY;AAAA,EACvB;AAAA,EAEU,WAAmB;AACzB,UAAM,YAAY,KAAK;AAEvB,QAAI,CAAC,WAAW;AACZ,YAAM,IAAI,MAAM,6BAA6B;AAAA,IACjD;AAEA,UAAM,OAAO,OAAO,QAAQ,SAAS,EAChC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,KAAK,UAAU,GAAG,CAAC,KAAK,KAAK,UAAU,KAAK,CAAC,GAAG,EACzE,KAAK,YAAY;AAEtB,WAAO,KAAK,SAAS,EAAE,QAAQ,yBAAyB,MAAM,IAAI;AAAA,EACtE;AAAA,EAEO,UAAU,WAAkC;AAC/C,SAAK,aAAa;AAElB,WAAO;AAAA,EACX;AACJ;","names":[]}
@@ -1,129 +1,8 @@
1
- import {
2
- Language,
3
- LocaleDir,
4
- type LocaleNonPluralKeys,
5
- type LocalePluralKeys,
6
- type LocaleProvider,
7
- type LocaleDynamicProvider,
8
- type LocaleSubstitutionArgs,
9
- } from ":package/locale";
1
+ import ":package/locale";
10
2
 
11
3
  declare module ":package/locale" {
12
4
  // prettier-ignore
13
- export interface GeneratedNativeStructure {}
14
-
15
- /**
16
- * Translates a non-plural locale key.
17
- *
18
- * Substitutions are type-checked from the generated locale structure:
19
- * keys without placeholders do not accept substitutions, while keys with
20
- * placeholders require all declared substitution values.
21
- *
22
- * @example
23
- * ```ts
24
- * t("app.name");
25
- * t("app.greeting", {name: "Alice"});
26
- * ```
27
- */
28
- export function t<K extends LocaleNonPluralKeys<GeneratedNativeStructure>>(
29
- key: K,
30
- ...args: LocaleSubstitutionArgs<GeneratedNativeStructure, K>
31
- ): string;
32
-
33
- /**
34
- * Translates a plural locale key using the provided count.
35
- *
36
- * Substitutions are type-checked from the generated locale structure:
37
- * keys without placeholders do not accept substitutions, while keys with
38
- * placeholders require all declared substitution values.
39
- *
40
- * @example
41
- * ```ts
42
- * choice("cart.items", count, {count});
43
- * ```
44
- */
45
- export function choice<K extends LocalePluralKeys<GeneratedNativeStructure>>(
46
- key: K,
47
- count: number,
48
- ...args: LocaleSubstitutionArgs<GeneratedNativeStructure, K>
49
- ): string;
50
-
51
- /**
52
- * Converts a locale key to a browser message reference.
53
- *
54
- * This is useful for browser-managed extension fields that expect
55
- * `__MSG_name__` references instead of already translated text.
56
- *
57
- * @example
58
- * ```ts
59
- * key("app.name"); // "__MSG_app_name__"
60
- * ```
61
- */
62
- export function key(value: keyof GeneratedNativeStructure & string): string;
63
-
64
- /**
65
- * Resolves a string that may contain a locale marker.
66
- *
67
- * When the input contains a locale marker, the marker is extracted and translated.
68
- * Plain strings are returned unchanged.
69
- *
70
- * @example
71
- * ```ts
72
- * resolve("@app.name");
73
- * resolve("Plain title");
74
- * ```
75
- */
76
- export function resolve(input: string): string;
77
-
78
- export declare class NativeLocale implements LocaleProvider<GeneratedNativeStructure> {
79
- lang(): Language;
80
-
81
- languages(): Set<Language>;
82
-
83
- keys(): ReadonlySet<keyof GeneratedNativeStructure>;
84
-
85
- // non-plural keys
86
- trans<K extends LocaleNonPluralKeys<GeneratedNativeStructure>>(
87
- key: K,
88
- ...args: LocaleSubstitutionArgs<GeneratedNativeStructure, K>
89
- ): string;
90
-
91
- // plural keys
92
- choice<K extends LocalePluralKeys<GeneratedNativeStructure>>(
93
- key: K,
94
- count: number,
95
- ...args: LocaleSubstitutionArgs<GeneratedNativeStructure, K>
96
- ): string;
97
- }
98
-
99
- export declare class DynamicLocale extends NativeLocale implements LocaleDynamicProvider<GeneratedNativeStructure> {
100
- change(lang: Language): Promise<Language>;
5
+ export interface LocaleNativeStructure {
6
+ __LOCALE_DICTIONARY__
101
7
  }
102
8
  }
103
-
104
- declare module ":package/locale/react" {
105
- import type {GeneratedNativeStructure} from ":package/locale";
106
-
107
- export interface LocaleContract {
108
- lang: Language;
109
-
110
- dir: LocaleDir;
111
-
112
- isRtl: boolean;
113
-
114
- t<K extends LocaleNonPluralKeys<GeneratedNativeStructure>>(
115
- key: K,
116
- ...args: LocaleSubstitutionArgs<GeneratedNativeStructure, K>
117
- ): string;
118
-
119
- choice<K extends LocalePluralKeys<GeneratedNativeStructure>>(
120
- key: K,
121
- count: number,
122
- ...args: LocaleSubstitutionArgs<GeneratedNativeStructure, K>
123
- ): string;
124
-
125
- change(lang: Language): void;
126
- }
127
-
128
- export function useLocale(): LocaleContract;
129
- }
@@ -17,7 +17,7 @@ var offscreen_default = 'import type {OffscreenUnresolvedDefinition} from "adnbn
17
17
  var offscreen_background_default = 'import {OffscreenBackground} from "adnbn/offscreen";\n\ntry {\n new OffscreenBackground().build();\n} catch (e) {\n console.error("Failed to build offscreen layer on background:", e);\n}\n';
18
18
 
19
19
  // raw-loader:/home/runner/work/addon-bone/addon-bone/src/cli/virtual/relay.ts?raw
20
- var relay_default = 'import type {RelayUnresolvedDefinition} from "adnbn";\nimport type {TransportType} from "adnbn/transport";\nimport {isValidTransportDefinition, isValidTransportInitFunction} from "adnbn/entry/transport";\nimport {Builder as RelayBuilder} from "adnbn/entry/relay";\n\nimport {Builder as ContentScriptBuilder} from "virtual:content-framework";\n\nimport * as module from "virtual:relay-entrypoint";\n\ntry {\n const relayName = "virtual:relay-name";\n\n const {default: defaultDefinition, ...otherDefinition} = module;\n\n let definition: RelayUnresolvedDefinition<TransportType> = otherDefinition;\n\n if (isValidTransportDefinition(defaultDefinition)) {\n definition = {...definition, ...defaultDefinition};\n } else if (isValidTransportInitFunction(defaultDefinition)) {\n definition = {...definition, init: defaultDefinition};\n }\n\n const {init, main, name, ...options} = definition;\n\n new RelayBuilder({\n name: relayName,\n init,\n main,\n ...options,\n })\n .content(new ContentScriptBuilder(options))\n .build()\n .catch(e => {\n console.error("Failed to build relay: ", e);\n });\n} catch (e) {\n console.error("The relay crashed on startup:", e);\n}\n';
20
+ var relay_default = 'import type {TransportType} from "adnbn/transport";\nimport {isValidTransportDefinition, isValidTransportInitFunction} from "adnbn/entry/transport";\nimport {Builder as RelayBuilder, type RelayUnresolvedDefinition} from "adnbn/entry/relay";\n\nimport {Builder as ContentScriptBuilder} from "virtual:content-framework";\n\nimport * as module from "virtual:relay-entrypoint";\n\ntry {\n const relayName = "virtual:relay-name";\n\n const {default: defaultDefinition, ...otherDefinition} = module;\n\n let definition: RelayUnresolvedDefinition<TransportType> = otherDefinition;\n\n if (isValidTransportDefinition(defaultDefinition)) {\n definition = {...definition, ...defaultDefinition};\n } else if (isValidTransportInitFunction(defaultDefinition)) {\n definition = {...definition, init: defaultDefinition};\n }\n\n const {init, main, name, ...options} = definition;\n const {method, allFrames, ...contentOptions} = options;\n\n new RelayBuilder({\n name: relayName,\n init,\n main,\n ...options,\n })\n .content(\n new ContentScriptBuilder({\n ...contentOptions,\n ...(allFrames === undefined ? {} : {allFrames: allFrames !== false}),\n })\n )\n .build()\n .catch(e => {\n console.error("Failed to build relay: ", e);\n });\n} catch (e) {\n console.error("The relay crashed on startup:", e);\n}\n';
21
21
 
22
22
  // raw-loader:/home/runner/work/addon-bone/addon-bone/src/cli/virtual/sandbox.ts?raw
23
23
  var sandbox_default = 'import type {SandboxUnresolvedDefinition} from "adnbn";\nimport type {TransportType} from "adnbn/transport";\nimport {isValidTransportDefinition, isValidTransportInitFunction} from "adnbn/entry/transport";\nimport {Builder as SandboxBuilder} from "adnbn/entry/sandbox";\n\nimport {Builder as ViewBuilder} from "virtual:view-framework";\n\nimport * as module from "virtual:sandbox-entrypoint";\n\ntry {\n const sandboxName = "virtual:sandbox-name";\n\n const {default: defaultDefinition, ...otherDefinition} = module;\n\n let definition: SandboxUnresolvedDefinition<TransportType> = otherDefinition;\n\n if (isValidTransportDefinition(defaultDefinition)) {\n definition = {...definition, ...defaultDefinition};\n } else if (isValidTransportInitFunction(defaultDefinition)) {\n definition = {...definition, init: defaultDefinition};\n }\n\n const {init, main, name, ...options} = definition;\n\n new SandboxBuilder({\n name: sandboxName,\n init,\n main,\n ...options,\n })\n .view(new ViewBuilder(options))\n .build()\n .catch(e => {\n console.error("Failed to build sandbox: ", e);\n });\n} catch (e) {\n console.error("The sandbox crashed on startup:", e);\n}\n';
@@ -26,7 +26,7 @@ var sandbox_default = 'import type {SandboxUnresolvedDefinition} from "adnbn";\n
26
26
  var view_default = 'import type {ViewDefinition, ViewOptions} from "adnbn";\nimport {resolve} from "adnbn/locale";\nimport {isViewDefinition, isValidViewDefinitionRenderValue} from "adnbn/entry/view";\n\nimport view from "virtual:view-framework";\n\nimport * as module from "virtual:view-entrypoint";\n\ntry {\n const {default: defaultDefinition, ...otherDefinition} = module;\n\n let definition: ViewDefinition<ViewOptions> = otherDefinition;\n\n if (isViewDefinition(defaultDefinition)) {\n definition = {...definition, ...defaultDefinition};\n } else if (isValidViewDefinitionRenderValue(defaultDefinition)) {\n definition = {...definition, render: defaultDefinition};\n }\n\n const {title, ...options} = definition;\n\n view({title: title ? resolve(title) : undefined, ...options});\n} catch (e) {\n console.error("The view crashed on startup:", e);\n}\n';
27
27
 
28
28
  // src/cli/virtual/index.ts
29
- import { inferEntrypointFramework } from "./../../cli/entrypoint/index.js";
29
+ import { inferEntrypointFramework } from "../entrypoint/index.js";
30
30
 
31
31
  // src/types/app.ts
32
32
  var PackageName = "adnbn";