adnbn 0.6.0 → 0.7.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 (230) hide show
  1. package/dist/cli/builders/csp/AbstractCsp.d.ts +9 -0
  2. package/dist/cli/builders/csp/AbstractCsp.js +26 -0
  3. package/dist/cli/builders/csp/AbstractCsp.js.map +1 -0
  4. package/dist/cli/builders/csp/Csp.d.ts +8 -0
  5. package/dist/cli/builders/csp/Csp.js +39 -0
  6. package/dist/cli/builders/csp/Csp.js.map +1 -0
  7. package/dist/cli/builders/csp/SandboxCsp.d.ts +11 -0
  8. package/dist/cli/builders/csp/SandboxCsp.js +62 -0
  9. package/dist/cli/builders/csp/SandboxCsp.js.map +1 -0
  10. package/dist/cli/builders/csp/index.d.ts +3 -0
  11. package/dist/cli/builders/csp/index.js +7 -0
  12. package/dist/cli/builders/csp/index.js.map +1 -0
  13. package/dist/cli/builders/csp/types.d.ts +4 -0
  14. package/dist/cli/builders/csp/types.js +1 -0
  15. package/dist/cli/builders/csp/types.js.map +1 -0
  16. package/dist/cli/builders/manifest/ManifestBase.d.ts +16 -1
  17. package/dist/cli/builders/manifest/ManifestBase.js +49 -0
  18. package/dist/cli/builders/manifest/ManifestBase.js.map +1 -1
  19. package/dist/cli/builders/manifest/ManifestV2.d.ts +2 -0
  20. package/dist/cli/builders/manifest/ManifestV2.js +31 -1
  21. package/dist/cli/builders/manifest/ManifestV2.js.map +1 -1
  22. package/dist/cli/builders/manifest/ManifestV3.d.ts +2 -0
  23. package/dist/cli/builders/manifest/ManifestV3.js +67 -0
  24. package/dist/cli/builders/manifest/ManifestV3.js.map +1 -1
  25. package/dist/cli/entrypoint/file/injectors/core.js +26 -0
  26. package/dist/cli/entrypoint/file/injectors/core.js.map +1 -1
  27. package/dist/cli/entrypoint/file/parsers/TypeResolver.d.ts +4 -0
  28. package/dist/cli/entrypoint/file/parsers/TypeResolver.js +7 -1
  29. package/dist/cli/entrypoint/file/parsers/TypeResolver.js.map +1 -1
  30. package/dist/cli/entrypoint/file/resolvers/ImportResolver.js +1 -1
  31. package/dist/cli/entrypoint/file/resolvers/ImportResolver.js.map +1 -1
  32. package/dist/cli/entrypoint/finder/OffscreenViewFinder.d.ts +2 -2
  33. package/dist/cli/entrypoint/finder/OffscreenViewFinder.js +2 -2
  34. package/dist/cli/entrypoint/finder/OffscreenViewFinder.js.map +1 -1
  35. package/dist/cli/entrypoint/finder/PageFinder.d.ts +2 -2
  36. package/dist/cli/entrypoint/finder/PageFinder.js +3 -3
  37. package/dist/cli/entrypoint/finder/PageFinder.js.map +1 -1
  38. package/dist/cli/entrypoint/finder/PopupFinder.d.ts +2 -2
  39. package/dist/cli/entrypoint/finder/PopupFinder.js +2 -2
  40. package/dist/cli/entrypoint/finder/PopupFinder.js.map +1 -1
  41. package/dist/cli/entrypoint/finder/SandboxFinder.d.ts +11 -0
  42. package/dist/cli/entrypoint/finder/SandboxFinder.js +25 -0
  43. package/dist/cli/entrypoint/finder/SandboxFinder.js.map +1 -0
  44. package/dist/cli/entrypoint/finder/SandboxViewFinder.d.ts +15 -0
  45. package/dist/cli/entrypoint/finder/SandboxViewFinder.js +33 -0
  46. package/dist/cli/entrypoint/finder/SandboxViewFinder.js.map +1 -0
  47. package/dist/cli/entrypoint/finder/SidebarFinder.d.ts +2 -2
  48. package/dist/cli/entrypoint/finder/SidebarFinder.js +2 -2
  49. package/dist/cli/entrypoint/finder/SidebarFinder.js.map +1 -1
  50. package/dist/cli/entrypoint/finder/ViewCspFinder.d.ts +11 -0
  51. package/dist/cli/entrypoint/finder/ViewCspFinder.js +24 -0
  52. package/dist/cli/entrypoint/finder/ViewCspFinder.js.map +1 -0
  53. package/dist/cli/entrypoint/finder/index.d.ts +3 -0
  54. package/dist/cli/entrypoint/finder/index.js +34 -28
  55. package/dist/cli/entrypoint/finder/index.js.map +1 -1
  56. package/dist/cli/entrypoint/parser/OffscreenParser.d.ts +2 -2
  57. package/dist/cli/entrypoint/parser/OffscreenParser.js +2 -2
  58. package/dist/cli/entrypoint/parser/OffscreenParser.js.map +1 -1
  59. package/dist/cli/entrypoint/parser/PageParser.d.ts +2 -2
  60. package/dist/cli/entrypoint/parser/PageParser.js +2 -2
  61. package/dist/cli/entrypoint/parser/PageParser.js.map +1 -1
  62. package/dist/cli/entrypoint/parser/PopupParser.d.ts +2 -2
  63. package/dist/cli/entrypoint/parser/PopupParser.js +2 -2
  64. package/dist/cli/entrypoint/parser/PopupParser.js.map +1 -1
  65. package/dist/cli/entrypoint/parser/SandboxParser.d.ts +7 -0
  66. package/dist/cli/entrypoint/parser/SandboxParser.js +42 -0
  67. package/dist/cli/entrypoint/parser/SandboxParser.js.map +1 -0
  68. package/dist/cli/entrypoint/parser/SidebarParser.d.ts +2 -2
  69. package/dist/cli/entrypoint/parser/SidebarParser.js +2 -2
  70. package/dist/cli/entrypoint/parser/SidebarParser.js.map +1 -1
  71. package/dist/cli/entrypoint/parser/ViewCspParser.d.ts +9 -0
  72. package/dist/cli/entrypoint/parser/ViewCspParser.js +26 -0
  73. package/dist/cli/entrypoint/parser/ViewCspParser.js.map +1 -0
  74. package/dist/cli/entrypoint/parser/ViewParser.d.ts +80 -80
  75. package/dist/cli/entrypoint/parser/index.d.ts +1 -0
  76. package/dist/cli/entrypoint/parser/index.js +8 -6
  77. package/dist/cli/entrypoint/parser/index.js.map +1 -1
  78. package/dist/cli/plugins/index.d.ts +2 -1
  79. package/dist/cli/plugins/index.js +14 -12
  80. package/dist/cli/plugins/index.js.map +1 -1
  81. package/dist/cli/plugins/offscreen/index.js +1 -0
  82. package/dist/cli/plugins/offscreen/index.js.map +1 -1
  83. package/dist/cli/plugins/page/index.js +1 -1
  84. package/dist/cli/plugins/page/index.js.map +1 -1
  85. package/dist/cli/plugins/popup/index.js +1 -1
  86. package/dist/cli/plugins/popup/index.js.map +1 -1
  87. package/dist/cli/plugins/sandbox/Sandbox.d.ts +15 -0
  88. package/dist/cli/plugins/sandbox/Sandbox.js +52 -0
  89. package/dist/cli/plugins/sandbox/Sandbox.js.map +1 -0
  90. package/dist/cli/plugins/sandbox/SandboxDeclaration.d.ts +5 -0
  91. package/dist/cli/plugins/sandbox/SandboxDeclaration.js +10 -0
  92. package/dist/cli/plugins/sandbox/SandboxDeclaration.js.map +1 -0
  93. package/dist/cli/plugins/sandbox/index.d.ts +2 -0
  94. package/dist/cli/plugins/sandbox/index.js +63 -0
  95. package/dist/cli/plugins/sandbox/index.js.map +1 -0
  96. package/dist/cli/plugins/sidebar/index.js +1 -0
  97. package/dist/cli/plugins/sidebar/index.js.map +1 -1
  98. package/dist/cli/plugins/style/index.d.ts +2 -0
  99. package/dist/cli/plugins/{style.js → style/index.js} +18 -21
  100. package/dist/cli/plugins/style/index.js.map +1 -0
  101. package/dist/cli/plugins/style/utils.d.ts +1 -0
  102. package/dist/cli/plugins/style/utils.js +86 -0
  103. package/dist/cli/plugins/style/utils.js.map +1 -0
  104. package/dist/cli/plugins/typescript/declaration/transport/TransportDeclaration.d.ts +2 -1
  105. package/dist/cli/plugins/typescript/declaration/transport/TransportDeclaration.js +2 -3
  106. package/dist/cli/plugins/typescript/declaration/transport/TransportDeclaration.js.map +1 -1
  107. package/dist/cli/plugins/typescript/declaration/transport/transport.d.ts +5 -11
  108. package/dist/cli/resolvers/config.js +4 -0
  109. package/dist/cli/resolvers/config.js.map +1 -1
  110. package/dist/cli/virtual/index.d.ts +1 -0
  111. package/dist/cli/virtual/index.js +8 -1
  112. package/dist/cli/virtual/sandbox.d.ts +1 -0
  113. package/dist/cli/virtual/virtual.d.ts +27 -0
  114. package/dist/entry/sandbox/Builder.d.ts +15 -0
  115. package/dist/entry/sandbox/Builder.js +51 -0
  116. package/dist/entry/sandbox/Builder.js.map +1 -0
  117. package/dist/entry/sandbox/TransportBuilder.d.ts +8 -0
  118. package/dist/entry/sandbox/TransportBuilder.js +15 -0
  119. package/dist/entry/sandbox/TransportBuilder.js.map +1 -0
  120. package/dist/entry/sandbox/index.d.ts +2 -0
  121. package/dist/entry/sandbox/index.js +7 -0
  122. package/dist/entry/sandbox/index.js.map +1 -0
  123. package/dist/frame/ReadyFrame.d.ts +25 -0
  124. package/dist/frame/ReadyFrame.js +86 -0
  125. package/dist/frame/ReadyFrame.js.map +1 -0
  126. package/dist/frame/index.d.ts +2 -0
  127. package/dist/frame/index.js +5 -0
  128. package/dist/frame/index.js.map +1 -0
  129. package/dist/main/csp.d.ts +2 -0
  130. package/dist/main/csp.js +5 -0
  131. package/dist/main/csp.js.map +1 -0
  132. package/dist/main/index.d.ts +2 -0
  133. package/dist/main/index.js +2 -0
  134. package/dist/main/index.js.map +1 -1
  135. package/dist/main/offscreen.d.ts +3 -3
  136. package/dist/main/offscreen.js.map +1 -1
  137. package/dist/main/relay.d.ts +3 -3
  138. package/dist/main/relay.js.map +1 -1
  139. package/dist/main/sandbox.d.ts +9 -0
  140. package/dist/main/sandbox.js +29 -0
  141. package/dist/main/sandbox.js.map +1 -0
  142. package/dist/main/service.d.ts +3 -3
  143. package/dist/main/service.js.map +1 -1
  144. package/dist/message/MessageManager.d.ts +2 -0
  145. package/dist/message/MessageManager.js +21 -5
  146. package/dist/message/MessageManager.js.map +1 -1
  147. package/dist/message/error.d.ts +12 -0
  148. package/dist/message/error.js +55 -0
  149. package/dist/message/error.js.map +1 -0
  150. package/dist/message/providers/Message.d.ts +5 -0
  151. package/dist/message/providers/Message.js +44 -12
  152. package/dist/message/providers/Message.js.map +1 -1
  153. package/dist/offscreen/OffscreenBridge.d.ts +1 -3
  154. package/dist/offscreen/OffscreenBridge.js +12 -56
  155. package/dist/offscreen/OffscreenBridge.js.map +1 -1
  156. package/dist/offscreen/index.d.ts +8 -3
  157. package/dist/offscreen/index.js.map +1 -1
  158. package/dist/relay/index.d.ts +8 -3
  159. package/dist/relay/index.js.map +1 -1
  160. package/dist/sandbox/SandboxFrame.d.ts +6 -0
  161. package/dist/sandbox/SandboxFrame.js +31 -0
  162. package/dist/sandbox/SandboxFrame.js.map +1 -0
  163. package/dist/sandbox/SandboxManager.d.ts +5 -0
  164. package/dist/sandbox/SandboxManager.js +12 -0
  165. package/dist/sandbox/SandboxManager.js.map +1 -0
  166. package/dist/sandbox/SandboxMessage.d.ts +30 -0
  167. package/dist/sandbox/SandboxMessage.js +127 -0
  168. package/dist/sandbox/SandboxMessage.js.map +1 -0
  169. package/dist/sandbox/index.d.ts +7 -0
  170. package/dist/sandbox/index.js +6 -0
  171. package/dist/sandbox/index.js.map +1 -0
  172. package/dist/sandbox/ports/SandboxHost.d.ts +21 -0
  173. package/dist/sandbox/ports/SandboxHost.js +58 -0
  174. package/dist/sandbox/ports/SandboxHost.js.map +1 -0
  175. package/dist/sandbox/ports/SandboxInner.d.ts +17 -0
  176. package/dist/sandbox/ports/SandboxInner.js +45 -0
  177. package/dist/sandbox/ports/SandboxInner.js.map +1 -0
  178. package/dist/sandbox/ports/SandboxMemory.d.ts +4 -0
  179. package/dist/sandbox/ports/SandboxMemory.js +42 -0
  180. package/dist/sandbox/ports/SandboxMemory.js.map +1 -0
  181. package/dist/sandbox/ports/index.d.ts +3 -0
  182. package/dist/sandbox/ports/index.js +9 -0
  183. package/dist/sandbox/ports/index.js.map +1 -0
  184. package/dist/sandbox/providers/ProxySandbox.d.ts +10 -0
  185. package/dist/sandbox/providers/ProxySandbox.js +20 -0
  186. package/dist/sandbox/providers/ProxySandbox.js.map +1 -0
  187. package/dist/sandbox/providers/RegisterSandbox.d.ts +9 -0
  188. package/dist/sandbox/providers/RegisterSandbox.js +28 -0
  189. package/dist/sandbox/providers/RegisterSandbox.js.map +1 -0
  190. package/dist/sandbox/providers/index.d.ts +2 -0
  191. package/dist/sandbox/providers/index.js +7 -0
  192. package/dist/sandbox/providers/index.js.map +1 -0
  193. package/dist/sandbox/utils.d.ts +4 -0
  194. package/dist/sandbox/utils.js +10 -0
  195. package/dist/sandbox/utils.js.map +1 -0
  196. package/dist/service/index.d.ts +8 -3
  197. package/dist/service/index.js.map +1 -1
  198. package/dist/transport/RegisterTransport.d.ts +4 -2
  199. package/dist/transport/RegisterTransport.js +8 -1
  200. package/dist/transport/RegisterTransport.js.map +1 -1
  201. package/dist/transport/TransportMessage.d.ts +1 -1
  202. package/dist/transport/TransportMessage.js +1 -1
  203. package/dist/transport/TransportMessage.js.map +1 -1
  204. package/dist/transport/index.d.ts +4 -1
  205. package/dist/types/config.d.ts +7 -0
  206. package/dist/types/csp.d.ts +34 -0
  207. package/dist/types/csp.js +12 -0
  208. package/dist/types/csp.js.map +1 -0
  209. package/dist/types/entrypoint.d.ts +2 -1
  210. package/dist/types/entrypoint.js +1 -0
  211. package/dist/types/entrypoint.js.map +1 -1
  212. package/dist/types/manifest.d.ts +10 -0
  213. package/dist/types/manifest.js.map +1 -1
  214. package/dist/types/message.d.ts +15 -0
  215. package/dist/types/message.js +2 -0
  216. package/dist/types/message.js.map +1 -1
  217. package/dist/types/offscreen.d.ts +2 -1
  218. package/dist/types/offscreen.js.map +1 -1
  219. package/dist/types/page.d.ts +2 -1
  220. package/dist/types/plugin.d.ts +2 -1
  221. package/dist/types/popup.d.ts +2 -1
  222. package/dist/types/sandbox.d.ts +97 -0
  223. package/dist/types/sandbox.js +34 -0
  224. package/dist/types/sandbox.js.map +1 -0
  225. package/dist/types/sidebar.d.ts +2 -1
  226. package/dist/types/sidebar.js.map +1 -1
  227. package/dist/types/transport.d.ts +6 -2
  228. package/package.json +7 -1
  229. package/dist/cli/plugins/style.d.ts +0 -2
  230. package/dist/cli/plugins/style.js.map +0 -1
@@ -3,6 +3,8 @@ import { BackgroundConfig } from "./background.js";
3
3
  import { CommandConfig } from "./command.js";
4
4
  import { Language } from "./locale.js";
5
5
  import { BrowserSpecific, DataCollectionPermission } from "./browser.js";
6
+ import { CspConfig } from "./csp.js";
7
+ import { SandboxCspConfig } from "./sandbox.js";
6
8
  type ManifestCommon = chrome.runtime.Manifest;
7
9
  type ManifestBase = chrome.runtime.ManifestBase;
8
10
  type ManifestPermission = chrome.runtime.ManifestPermission;
@@ -81,6 +83,12 @@ export interface ManifestBuilder<T extends CoreManifest = Manifest> {
81
83
  setContentScripts(contentScripts?: ManifestContentScripts): this;
82
84
  setPopup(popup?: ManifestPopup): this;
83
85
  setSidebar(sidebar?: ManifestSidebar): this;
86
+ addSandbox(sandbox: ManifestSandbox): this;
87
+ appendSandboxes(sandboxes: Iterable<ManifestSandbox>): this;
88
+ addSandboxCsp(csp: SandboxCspConfig): this;
89
+ appendSandboxCsp(csps: Iterable<SandboxCspConfig>): this;
90
+ addCsp(csp: CspConfig): this;
91
+ appendCsp(csps: Iterable<CspConfig>): this;
84
92
  setDependencies(dependencies: ManifestDependencies): this;
85
93
  addPermission(permission: ManifestPermission): this;
86
94
  setPermissions(permissions: ManifestPermissions): this;
@@ -149,6 +157,8 @@ export interface ManifestAccessibleResource {
149
157
  useDynamicUrl?: boolean;
150
158
  }
151
159
  export type ManifestAccessibleResources = Set<ManifestAccessibleResource>;
160
+ export type ManifestSandbox = string;
161
+ export type ManifestSandboxes = Set<ManifestSandbox>;
152
162
  export interface ManifestDependency {
153
163
  js: Set<string>;
154
164
  css: Set<string>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/manifest.ts"],"sourcesContent":["import {ContentScriptConfig} from \"@typing/content\";\nimport {BackgroundConfig} from \"@typing/background\";\nimport {CommandConfig} from \"@typing/command\";\nimport {Language} from \"@typing/locale\";\nimport {BrowserSpecific, DataCollectionPermission} from \"@typing/browser\";\n\ntype ManifestCommon = chrome.runtime.Manifest;\ntype ManifestBase = chrome.runtime.ManifestBase;\ntype ManifestPermission = chrome.runtime.ManifestPermission;\ntype ManifestOptionalPermission = chrome.runtime.ManifestOptionalPermission;\n\nexport const ManifestMatchSchemes: ReadonlySet<string> = new Set<string>([\"http\", \"https\", \"file\", \"ftp\", \"ws\", \"wss\"]);\n\nexport const ManifestSpecialSchemes: ReadonlySet<string> = new Set<string>([\n \"chrome-extension\",\n \"moz-extension\",\n \"data\",\n \"blob\",\n \"filesystem\",\n \"about\",\n \"chrome\",\n \"resource\",\n]);\n\ntype ManifestFixed<T extends ManifestBase> = Omit<T, \"manifest_version\"> & {\n manifest_version: ManifestVersion;\n};\n\ninterface ManifestUnstable {\n permissions?: (ManifestPermission | (string & Record<never, never>))[];\n web_accessible_resources?: string[] | chrome.runtime.ManifestV3[\"web_accessible_resources\"];\n}\n\nexport type ManifestVersion = 2 | 3;\n\nexport enum ManifestIncognito {\n Spanning = \"spanning\",\n Split = \"split\",\n NotAllowed = \"not_allowed\",\n}\n\nexport type ManifestIncognitoValue = ManifestIncognito | `${ManifestIncognito}`;\n\nexport type CoreManifest = ManifestFixed<ManifestBase>;\n\nexport type ChromeManifest = ManifestFixed<ManifestCommon>;\n\nexport type FirefoxManifest = ChromeManifest & {\n action?: chrome.runtime.ManifestV3[\"action\"] & {\n browser_style?: boolean;\n };\n browser_action?: chrome.runtime.ManifestV2[\"browser_action\"] & {\n browser_style?: boolean;\n };\n page_action?: chrome.runtime.ManifestV2[\"page_action\"] & {\n browser_style?: boolean;\n };\n browser_specific_settings?: {\n gecko?: {\n id?: string;\n strict_min_version?: string;\n strict_max_version?: string;\n update_url?: string;\n data_collection_permissions?: {\n required?: [\"none\"] | `${DataCollectionPermission}`[];\n optional?: `${DataCollectionPermission}`[];\n };\n };\n gecko_android?: {\n strict_min_version?: string;\n strict_max_version?: string;\n };\n };\n} & ManifestUnstable;\n\nexport type SafariManifest = ChromeManifest & {\n browser_specific_settings?: {\n safari?: {\n strict_min_version?: string;\n strict_max_version?: string;\n };\n };\n} & ManifestUnstable;\n\nexport type Manifest = ChromeManifest | FirefoxManifest | SafariManifest;\n\nexport type OptionalManifest = Partial<Omit<Manifest, \"manifest_version\">>;\n\nexport interface ManifestBuilder<T extends CoreManifest = Manifest> {\n setName(name: string): this;\n\n setShortName(shortName?: string): this;\n\n setDescription(description?: string): this;\n\n setAuthor(author?: string): this;\n\n setHomepage(homepage?: string): this;\n\n setVersion(version?: string): this;\n\n setIncognito(incognito?: ManifestIncognitoValue): this;\n\n setMinimumVersion(minimumVersion?: string): this;\n\n setLocale(lang?: Language): this;\n\n // Specific settings\n setSpecific(settings?: BrowserSpecific): this;\n\n mergeSpecific(settings: BrowserSpecific): this;\n\n // Icons\n setIcons(icons?: ManifestIcons): this;\n\n setIcon(icon?: string): this; // name of an icon set for manifest.icons\n\n // Entry\n setBackground(background?: ManifestBackground): this;\n\n setCommands(commands?: ManifestCommands): this;\n\n setContentScripts(contentScripts?: ManifestContentScripts): this;\n\n setPopup(popup?: ManifestPopup): this;\n\n setSidebar(sidebar?: ManifestSidebar): this;\n\n // System\n setDependencies(dependencies: ManifestDependencies): this;\n\n // Permissions\n addPermission(permission: ManifestPermission): this;\n\n setPermissions(permissions: ManifestPermissions): this;\n\n appendPermissions(permissions: ManifestPermissions): this;\n\n // Optional Permissions\n addOptionalPermission(permission: ManifestOptionalPermission): this;\n\n setOptionalPermissions(permissions: ManifestOptionalPermissions): this;\n\n appendOptionalPermissions(permissions: ManifestOptionalPermissions): this;\n\n // Host Permissions\n addHostPermission(permission: string): this;\n\n setHostPermissions(permissions: ManifestHostPermissions): this;\n\n appendHostPermissions(permissions: ManifestHostPermissions): this;\n\n // Optional Host Permissions\n addOptionalHostPermission(permission: string): this;\n\n setOptionalHostPermissions(permissions: ManifestHostPermissions): this;\n\n appendOptionalHostPermissions(permissions: ManifestHostPermissions): this;\n\n // Web Accessible Resource\n setAccessibleResource(accessibleResources: ManifestAccessibleResources): this;\n\n appendAccessibleResources(accessibleResources: ManifestAccessibleResources): this;\n\n addAccessibleResource(accessibleResource: ManifestAccessibleResource): this;\n\n getWebAccessibleResources(): ManifestAccessibleResource[];\n\n // Getter\n get(): T;\n\n raw(manifest: OptionalManifest): this;\n}\n\ntype Entry = string;\n\nexport interface ManifestEntry {\n entry: Entry;\n}\n\nexport type ManifestBackground = ManifestEntry & BackgroundConfig;\n\nexport type ManifestContentScript = ManifestEntry & ContentScriptConfig;\nexport type ManifestContentScripts = Set<ManifestContentScript>;\n\nexport type ManifestCommand = CommandConfig;\nexport type ManifestCommands = Set<ManifestCommand>;\n\nexport interface ManifestPopup {\n /**\n * Represents the group name of an icon that can be used in UI elements.\n * This property is optional and, if defined, should typically refer to a string\n * that matches the name of an icon resource available in the application or icon library.\n */\n icon?: string;\n /**\n * Represents an optional title or name or locale key that can be assigned to an entity.\n */\n title?: string;\n /**\n * Represents an optional HTML path.\n */\n path?: string;\n}\n\nexport interface ManifestSidebar {\n /**\n * Represents the group name of an icon that can be used in UI elements.\n * This property is optional and, if defined, should typically refer to a string\n * that matches the name of an icon resource available in the application or icon library.\n */\n icon?: string;\n /**\n * Represents an optional title or name or locale key that can be assigned to an entity.\n */\n title?: string;\n /**\n * Represents an optional HTML path.\n */\n path?: string;\n}\n\nexport interface ManifestAccessibleResource {\n resources: string[];\n matches?: string[];\n extensionIds?: string[];\n useDynamicUrl?: boolean;\n}\n\nexport type ManifestAccessibleResources = Set<ManifestAccessibleResource>;\n\nexport interface ManifestDependency {\n js: Set<string>;\n css: Set<string>;\n assets: Set<string>;\n}\n\nexport type ManifestIcon = Map<number, string>;\n\nexport type ManifestIcons = Map<string, ManifestIcon>;\n\nexport type ManifestDependencies = Map<Entry, ManifestDependency>;\n\nexport type ManifestPermissions = Set<ManifestPermission>;\n\nexport type ManifestOptionalPermissions = Set<ManifestOptionalPermission>;\n\nexport type ManifestHostPermissions = Set<string>;\n"],"mappings":"AAWO,MAAM,uBAA4C,oBAAI,IAAY,CAAC,QAAQ,SAAS,QAAQ,OAAO,MAAM,KAAK,CAAC;AAE/G,MAAM,yBAA8C,oBAAI,IAAY;AAAA,EACvE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AAaM,IAAK,oBAAL,kBAAKA,uBAAL;AACH,EAAAA,mBAAA,cAAW;AACX,EAAAA,mBAAA,WAAQ;AACR,EAAAA,mBAAA,gBAAa;AAHL,SAAAA;AAAA,GAAA;","names":["ManifestIncognito"]}
1
+ {"version":3,"sources":["../../src/types/manifest.ts"],"sourcesContent":["import {ContentScriptConfig} from \"@typing/content\";\nimport {BackgroundConfig} from \"@typing/background\";\nimport {CommandConfig} from \"@typing/command\";\nimport {Language} from \"@typing/locale\";\nimport {BrowserSpecific, DataCollectionPermission} from \"@typing/browser\";\nimport {CspConfig} from \"@typing/csp\";\nimport {SandboxCspConfig} from \"@typing/sandbox\";\n\ntype ManifestCommon = chrome.runtime.Manifest;\ntype ManifestBase = chrome.runtime.ManifestBase;\ntype ManifestPermission = chrome.runtime.ManifestPermission;\ntype ManifestOptionalPermission = chrome.runtime.ManifestOptionalPermission;\n\nexport const ManifestMatchSchemes: ReadonlySet<string> = new Set<string>([\"http\", \"https\", \"file\", \"ftp\", \"ws\", \"wss\"]);\n\nexport const ManifestSpecialSchemes: ReadonlySet<string> = new Set<string>([\n \"chrome-extension\",\n \"moz-extension\",\n \"data\",\n \"blob\",\n \"filesystem\",\n \"about\",\n \"chrome\",\n \"resource\",\n]);\n\ntype ManifestFixed<T extends ManifestBase> = Omit<T, \"manifest_version\"> & {\n manifest_version: ManifestVersion;\n};\n\ninterface ManifestUnstable {\n permissions?: (ManifestPermission | (string & Record<never, never>))[];\n web_accessible_resources?: string[] | chrome.runtime.ManifestV3[\"web_accessible_resources\"];\n}\n\nexport type ManifestVersion = 2 | 3;\n\nexport enum ManifestIncognito {\n Spanning = \"spanning\",\n Split = \"split\",\n NotAllowed = \"not_allowed\",\n}\n\nexport type ManifestIncognitoValue = ManifestIncognito | `${ManifestIncognito}`;\n\nexport type CoreManifest = ManifestFixed<ManifestBase>;\n\nexport type ChromeManifest = ManifestFixed<ManifestCommon>;\n\nexport type FirefoxManifest = ChromeManifest & {\n action?: chrome.runtime.ManifestV3[\"action\"] & {\n browser_style?: boolean;\n };\n browser_action?: chrome.runtime.ManifestV2[\"browser_action\"] & {\n browser_style?: boolean;\n };\n page_action?: chrome.runtime.ManifestV2[\"page_action\"] & {\n browser_style?: boolean;\n };\n browser_specific_settings?: {\n gecko?: {\n id?: string;\n strict_min_version?: string;\n strict_max_version?: string;\n update_url?: string;\n data_collection_permissions?: {\n required?: [\"none\"] | `${DataCollectionPermission}`[];\n optional?: `${DataCollectionPermission}`[];\n };\n };\n gecko_android?: {\n strict_min_version?: string;\n strict_max_version?: string;\n };\n };\n} & ManifestUnstable;\n\nexport type SafariManifest = ChromeManifest & {\n browser_specific_settings?: {\n safari?: {\n strict_min_version?: string;\n strict_max_version?: string;\n };\n };\n} & ManifestUnstable;\n\nexport type Manifest = ChromeManifest | FirefoxManifest | SafariManifest;\n\nexport type OptionalManifest = Partial<Omit<Manifest, \"manifest_version\">>;\n\nexport interface ManifestBuilder<T extends CoreManifest = Manifest> {\n setName(name: string): this;\n\n setShortName(shortName?: string): this;\n\n setDescription(description?: string): this;\n\n setAuthor(author?: string): this;\n\n setHomepage(homepage?: string): this;\n\n setVersion(version?: string): this;\n\n setIncognito(incognito?: ManifestIncognitoValue): this;\n\n setMinimumVersion(minimumVersion?: string): this;\n\n setLocale(lang?: Language): this;\n\n // Specific settings\n setSpecific(settings?: BrowserSpecific): this;\n\n mergeSpecific(settings: BrowserSpecific): this;\n\n // Icons\n setIcons(icons?: ManifestIcons): this;\n\n setIcon(icon?: string): this; // name of an icon set for manifest.icons\n\n // Entry\n setBackground(background?: ManifestBackground): this;\n\n setCommands(commands?: ManifestCommands): this;\n\n setContentScripts(contentScripts?: ManifestContentScripts): this;\n\n setPopup(popup?: ManifestPopup): this;\n\n setSidebar(sidebar?: ManifestSidebar): this;\n\n // Sandbox\n addSandbox(sandbox: ManifestSandbox): this;\n\n appendSandboxes(sandboxes: Iterable<ManifestSandbox>): this;\n\n addSandboxCsp(csp: SandboxCspConfig): this;\n\n appendSandboxCsp(csps: Iterable<SandboxCspConfig>): this;\n\n // Content Security Policy\n addCsp(csp: CspConfig): this;\n\n appendCsp(csps: Iterable<CspConfig>): this;\n\n // System\n setDependencies(dependencies: ManifestDependencies): this;\n\n // Permissions\n addPermission(permission: ManifestPermission): this;\n\n setPermissions(permissions: ManifestPermissions): this;\n\n appendPermissions(permissions: ManifestPermissions): this;\n\n // Optional Permissions\n addOptionalPermission(permission: ManifestOptionalPermission): this;\n\n setOptionalPermissions(permissions: ManifestOptionalPermissions): this;\n\n appendOptionalPermissions(permissions: ManifestOptionalPermissions): this;\n\n // Host Permissions\n addHostPermission(permission: string): this;\n\n setHostPermissions(permissions: ManifestHostPermissions): this;\n\n appendHostPermissions(permissions: ManifestHostPermissions): this;\n\n // Optional Host Permissions\n addOptionalHostPermission(permission: string): this;\n\n setOptionalHostPermissions(permissions: ManifestHostPermissions): this;\n\n appendOptionalHostPermissions(permissions: ManifestHostPermissions): this;\n\n // Web Accessible Resource\n setAccessibleResource(accessibleResources: ManifestAccessibleResources): this;\n\n appendAccessibleResources(accessibleResources: ManifestAccessibleResources): this;\n\n addAccessibleResource(accessibleResource: ManifestAccessibleResource): this;\n\n getWebAccessibleResources(): ManifestAccessibleResource[];\n\n // Getter\n get(): T;\n\n raw(manifest: OptionalManifest): this;\n}\n\ntype Entry = string;\n\nexport interface ManifestEntry {\n entry: Entry;\n}\n\nexport type ManifestBackground = ManifestEntry & BackgroundConfig;\n\nexport type ManifestContentScript = ManifestEntry & ContentScriptConfig;\nexport type ManifestContentScripts = Set<ManifestContentScript>;\n\nexport type ManifestCommand = CommandConfig;\nexport type ManifestCommands = Set<ManifestCommand>;\n\nexport interface ManifestPopup {\n /**\n * Represents the group name of an icon that can be used in UI elements.\n * This property is optional and, if defined, should typically refer to a string\n * that matches the name of an icon resource available in the application or icon library.\n */\n icon?: string;\n /**\n * Represents an optional title or name or locale key that can be assigned to an entity.\n */\n title?: string;\n /**\n * Represents an optional HTML path.\n */\n path?: string;\n}\n\nexport interface ManifestSidebar {\n /**\n * Represents the group name of an icon that can be used in UI elements.\n * This property is optional and, if defined, should typically refer to a string\n * that matches the name of an icon resource available in the application or icon library.\n */\n icon?: string;\n /**\n * Represents an optional title or name or locale key that can be assigned to an entity.\n */\n title?: string;\n /**\n * Represents an optional HTML path.\n */\n path?: string;\n}\n\nexport interface ManifestAccessibleResource {\n resources: string[];\n matches?: string[];\n extensionIds?: string[];\n useDynamicUrl?: boolean;\n}\n\nexport type ManifestAccessibleResources = Set<ManifestAccessibleResource>;\n\nexport type ManifestSandbox = string;\n\nexport type ManifestSandboxes = Set<ManifestSandbox>;\n\nexport interface ManifestDependency {\n js: Set<string>;\n css: Set<string>;\n assets: Set<string>;\n}\n\nexport type ManifestIcon = Map<number, string>;\n\nexport type ManifestIcons = Map<string, ManifestIcon>;\n\nexport type ManifestDependencies = Map<Entry, ManifestDependency>;\n\nexport type ManifestPermissions = Set<ManifestPermission>;\n\nexport type ManifestOptionalPermissions = Set<ManifestOptionalPermission>;\n\nexport type ManifestHostPermissions = Set<string>;\n"],"mappings":"AAaO,MAAM,uBAA4C,oBAAI,IAAY,CAAC,QAAQ,SAAS,QAAQ,OAAO,MAAM,KAAK,CAAC;AAE/G,MAAM,yBAA8C,oBAAI,IAAY;AAAA,EACvE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AAaM,IAAK,oBAAL,kBAAKA,uBAAL;AACH,EAAAA,mBAAA,cAAW;AACX,EAAAA,mBAAA,WAAQ;AACR,EAAAA,mBAAA,gBAAa;AAHL,SAAAA;AAAA,GAAA;","names":["ManifestIncognito"]}
@@ -1,6 +1,7 @@
1
1
  export declare const MessageGlobalKey = "adnbnMessage";
2
2
  export declare const MessageTypeSeparator = ":";
3
3
  export declare const MessageSenderProperty = "$sender";
4
+ export declare const MessageResultEnvelopeProperty = "__adnbnEnvelope";
4
5
  export type MessageSender = chrome.runtime.MessageSender;
5
6
  export type MessageSendOptions = number | {
6
7
  tabId: number;
@@ -13,6 +14,20 @@ export interface MessageDictionary {
13
14
  export interface MessageSenderAware {
14
15
  readonly [MessageSenderProperty]?: MessageSender;
15
16
  }
17
+ export interface MessageError {
18
+ name: string;
19
+ message: string;
20
+ stack?: string;
21
+ }
22
+ export type MessageResult<T = any> = {
23
+ readonly [MessageResultEnvelopeProperty]: true;
24
+ ok: true;
25
+ payload: T;
26
+ } | {
27
+ readonly [MessageResultEnvelopeProperty]: true;
28
+ ok: false;
29
+ error: MessageError;
30
+ };
16
31
  export type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;
17
32
  export type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];
18
33
  export type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;
@@ -1,8 +1,10 @@
1
1
  const MessageGlobalKey = "adnbnMessage";
2
2
  const MessageTypeSeparator = ":";
3
3
  const MessageSenderProperty = "$sender";
4
+ const MessageResultEnvelopeProperty = "__adnbnEnvelope";
4
5
  export {
5
6
  MessageGlobalKey,
7
+ MessageResultEnvelopeProperty,
6
8
  MessageSenderProperty,
7
9
  MessageTypeSeparator
8
10
  };
@@ -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 type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n readonly [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":[]}
1
+ {"version":3,"sources":["../../src/types/message.ts"],"sourcesContent":["export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport const MessageSenderProperty = \"$sender\";\n\nexport const MessageResultEnvelopeProperty = \"__adnbnEnvelope\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n readonly [MessageSenderProperty]?: MessageSender;\n}\n\nexport interface MessageError {\n name: string;\n message: string;\n stack?: string;\n}\n\nexport type MessageResult<T = any> =\n | {readonly [MessageResultEnvelopeProperty]: true; ok: true; payload: T}\n | {readonly [MessageResultEnvelopeProperty]: true; ok: false; error: MessageError};\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;AAE9B,MAAM,gCAAgC;","names":[]}
@@ -1,6 +1,7 @@
1
1
  import { TransportConfig, TransportDefinition, TransportType } from "./transport.js";
2
2
  import { ViewOptions } from "./view.js";
3
3
  import { Awaiter } from "./helpers.js";
4
+ import { CspOptions } from "./csp.js";
4
5
  export declare const OffscreenGlobalKey = "adnbnOffscreen";
5
6
  export declare const OffscreenGlobalAccess = "adnbnOffscreenAccess";
6
7
  export declare const OffscreenBridgeReadyMessageType = "adnbn:offscreen:ready";
@@ -40,7 +41,7 @@ export interface OffscreenConfig extends TransportConfig {
40
41
  reasons?: `${OffscreenReason}` | `${OffscreenReason}`[] | OffscreenReason | OffscreenReason[];
41
42
  justification?: string;
42
43
  }
43
- export type OffscreenOptions = OffscreenConfig & ViewOptions;
44
+ export type OffscreenOptions = OffscreenConfig & CspOptions & ViewOptions;
44
45
  export type OffscreenEntrypointOptions = Partial<OffscreenOptions>;
45
46
  export type OffscreenMainHandler<T extends TransportType> = (offscreen: T, options: OffscreenEntrypointOptions) => Awaiter<void>;
46
47
  export interface OffscreenDefinition<T extends TransportType> extends TransportDefinition<OffscreenOptions, T>, OffscreenEntrypointOptions {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/offscreen.ts"],"sourcesContent":["import {TransportConfig, TransportDefinition, TransportType} from \"@typing/transport\";\nimport {ViewOptions} from \"@typing/view\";\nimport {Awaiter} from \"@typing/helpers\";\n\nexport const OffscreenGlobalKey = \"adnbnOffscreen\";\nexport const OffscreenGlobalAccess = \"adnbnOffscreenAccess\";\nexport const OffscreenBridgeReadyMessageType = \"adnbn:offscreen:ready\";\n\nexport enum OffscreenReason {\n /** A reason used for testing purposes only. */\n Testing = \"TESTING\",\n /** The offscreen document is responsible for playing audio. */\n AudioPlayback = \"AUDIO_PLAYBACK\",\n /** The offscreen document needs to embed and script an iframe in order to modify the iframe's content. */\n IframeScripting = \"IFRAME_SCRIPTING\",\n /** The offscreen document needs to embed an iframe and scrape its DOM to extract information. */\n DOMScraping = \"DOM_SCRAPING\",\n /** The offscreen document needs to interact with Blob objects (including URL.createObjectURL()). */\n Blobs = \"BLOBS\",\n /** The offscreen document needs to use the DOMParser API. */\n DOMParser = \"DOM_PARSER\",\n /** The offscreen document needs to interact with media streams from user media (e.g. getUserMedia()). */\n UserMedia = \"USER_MEDIA\",\n /** The offscreen document needs to interact with media streams from display media (e.g. getDisplayMedia()). */\n DisplayMedia = \"DISPLAY_MEDIA\",\n /** The offscreen document needs to use WebRTC APIs. */\n WebRTC = \"WEB_RTC\",\n /** The offscreen document needs to interact with the clipboard APIs(e.g. Navigator.clipboard). */\n Clipboard = \"CLIPBOARD\",\n /** Specifies that the offscreen document needs access to localStorage. */\n LocalStorage = \"LOCAL_STORAGE\",\n /** Specifies that the offscreen document needs to spawn workers. */\n Workers = \"WORKERS\",\n /** Specifies that the offscreen document needs to use navigator.getBattery. */\n BatteryStatus = \"BATTERY_STATUS\",\n /** Specifies that the offscreen document needs to use window.matchMedia. */\n MatchMedia = \"MATCH_MEDIA\",\n /** Specifies that the offscreen document needs to use navigator.geolocation. */\n Geolocation = \"GEOLOCATION\",\n}\n\nexport interface OffscreenConfig extends TransportConfig {\n reasons?: `${OffscreenReason}` | `${OffscreenReason}`[] | OffscreenReason | OffscreenReason[];\n justification?: string;\n}\n\nexport type OffscreenOptions = OffscreenConfig & ViewOptions;\n\nexport type OffscreenEntrypointOptions = Partial<OffscreenOptions>;\n\nexport type OffscreenMainHandler<T extends TransportType> = (\n offscreen: T,\n options: OffscreenEntrypointOptions\n) => Awaiter<void>;\n\nexport interface OffscreenDefinition<T extends TransportType>\n extends TransportDefinition<OffscreenOptions, T>, OffscreenEntrypointOptions {\n main?: OffscreenMainHandler<T>;\n}\n\nexport type OffscreenUnresolvedDefinition<T extends TransportType> = Partial<OffscreenDefinition<T>>;\n"],"mappings":"AAIO,MAAM,qBAAqB;AAC3B,MAAM,wBAAwB;AAC9B,MAAM,kCAAkC;AAExC,IAAK,kBAAL,kBAAKA,qBAAL;AAEH,EAAAA,iBAAA,aAAU;AAEV,EAAAA,iBAAA,mBAAgB;AAEhB,EAAAA,iBAAA,qBAAkB;AAElB,EAAAA,iBAAA,iBAAc;AAEd,EAAAA,iBAAA,WAAQ;AAER,EAAAA,iBAAA,eAAY;AAEZ,EAAAA,iBAAA,eAAY;AAEZ,EAAAA,iBAAA,kBAAe;AAEf,EAAAA,iBAAA,YAAS;AAET,EAAAA,iBAAA,eAAY;AAEZ,EAAAA,iBAAA,kBAAe;AAEf,EAAAA,iBAAA,aAAU;AAEV,EAAAA,iBAAA,mBAAgB;AAEhB,EAAAA,iBAAA,gBAAa;AAEb,EAAAA,iBAAA,iBAAc;AA9BN,SAAAA;AAAA,GAAA;","names":["OffscreenReason"]}
1
+ {"version":3,"sources":["../../src/types/offscreen.ts"],"sourcesContent":["import {TransportConfig, TransportDefinition, TransportType} from \"@typing/transport\";\nimport {ViewOptions} from \"@typing/view\";\nimport {Awaiter} from \"@typing/helpers\";\nimport {CspOptions} from \"@typing/csp\";\n\nexport const OffscreenGlobalKey = \"adnbnOffscreen\";\nexport const OffscreenGlobalAccess = \"adnbnOffscreenAccess\";\nexport const OffscreenBridgeReadyMessageType = \"adnbn:offscreen:ready\";\n\nexport enum OffscreenReason {\n /** A reason used for testing purposes only. */\n Testing = \"TESTING\",\n /** The offscreen document is responsible for playing audio. */\n AudioPlayback = \"AUDIO_PLAYBACK\",\n /** The offscreen document needs to embed and script an iframe in order to modify the iframe's content. */\n IframeScripting = \"IFRAME_SCRIPTING\",\n /** The offscreen document needs to embed an iframe and scrape its DOM to extract information. */\n DOMScraping = \"DOM_SCRAPING\",\n /** The offscreen document needs to interact with Blob objects (including URL.createObjectURL()). */\n Blobs = \"BLOBS\",\n /** The offscreen document needs to use the DOMParser API. */\n DOMParser = \"DOM_PARSER\",\n /** The offscreen document needs to interact with media streams from user media (e.g. getUserMedia()). */\n UserMedia = \"USER_MEDIA\",\n /** The offscreen document needs to interact with media streams from display media (e.g. getDisplayMedia()). */\n DisplayMedia = \"DISPLAY_MEDIA\",\n /** The offscreen document needs to use WebRTC APIs. */\n WebRTC = \"WEB_RTC\",\n /** The offscreen document needs to interact with the clipboard APIs(e.g. Navigator.clipboard). */\n Clipboard = \"CLIPBOARD\",\n /** Specifies that the offscreen document needs access to localStorage. */\n LocalStorage = \"LOCAL_STORAGE\",\n /** Specifies that the offscreen document needs to spawn workers. */\n Workers = \"WORKERS\",\n /** Specifies that the offscreen document needs to use navigator.getBattery. */\n BatteryStatus = \"BATTERY_STATUS\",\n /** Specifies that the offscreen document needs to use window.matchMedia. */\n MatchMedia = \"MATCH_MEDIA\",\n /** Specifies that the offscreen document needs to use navigator.geolocation. */\n Geolocation = \"GEOLOCATION\",\n}\n\nexport interface OffscreenConfig extends TransportConfig {\n reasons?: `${OffscreenReason}` | `${OffscreenReason}`[] | OffscreenReason | OffscreenReason[];\n justification?: string;\n}\n\nexport type OffscreenOptions = OffscreenConfig & CspOptions & ViewOptions;\n\nexport type OffscreenEntrypointOptions = Partial<OffscreenOptions>;\n\nexport type OffscreenMainHandler<T extends TransportType> = (\n offscreen: T,\n options: OffscreenEntrypointOptions\n) => Awaiter<void>;\n\nexport interface OffscreenDefinition<T extends TransportType>\n extends TransportDefinition<OffscreenOptions, T>, OffscreenEntrypointOptions {\n main?: OffscreenMainHandler<T>;\n}\n\nexport type OffscreenUnresolvedDefinition<T extends TransportType> = Partial<OffscreenDefinition<T>>;\n"],"mappings":"AAKO,MAAM,qBAAqB;AAC3B,MAAM,wBAAwB;AAC9B,MAAM,kCAAkC;AAExC,IAAK,kBAAL,kBAAKA,qBAAL;AAEH,EAAAA,iBAAA,aAAU;AAEV,EAAAA,iBAAA,mBAAgB;AAEhB,EAAAA,iBAAA,qBAAkB;AAElB,EAAAA,iBAAA,iBAAc;AAEd,EAAAA,iBAAA,WAAQ;AAER,EAAAA,iBAAA,eAAY;AAEZ,EAAAA,iBAAA,eAAY;AAEZ,EAAAA,iBAAA,kBAAe;AAEf,EAAAA,iBAAA,YAAS;AAET,EAAAA,iBAAA,eAAY;AAEZ,EAAAA,iBAAA,kBAAe;AAEf,EAAAA,iBAAA,aAAU;AAEV,EAAAA,iBAAA,mBAAgB;AAEhB,EAAAA,iBAAA,gBAAa;AAEb,EAAAA,iBAAA,iBAAc;AA9BN,SAAAA;AAAA,GAAA;","names":["OffscreenReason"]}
@@ -1,8 +1,9 @@
1
1
  import { ViewDefinition, ViewOptions } from "./view.js";
2
+ import { CspOptions } from "./csp.js";
2
3
  export interface PageConfig {
3
4
  name?: string;
4
5
  matches?: string[];
5
6
  }
6
- export type PageEntrypointOptions = PageConfig & ViewOptions;
7
+ export type PageEntrypointOptions = PageConfig & CspOptions & ViewOptions;
7
8
  export type PageProps = PageEntrypointOptions;
8
9
  export type PageDefinition = PageEntrypointOptions & ViewDefinition<PageProps>;
@@ -73,6 +73,7 @@ export interface Plugin extends PluginName {
73
73
  page?: PluginHandler<PluginConfigOptions, PluginEntrypointResult>;
74
74
  popup?: PluginHandler<PluginConfigOptions, PluginEntrypointResult>;
75
75
  relay?: PluginHandler<PluginConfigOptions, PluginEntrypointResult>;
76
+ sandbox?: PluginHandler<PluginConfigOptions, PluginEntrypointResult>;
76
77
  service?: PluginHandler<PluginConfigOptions, PluginEntrypointResult>;
77
78
  sidebar?: PluginHandler<PluginConfigOptions, PluginEntrypointResult>;
78
79
  offscreen?: PluginHandler<PluginConfigOptions, PluginEntrypointResult>;
@@ -86,7 +87,7 @@ export type PluginHandlerCallback<O, T = void> = {
86
87
  (options: O): Awaiter<T>;
87
88
  };
88
89
  export type PluginHandlerKeys = keyof Omit<Plugin, "name">;
89
- export type PluginEntrypointKeys = keyof Pick<Plugin, "background" | "command" | "content" | "page" | "popup" | "relay" | "service" | "sidebar" | "offscreen">;
90
+ export type PluginEntrypointKeys = keyof Pick<Plugin, "background" | "command" | "content" | "page" | "popup" | "relay" | "sandbox" | "service" | "sidebar" | "offscreen">;
90
91
  export type PluginAssetKeys = keyof Pick<Plugin, "icon" | "locale">;
91
92
  export type PluginHandlerType<T extends Plugin[PluginHandlerKeys]> = T extends PluginHandlerCallback<infer O, infer R> ? {
92
93
  options: O;
@@ -1,8 +1,9 @@
1
1
  import { ViewDefinition, ViewOptions } from "./view.js";
2
+ import { CspOptions } from "./csp.js";
2
3
  export interface PopupConfig {
3
4
  icon?: string;
4
5
  apply?: boolean;
5
6
  }
6
- export type PopupEntrypointOptions = PopupConfig & ViewOptions;
7
+ export type PopupEntrypointOptions = PopupConfig & CspOptions & ViewOptions;
7
8
  export type PopupProps = PopupEntrypointOptions;
8
9
  export type PopupDefinition = PopupEntrypointOptions & ViewDefinition<PopupProps>;
@@ -0,0 +1,97 @@
1
+ import { TransportConfig, TransportDefinition, TransportType } from "./transport.js";
2
+ import { ViewOptions } from "./view.js";
3
+ import { Awaiter } from "./helpers.js";
4
+ import { MessageError, MessageSender } from "./message.js";
5
+ export declare const SandboxGlobalKey = "adnbnSandbox";
6
+ export declare const SandboxGlobalAccess = "adnbnSandboxAccess";
7
+ export declare const SandboxNamespace = "adnbn:sandbox";
8
+ export declare const SandboxReadyMessageType = "adnbn:sandbox:ready";
9
+ export declare const SandboxRequestMessageType = "adnbn:sandbox:request";
10
+ export declare const SandboxResponseMessageType = "adnbn:sandbox:response";
11
+ export declare enum SandboxAllow {
12
+ Forms = "forms",
13
+ Popups = "popups",
14
+ Modals = "modals",
15
+ Downloads = "downloads",
16
+ PointerLock = "pointer-lock",
17
+ TopNavigationByUserActivation = "top-navigation-by-user-activation"
18
+ }
19
+ export declare enum SandboxSource {
20
+ Self = "'self'",
21
+ None = "'none'",
22
+ Data = "data:",
23
+ Blob = "blob:",
24
+ UnsafeInline = "'unsafe-inline'"
25
+ }
26
+ export interface SandboxCspSources {
27
+ connect?: Array<SandboxSource | `${SandboxSource}`>;
28
+ image?: Array<SandboxSource | `${SandboxSource}`>;
29
+ style?: Array<SandboxSource | `${SandboxSource}`>;
30
+ font?: Array<SandboxSource | `${SandboxSource}`>;
31
+ media?: Array<SandboxSource | `${SandboxSource}`>;
32
+ worker?: Array<SandboxSource | `${SandboxSource}`>;
33
+ child?: Array<SandboxSource | `${SandboxSource}`>;
34
+ }
35
+ export interface SandboxCspConfig {
36
+ eval?: boolean;
37
+ inline?: boolean;
38
+ allow?: Array<SandboxAllow | `${SandboxAllow}`>;
39
+ sources?: SandboxCspSources;
40
+ }
41
+ export interface SandboxCspOptions {
42
+ csp?: SandboxCspConfig;
43
+ }
44
+ export interface SandboxConfig extends TransportConfig {
45
+ readyTimeout?: number;
46
+ requestTimeout?: number;
47
+ removeOnRequestTimeout?: boolean;
48
+ }
49
+ export type SandboxOptions = SandboxConfig & SandboxCspOptions & ViewOptions;
50
+ export type SandboxEntrypointOptions = Partial<SandboxOptions>;
51
+ export type SandboxMainHandler<T extends TransportType> = (sandbox: T, options: SandboxEntrypointOptions) => Awaiter<void>;
52
+ export interface SandboxDefinition<T extends TransportType> extends TransportDefinition<SandboxOptions, T>, SandboxEntrypointOptions {
53
+ main?: SandboxMainHandler<T>;
54
+ }
55
+ export type SandboxUnresolvedDefinition<T extends TransportType> = Partial<SandboxDefinition<T>>;
56
+ export type SandboxParameters = {
57
+ url: string;
58
+ } & Pick<SandboxConfig, "readyTimeout" | "requestTimeout" | "removeOnRequestTimeout">;
59
+ export interface SandboxReadyMessage {
60
+ type: typeof SandboxReadyMessageType;
61
+ channel: string;
62
+ name: string;
63
+ }
64
+ export interface SandboxRequestMessage {
65
+ type: typeof SandboxRequestMessageType;
66
+ channel: string;
67
+ name: string;
68
+ requestId: string;
69
+ path?: string;
70
+ args: any[];
71
+ }
72
+ export interface SandboxResponseMessage {
73
+ type: typeof SandboxResponseMessageType;
74
+ channel: string;
75
+ name: string;
76
+ requestId: string;
77
+ ok: boolean;
78
+ payload?: any;
79
+ error?: MessageError;
80
+ }
81
+ export type SandboxEnvelope = SandboxRequestMessage | SandboxResponseMessage;
82
+ /**
83
+ * Internal seam for the sandbox wire. Lives below `SandboxMessage`, invisible to callers.
84
+ *
85
+ * - `connect` establishes the channel (host: create the iframe and await the ready
86
+ * handshake; sandbox/in-memory: resolves immediately). Must be idempotent — concurrent
87
+ * callers share one connection.
88
+ * - `post` sends one already-built envelope to the peer.
89
+ * - `subscribe` attaches exactly one underlying listener and returns its remover.
90
+ * - `dispose` tears the channel down (remove listener, drop the iframe).
91
+ */
92
+ export interface SandboxPort {
93
+ connect(): Promise<void>;
94
+ post(message: SandboxEnvelope): void;
95
+ subscribe(onMessage: (message: SandboxEnvelope, sender: MessageSender) => void): () => void;
96
+ dispose(): void;
97
+ }
@@ -0,0 +1,34 @@
1
+ const SandboxGlobalKey = "adnbnSandbox";
2
+ const SandboxGlobalAccess = "adnbnSandboxAccess";
3
+ const SandboxNamespace = "adnbn:sandbox";
4
+ const SandboxReadyMessageType = `${SandboxNamespace}:ready`;
5
+ const SandboxRequestMessageType = `${SandboxNamespace}:request`;
6
+ const SandboxResponseMessageType = `${SandboxNamespace}:response`;
7
+ var SandboxAllow = /* @__PURE__ */ ((SandboxAllow2) => {
8
+ SandboxAllow2["Forms"] = "forms";
9
+ SandboxAllow2["Popups"] = "popups";
10
+ SandboxAllow2["Modals"] = "modals";
11
+ SandboxAllow2["Downloads"] = "downloads";
12
+ SandboxAllow2["PointerLock"] = "pointer-lock";
13
+ SandboxAllow2["TopNavigationByUserActivation"] = "top-navigation-by-user-activation";
14
+ return SandboxAllow2;
15
+ })(SandboxAllow || {});
16
+ var SandboxSource = /* @__PURE__ */ ((SandboxSource2) => {
17
+ SandboxSource2["Self"] = "'self'";
18
+ SandboxSource2["None"] = "'none'";
19
+ SandboxSource2["Data"] = "data:";
20
+ SandboxSource2["Blob"] = "blob:";
21
+ SandboxSource2["UnsafeInline"] = "'unsafe-inline'";
22
+ return SandboxSource2;
23
+ })(SandboxSource || {});
24
+ export {
25
+ SandboxAllow,
26
+ SandboxGlobalAccess,
27
+ SandboxGlobalKey,
28
+ SandboxNamespace,
29
+ SandboxReadyMessageType,
30
+ SandboxRequestMessageType,
31
+ SandboxResponseMessageType,
32
+ SandboxSource
33
+ };
34
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/types/sandbox.ts"],"sourcesContent":["import {TransportConfig, TransportDefinition, TransportType} from \"@typing/transport\";\nimport {ViewOptions} from \"@typing/view\";\nimport {Awaiter} from \"@typing/helpers\";\nimport {MessageError, MessageSender} from \"@typing/message\";\n\nexport const SandboxGlobalKey = \"adnbnSandbox\";\nexport const SandboxGlobalAccess = \"adnbnSandboxAccess\";\nexport const SandboxNamespace = \"adnbn:sandbox\";\nexport const SandboxReadyMessageType = `${SandboxNamespace}:ready`;\nexport const SandboxRequestMessageType = `${SandboxNamespace}:request`;\nexport const SandboxResponseMessageType = `${SandboxNamespace}:response`;\n\nexport enum SandboxAllow {\n Forms = \"forms\",\n Popups = \"popups\",\n Modals = \"modals\",\n Downloads = \"downloads\",\n PointerLock = \"pointer-lock\",\n TopNavigationByUserActivation = \"top-navigation-by-user-activation\",\n}\n\nexport enum SandboxSource {\n Self = \"'self'\",\n None = \"'none'\",\n Data = \"data:\",\n Blob = \"blob:\",\n UnsafeInline = \"'unsafe-inline'\",\n}\n\nexport interface SandboxCspSources {\n connect?: Array<SandboxSource | `${SandboxSource}`>;\n image?: Array<SandboxSource | `${SandboxSource}`>;\n style?: Array<SandboxSource | `${SandboxSource}`>;\n font?: Array<SandboxSource | `${SandboxSource}`>;\n media?: Array<SandboxSource | `${SandboxSource}`>;\n worker?: Array<SandboxSource | `${SandboxSource}`>;\n child?: Array<SandboxSource | `${SandboxSource}`>;\n}\n\nexport interface SandboxCspConfig {\n eval?: boolean;\n inline?: boolean;\n allow?: Array<SandboxAllow | `${SandboxAllow}`>;\n sources?: SandboxCspSources;\n}\n\nexport interface SandboxCspOptions {\n csp?: SandboxCspConfig;\n}\n\nexport interface SandboxConfig extends TransportConfig {\n readyTimeout?: number;\n requestTimeout?: number;\n removeOnRequestTimeout?: boolean;\n}\n\nexport type SandboxOptions = SandboxConfig & SandboxCspOptions & ViewOptions;\n\nexport type SandboxEntrypointOptions = Partial<SandboxOptions>;\n\nexport type SandboxMainHandler<T extends TransportType> = (\n sandbox: T,\n options: SandboxEntrypointOptions\n) => Awaiter<void>;\n\nexport interface SandboxDefinition<T extends TransportType>\n extends TransportDefinition<SandboxOptions, T>, SandboxEntrypointOptions {\n main?: SandboxMainHandler<T>;\n}\n\nexport type SandboxUnresolvedDefinition<T extends TransportType> = Partial<SandboxDefinition<T>>;\n\nexport type SandboxParameters = {url: string} & Pick<\n SandboxConfig,\n \"readyTimeout\" | \"requestTimeout\" | \"removeOnRequestTimeout\"\n>;\n\nexport interface SandboxReadyMessage {\n type: typeof SandboxReadyMessageType;\n channel: string;\n name: string;\n}\n\nexport interface SandboxRequestMessage {\n type: typeof SandboxRequestMessageType;\n channel: string;\n name: string;\n requestId: string;\n path?: string;\n args: any[];\n}\n\nexport interface SandboxResponseMessage {\n type: typeof SandboxResponseMessageType;\n channel: string;\n name: string;\n requestId: string;\n ok: boolean;\n payload?: any;\n error?: MessageError;\n}\n\nexport type SandboxEnvelope = SandboxRequestMessage | SandboxResponseMessage;\n\n/**\n * Internal seam for the sandbox wire. Lives below `SandboxMessage`, invisible to callers.\n *\n * - `connect` establishes the channel (host: create the iframe and await the ready\n * handshake; sandbox/in-memory: resolves immediately). Must be idempotent — concurrent\n * callers share one connection.\n * - `post` sends one already-built envelope to the peer.\n * - `subscribe` attaches exactly one underlying listener and returns its remover.\n * - `dispose` tears the channel down (remove listener, drop the iframe).\n */\nexport interface SandboxPort {\n connect(): Promise<void>;\n\n post(message: SandboxEnvelope): void;\n\n subscribe(onMessage: (message: SandboxEnvelope, sender: MessageSender) => void): () => void;\n\n dispose(): void;\n}\n"],"mappings":"AAKO,MAAM,mBAAmB;AACzB,MAAM,sBAAsB;AAC5B,MAAM,mBAAmB;AACzB,MAAM,0BAA0B,GAAG,gBAAgB;AACnD,MAAM,4BAA4B,GAAG,gBAAgB;AACrD,MAAM,6BAA6B,GAAG,gBAAgB;AAEtD,IAAK,eAAL,kBAAKA,kBAAL;AACH,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,iBAAc;AACd,EAAAA,cAAA,mCAAgC;AANxB,SAAAA;AAAA,GAAA;AASL,IAAK,gBAAL,kBAAKC,mBAAL;AACH,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,kBAAe;AALP,SAAAA;AAAA,GAAA;","names":["SandboxAllow","SandboxSource"]}
@@ -1,10 +1,11 @@
1
1
  import { ViewDefinition, ViewOptions } from "./view.js";
2
2
  import { Browser } from "./browser.js";
3
+ import { CspOptions } from "./csp.js";
3
4
  export declare const SidebarAlternativeBrowsers: ReadonlySet<Browser>;
4
5
  export interface SidebarConfig {
5
6
  icon?: string;
6
7
  apply?: boolean;
7
8
  }
8
- export type SidebarEntrypointOptions = SidebarConfig & ViewOptions;
9
+ export type SidebarEntrypointOptions = SidebarConfig & CspOptions & ViewOptions;
9
10
  export type SidebarProps = SidebarEntrypointOptions;
10
11
  export type SidebarDefinition = SidebarEntrypointOptions & ViewDefinition<SidebarProps>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/sidebar.ts"],"sourcesContent":["import {ViewDefinition, ViewOptions} from \"@typing/view\";\nimport {Browser} from \"@typing/browser\";\n\nexport const SidebarAlternativeBrowsers: ReadonlySet<Browser> = new Set([Browser.Opera, Browser.Firefox]);\n\nexport interface SidebarConfig {\n icon?: string;\n apply?: boolean;\n}\n\nexport type SidebarEntrypointOptions = SidebarConfig & ViewOptions;\n\nexport type SidebarProps = SidebarEntrypointOptions;\n\nexport type SidebarDefinition = SidebarEntrypointOptions & ViewDefinition<SidebarProps>;\n"],"mappings":"AACA,SAAQ,eAAc;AAEf,MAAM,6BAAmD,oBAAI,IAAI,CAAC,QAAQ,OAAO,QAAQ,OAAO,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/types/sidebar.ts"],"sourcesContent":["import {ViewDefinition, ViewOptions} from \"@typing/view\";\nimport {Browser} from \"@typing/browser\";\nimport {CspOptions} from \"@typing/csp\";\n\nexport const SidebarAlternativeBrowsers: ReadonlySet<Browser> = new Set([Browser.Opera, Browser.Firefox]);\n\nexport interface SidebarConfig {\n icon?: string;\n apply?: boolean;\n}\n\nexport type SidebarEntrypointOptions = SidebarConfig & CspOptions & ViewOptions;\n\nexport type SidebarProps = SidebarEntrypointOptions;\n\nexport type SidebarDefinition = SidebarEntrypointOptions & ViewDefinition<SidebarProps>;\n"],"mappings":"AACA,SAAQ,eAAc;AAGf,MAAM,6BAAmD,oBAAI,IAAI,CAAC,QAAQ,OAAO,QAAQ,OAAO,CAAC;","names":[]}
@@ -22,9 +22,13 @@ export interface TransportMessageData {
22
22
  path?: string;
23
23
  args: any[];
24
24
  }
25
- export interface TransportMessage {
25
+ export interface TransportReceiver {
26
+ watch(handler: (data: TransportMessageData, sender: MessageSender) => any): () => void;
27
+ }
28
+ export interface TransportSender {
26
29
  send(data: TransportMessageData, options?: MessageSendOptions): any;
27
- watch(handler: (data: TransportMessageData, sender: MessageSender) => any): void;
30
+ }
31
+ export interface TransportMessage extends TransportSender, TransportReceiver {
28
32
  }
29
33
  export interface TransportProvider<T extends TransportType> {
30
34
  get(): T;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "adnbn",
3
3
  "type": "module",
4
- "version": "0.6.0",
4
+ "version": "0.7.0",
5
5
  "description": "Addon Bone - Cross-browser web extension framework with shared code base",
6
6
  "homepage": "https://addonbone.com",
7
7
  "author": "Anjey Tsibylskij (https://github.com/atldays)",
@@ -84,6 +84,10 @@
84
84
  "types": "./dist/relay/index.d.ts",
85
85
  "default": "./dist/relay/index.js"
86
86
  },
87
+ "./sandbox": {
88
+ "types": "./dist/sandbox/index.d.ts",
89
+ "default": "./dist/sandbox/index.js"
90
+ },
87
91
  "./service": {
88
92
  "types": "./dist/service/index.d.ts",
89
93
  "default": "./dist/service/index.js"
@@ -142,6 +146,8 @@
142
146
  "mini-css-extract-plugin": "^2.9.2",
143
147
  "nanoid": "^5.1.4",
144
148
  "pluralize": "^8.0.0",
149
+ "postcss": "^8.5.15",
150
+ "postcss-scss": "^4.0.9",
145
151
  "rspack-plugin-virtual-module": "^1.0.1",
146
152
  "sass": "^1.83.4",
147
153
  "sass-loader": "^16.0.4",
@@ -1,2 +0,0 @@
1
- declare const _default: import("../../main/plugin.js").PluginDefinition<[]>;
2
- export default _default;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/cli/plugins/style.ts"],"sourcesContent":["import _ from \"lodash\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport {Configuration as RspackConfig, CssExtractRspackPlugin, RuleSetUse, RuleSetUseItem} from \"@rspack/core\";\n\nimport {definePlugin} from \"@main/plugin\";\n\nimport {appFilenameResolver} from \"@cli/bundler\";\n\nimport {getAppSourcePath, getResolvePath, getSharedPath} from \"@cli/resolvers/path\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\nimport {toPosix} from \"@cli/utils/path\";\n\n// prettier-ignore\nconst styleMergerLoader =\n (config: ReadonlyConfig) =>\n (sharedStyle: string, sharedPath: string): string | void => {\n const sharedDir = getResolvePath(getSharedPath(config));\n\n if (sharedPath.startsWith(sharedDir)) {\n const relativePath = path.relative(sharedDir, sharedPath);\n\n const appDir = getResolvePath(getAppSourcePath(config));\n const appPath = getResolvePath(path.join(appDir, relativePath));\n\n if (fs.existsSync(appPath)) {\n try {\n let appStyle = fs.readFileSync(appPath, \"utf8\");\n\n appStyle = appStyle.replace(/url\\((['\"]?)(.*?)\\1\\)/g, (match, quote, filePath) => {\n if (\n filePath.startsWith(\"/\") ||\n filePath.startsWith(\"http\") ||\n filePath.startsWith(\"data:\")\n ) {\n return match;\n }\n\n const cssDir = path.dirname(appPath);\n const assetAbs = path.resolve(cssDir, filePath);\n\n const sharedFileDir = path.dirname(sharedPath);\n\n const relativeToSharedFile = path.relative(sharedFileDir, assetAbs);\n\n return `url(\"${toPosix(relativeToSharedFile)}\")`;\n });\n\n return sharedStyle + \"\\n\" + appStyle;\n } catch (error) {\n console.error(error);\n }\n }\n }\n };\n\nexport default definePlugin(() => {\n return {\n name: \"adnbn:styles\",\n bundler: ({config}) => {\n const {app, cssDir, cssFilename, cssIdentName, mergeStyles} = config;\n\n const filename = appFilenameResolver(app, cssFilename, cssDir);\n const kebabApp = _.kebabCase(app);\n\n const createSassRuleSet = (rule: RuleSetUseItem): RuleSetUse => {\n const rules: RuleSetUse = [CssExtractRspackPlugin.loader, rule, \"sass-loader\"];\n\n if (mergeStyles) {\n rules.push({\n loader: \"source-modifier-loader\",\n options: {\n modify: styleMergerLoader(config),\n },\n });\n }\n\n return rules;\n };\n\n return {\n resolve: {\n extensions: [\".css\", \".scss\"],\n },\n plugins: [\n new CssExtractRspackPlugin({\n filename,\n chunkFilename: filename,\n }),\n ],\n module: {\n rules: [\n {\n test: /\\.(scss|css)$/,\n type: \"javascript/auto\",\n oneOf: [\n {\n resourceQuery: /asis/,\n use: createSassRuleSet({\n loader: \"css-loader\",\n options: {\n esModule: true,\n modules: false,\n },\n }),\n },\n {\n use: createSassRuleSet({\n loader: \"css-loader\",\n options: {\n esModule: true,\n modules: {\n exportLocalsConvention: \"as-is\",\n namedExport: false,\n localIdentName: cssIdentName.replaceAll(\"[app]\", kebabApp),\n localIdentHashSalt: kebabApp,\n },\n },\n }),\n },\n ],\n },\n ],\n },\n } satisfies RspackConfig;\n },\n };\n});\n"],"mappings":"AAAA,OAAO,OAAO;AACd,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAuC,8BAAyD;AAEhG,SAAQ,oBAAmB;AAE3B,SAAQ,2BAA0B;AAElC,SAAQ,kBAAkB,gBAAgB,qBAAoB;AAG9D,SAAQ,eAAc;AAGtB,MAAM,oBACF,CAAC,WACG,CAAC,aAAqB,eAAsC;AACxD,QAAM,YAAY,eAAe,cAAc,MAAM,CAAC;AAEtD,MAAI,WAAW,WAAW,SAAS,GAAG;AAClC,UAAM,eAAe,KAAK,SAAS,WAAW,UAAU;AAExD,UAAM,SAAS,eAAe,iBAAiB,MAAM,CAAC;AACtD,UAAM,UAAU,eAAe,KAAK,KAAK,QAAQ,YAAY,CAAC;AAE9D,QAAI,GAAG,WAAW,OAAO,GAAG;AACxB,UAAI;AACA,YAAI,WAAW,GAAG,aAAa,SAAS,MAAM;AAE9C,mBAAW,SAAS,QAAQ,0BAA0B,CAAC,OAAO,OAAO,aAAa;AAC9E,cACI,SAAS,WAAW,GAAG,KACvB,SAAS,WAAW,MAAM,KAC1B,SAAS,WAAW,OAAO,GAC7B;AACE,mBAAO;AAAA,UACX;AAEA,gBAAM,SAAS,KAAK,QAAQ,OAAO;AACnC,gBAAM,WAAW,KAAK,QAAQ,QAAQ,QAAQ;AAE9C,gBAAM,gBAAgB,KAAK,QAAQ,UAAU;AAE7C,gBAAM,uBAAuB,KAAK,SAAS,eAAe,QAAQ;AAElE,iBAAO,QAAQ,QAAQ,oBAAoB,CAAC;AAAA,QAChD,CAAC;AAED,eAAO,cAAc,OAAO;AAAA,MAChC,SAAS,OAAO;AACZ,gBAAQ,MAAM,KAAK;AAAA,MACvB;AAAA,IACJ;AAAA,EACJ;AACJ;AAER,IAAO,gBAAQ,aAAa,MAAM;AAC9B,SAAO;AAAA,IACH,MAAM;AAAA,IACN,SAAS,CAAC,EAAC,OAAM,MAAM;AACnB,YAAM,EAAC,KAAK,QAAQ,aAAa,cAAc,YAAW,IAAI;AAE9D,YAAM,WAAW,oBAAoB,KAAK,aAAa,MAAM;AAC7D,YAAM,WAAW,EAAE,UAAU,GAAG;AAEhC,YAAM,oBAAoB,CAAC,SAAqC;AAC5D,cAAM,QAAoB,CAAC,uBAAuB,QAAQ,MAAM,aAAa;AAE7E,YAAI,aAAa;AACb,gBAAM,KAAK;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,cACL,QAAQ,kBAAkB,MAAM;AAAA,YACpC;AAAA,UACJ,CAAC;AAAA,QACL;AAEA,eAAO;AAAA,MACX;AAEA,aAAO;AAAA,QACH,SAAS;AAAA,UACL,YAAY,CAAC,QAAQ,OAAO;AAAA,QAChC;AAAA,QACA,SAAS;AAAA,UACL,IAAI,uBAAuB;AAAA,YACvB;AAAA,YACA,eAAe;AAAA,UACnB,CAAC;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,UACJ,OAAO;AAAA,YACH;AAAA,cACI,MAAM;AAAA,cACN,MAAM;AAAA,cACN,OAAO;AAAA,gBACH;AAAA,kBACI,eAAe;AAAA,kBACf,KAAK,kBAAkB;AAAA,oBACnB,QAAQ;AAAA,oBACR,SAAS;AAAA,sBACL,UAAU;AAAA,sBACV,SAAS;AAAA,oBACb;AAAA,kBACJ,CAAC;AAAA,gBACL;AAAA,gBACA;AAAA,kBACI,KAAK,kBAAkB;AAAA,oBACnB,QAAQ;AAAA,oBACR,SAAS;AAAA,sBACL,UAAU;AAAA,sBACV,SAAS;AAAA,wBACL,wBAAwB;AAAA,wBACxB,aAAa;AAAA,wBACb,gBAAgB,aAAa,WAAW,SAAS,QAAQ;AAAA,wBACzD,oBAAoB;AAAA,sBACxB;AAAA,oBACJ;AAAA,kBACJ,CAAC;AAAA,gBACL;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ,CAAC;","names":[]}