adnbn 0.12.0 → 0.13.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 (128) hide show
  1. package/dist/cli/bundler/layers.d.ts +3 -3
  2. package/dist/cli/bundler/layers.js +6 -7
  3. package/dist/cli/bundler/layers.js.map +1 -1
  4. package/dist/cli/bundler/plugins/build-assets-map/BuildAssetsMapPlugin.js +42 -14
  5. package/dist/cli/bundler/plugins/build-assets-map/BuildAssetsMapPlugin.js.map +1 -1
  6. package/dist/cli/bundler/plugins/build-assets-map/normalize.d.ts +3 -0
  7. package/dist/cli/bundler/plugins/build-assets-map/normalize.js +24 -0
  8. package/dist/cli/bundler/plugins/build-assets-map/normalize.js.map +1 -0
  9. package/dist/cli/bundler/plugins/build-assets-map/templates/runtime.template.d.ts +2 -0
  10. package/dist/cli/bundler/plugins/build-assets-map/templates.d.ts +9 -0
  11. package/dist/cli/bundler/plugins/build-assets-map/templates.js +32 -0
  12. package/dist/cli/bundler/plugins/entrypoint/EntrypointPlugin.js +11 -0
  13. package/dist/cli/bundler/plugins/entrypoint/EntrypointPlugin.js.map +1 -1
  14. package/dist/cli/bundler/plugins/isolated-styles/IsolatedStylesPlugin.d.ts +1 -1
  15. package/dist/cli/bundler/plugins/isolated-styles/IsolatedStylesPlugin.js +38 -13
  16. package/dist/cli/bundler/plugins/isolated-styles/IsolatedStylesPlugin.js.map +1 -1
  17. package/dist/cli/bundler/plugins/isolated-styles/chunks.d.ts +5 -1
  18. package/dist/cli/bundler/plugins/isolated-styles/chunks.js +17 -16
  19. package/dist/cli/bundler/plugins/isolated-styles/chunks.js.map +1 -1
  20. package/dist/cli/bundler/plugins/isolated-styles/split-chunks.d.ts +4 -0
  21. package/dist/cli/bundler/plugins/isolated-styles/split-chunks.js +51 -0
  22. package/dist/cli/bundler/plugins/isolated-styles/split-chunks.js.map +1 -0
  23. package/dist/cli/bundler/plugins/isolated-styles/templates.js +36 -6
  24. package/dist/cli/plugins/content/bundler.d.ts +0 -3
  25. package/dist/cli/plugins/content/bundler.js +4 -20
  26. package/dist/cli/plugins/content/bundler.js.map +1 -1
  27. package/dist/cli/plugins/content/index.js +2 -3
  28. package/dist/cli/plugins/content/index.js.map +1 -1
  29. package/dist/cli/plugins/locale/Locale.js +5 -2
  30. package/dist/cli/plugins/locale/Locale.js.map +1 -1
  31. package/dist/cli/plugins/style/index.d.ts +1 -2
  32. package/dist/cli/plugins/style/index.js +19 -30
  33. package/dist/cli/plugins/style/index.js.map +1 -1
  34. package/dist/cli/resolvers/config.js +1 -2
  35. package/dist/cli/resolvers/config.js.map +1 -1
  36. package/dist/entry/content/adapters/react/Builder.d.ts +4 -2
  37. package/dist/entry/content/adapters/react/Builder.js +11 -5
  38. package/dist/entry/content/adapters/react/Builder.js.map +1 -1
  39. package/dist/entry/content/adapters/react/Node.js +2 -2
  40. package/dist/entry/content/adapters/react/Node.js.map +1 -1
  41. package/dist/entry/content/adapters/react/definition.d.ts +2 -0
  42. package/dist/entry/content/adapters/react/{resolvers/definition.js → definition.js} +1 -1
  43. package/dist/entry/content/adapters/react/definition.js.map +1 -0
  44. package/dist/entry/content/adapters/react/index.d.ts +1 -1
  45. package/dist/entry/content/adapters/react/index.js +1 -1
  46. package/dist/entry/content/adapters/react/index.js.map +1 -1
  47. package/dist/entry/content/adapters/vanilla/Builder.d.ts +4 -2
  48. package/dist/entry/content/adapters/vanilla/Builder.js +14 -5
  49. package/dist/entry/content/adapters/vanilla/Builder.js.map +1 -1
  50. package/dist/entry/content/adapters/vanilla/definition.d.ts +2 -0
  51. package/dist/entry/content/adapters/vanilla/{resolvers/definition.js → definition.js} +2 -2
  52. package/dist/entry/content/adapters/vanilla/definition.js.map +1 -0
  53. package/dist/entry/content/adapters/vanilla/index.d.ts +1 -1
  54. package/dist/entry/content/adapters/vanilla/index.js +1 -1
  55. package/dist/entry/content/adapters/vanilla/index.js.map +1 -1
  56. package/dist/entry/content/adapters/vanilla/utils.d.ts +1 -0
  57. package/dist/entry/content/adapters/vanilla/utils.js +7 -0
  58. package/dist/entry/content/adapters/vanilla/utils.js.map +1 -0
  59. package/dist/entry/content/lifecycle/Builder.d.ts +10 -4
  60. package/dist/entry/content/lifecycle/Builder.js +102 -60
  61. package/dist/entry/content/lifecycle/Builder.js.map +1 -1
  62. package/dist/entry/content/lifecycle/MountBuilder.d.ts +6 -3
  63. package/dist/entry/content/lifecycle/MountBuilder.js +32 -16
  64. package/dist/entry/content/lifecycle/MountBuilder.js.map +1 -1
  65. package/dist/entry/content/lifecycle/context/ContainerRegistry.d.ts +7 -0
  66. package/dist/entry/content/lifecycle/context/ContainerRegistry.js +45 -0
  67. package/dist/entry/content/lifecycle/context/ContainerRegistry.js.map +1 -0
  68. package/dist/entry/content/lifecycle/context/Context.d.ts +6 -3
  69. package/dist/entry/content/lifecycle/context/Context.js +21 -6
  70. package/dist/entry/content/lifecycle/context/Context.js.map +1 -1
  71. package/dist/entry/content/lifecycle/context/ManagedContext.d.ts +4 -1
  72. package/dist/entry/content/lifecycle/context/ManagedContext.js +7 -0
  73. package/dist/entry/content/lifecycle/context/ManagedContext.js.map +1 -1
  74. package/dist/entry/content/lifecycle/context/index.d.ts +1 -0
  75. package/dist/entry/content/lifecycle/context/index.js +6 -4
  76. package/dist/entry/content/lifecycle/context/index.js.map +1 -1
  77. package/dist/entry/content/lifecycle/markers/AttributeMarker.js +3 -1
  78. package/dist/entry/content/lifecycle/markers/AttributeMarker.js.map +1 -1
  79. package/dist/entry/content/lifecycle/nodes/EventNode.d.ts +4 -2
  80. package/dist/entry/content/lifecycle/nodes/EventNode.js +7 -2
  81. package/dist/entry/content/lifecycle/nodes/EventNode.js.map +1 -1
  82. package/dist/entry/content/lifecycle/nodes/FrameNode.d.ts +2 -1
  83. package/dist/entry/content/lifecycle/nodes/FrameNode.js +3 -0
  84. package/dist/entry/content/lifecycle/nodes/FrameNode.js.map +1 -1
  85. package/dist/entry/content/lifecycle/nodes/MarkerNode.d.ts +1 -1
  86. package/dist/entry/content/lifecycle/nodes/MarkerNode.js.map +1 -1
  87. package/dist/entry/content/lifecycle/nodes/MountNode.d.ts +7 -3
  88. package/dist/entry/content/lifecycle/nodes/MountNode.js +47 -12
  89. package/dist/entry/content/lifecycle/nodes/MountNode.js.map +1 -1
  90. package/dist/entry/content/lifecycle/nodes/Node.d.ts +1 -1
  91. package/dist/entry/content/lifecycle/nodes/Node.js.map +1 -1
  92. package/dist/entry/content/lifecycle/nodes/RenderNode.d.ts +13 -4
  93. package/dist/entry/content/lifecycle/nodes/RenderNode.js +71 -6
  94. package/dist/entry/content/lifecycle/nodes/RenderNode.js.map +1 -1
  95. package/dist/entry/content/lifecycle/nodes/ShadowNode.d.ts +2 -1
  96. package/dist/entry/content/lifecycle/nodes/ShadowNode.js +3 -0
  97. package/dist/entry/content/lifecycle/nodes/ShadowNode.js.map +1 -1
  98. package/dist/entry/content/lifecycle/types.d.ts +28 -0
  99. package/dist/entry/content/resolvers/watch.d.ts +1 -1
  100. package/dist/entry/content/resolvers/watch.js +29 -14
  101. package/dist/entry/content/resolvers/watch.js.map +1 -1
  102. package/dist/entry/relay/index.js.map +1 -1
  103. package/dist/shared/locale/index.d.ts +1 -1
  104. package/dist/shared/locale/index.js +3 -1
  105. package/dist/shared/locale/index.js.map +1 -1
  106. package/dist/shared/locale/messages.d.ts +4 -0
  107. package/dist/shared/locale/messages.js +12 -0
  108. package/dist/shared/locale/messages.js.map +1 -1
  109. package/dist/types/content/common.d.ts +8 -0
  110. package/dist/types/content/common.js.map +1 -1
  111. package/dist/types/content/definition.d.ts +5 -0
  112. package/dist/types/locale.d.ts +3 -0
  113. package/dist/types/locale.js.map +1 -1
  114. package/package.json +1 -3
  115. package/types/client.d.ts +3 -3
  116. package/dist/cli/plugins/style/types.d.ts +0 -5
  117. package/dist/entry/content/adapters/react/resolvers/definition.d.ts +0 -2
  118. package/dist/entry/content/adapters/react/resolvers/definition.js.map +0 -1
  119. package/dist/entry/content/adapters/react/resolvers/render.d.ts +0 -2
  120. package/dist/entry/content/adapters/react/resolvers/render.js +0 -9
  121. package/dist/entry/content/adapters/react/resolvers/render.js.map +0 -1
  122. package/dist/entry/content/adapters/vanilla/resolvers/definition.d.ts +0 -2
  123. package/dist/entry/content/adapters/vanilla/resolvers/definition.js.map +0 -1
  124. package/dist/entry/content/adapters/vanilla/resolvers/render.d.ts +0 -3
  125. package/dist/entry/content/adapters/vanilla/resolvers/render.js +0 -15
  126. package/dist/entry/content/adapters/vanilla/resolvers/render.js.map +0 -1
  127. /package/dist/{cli/plugins/style → entry/content/lifecycle}/types.js +0 -0
  128. /package/dist/{cli/plugins/style → entry/content/lifecycle}/types.js.map +0 -0
@@ -3,13 +3,13 @@ import path from "path";
3
3
  import fs from "fs";
4
4
  import { CssExtractRspackPlugin } from "@rspack/core";
5
5
  import { mergeStyleSources } from "./utils.js";
6
- import { IsolatedStylesLayer } from "./../../../cli/bundler/layers.js";
6
+ import { DocumentStylesLayer, DefaultStylesLayer } from "./../../../cli/bundler/layers.js";
7
7
  import { definePlugin } from "./../../../main/plugin.js";
8
8
  import { appFilenameResolver } from "./../../../cli/bundler/index.js";
9
9
  import { getAppSourcePath, getResolvePath, getSharedPath } from "./../../../cli/resolvers/path.js";
10
10
  import { toPosix } from "./../../../cli/utils/path.js";
11
- const IsolatedAsIsLoaderIdent = "adnbn-isolated-asis";
12
- const IsolatedModulesLoaderIdent = "adnbn-isolated-modules";
11
+ const DefaultAsIsLoaderIdent = "adnbn-default-asis";
12
+ const DefaultModulesLoaderIdent = "adnbn-default-modules";
13
13
  const styleMergerLoader = (config) => (sharedStyle, sharedPath) => {
14
14
  const sharedDir = getResolvePath(getSharedPath(config));
15
15
  if (sharedPath.startsWith(sharedDir)) {
@@ -32,7 +32,7 @@ const styleMergerLoader = (config) => (sharedStyle, sharedPath) => {
32
32
  }
33
33
  }
34
34
  };
35
- var style_default = definePlugin(({ isolationIssuerLayer } = {}) => {
35
+ var style_default = definePlugin(() => {
36
36
  return {
37
37
  name: "adnbn:styles",
38
38
  bundler: ({ config }) => {
@@ -51,19 +51,19 @@ var style_default = definePlugin(({ isolationIssuerLayer } = {}) => {
51
51
  }
52
52
  return rules;
53
53
  };
54
- const createStyleRules = (isolated = false) => [
54
+ const createStyleRules = (defaultStyles = false) => [
55
55
  {
56
56
  resourceQuery: /[?&]asis(?:[=&]|$)/,
57
57
  use: createSassRuleSet({
58
58
  loader: "css-loader",
59
- ...isolated ? { ident: IsolatedAsIsLoaderIdent } : {},
59
+ ...defaultStyles ? { ident: DefaultAsIsLoaderIdent } : {},
60
60
  options: { esModule: true, modules: false }
61
61
  })
62
62
  },
63
63
  {
64
64
  use: createSassRuleSet({
65
65
  loader: "css-loader",
66
- ...isolated ? { ident: IsolatedModulesLoaderIdent } : {},
66
+ ...defaultStyles ? { ident: DefaultModulesLoaderIdent } : {},
67
67
  options: {
68
68
  esModule: true,
69
69
  modules: {
@@ -86,35 +86,24 @@ var style_default = definePlugin(({ isolationIssuerLayer } = {}) => {
86
86
  chunkFilename: filename
87
87
  })
88
88
  ],
89
- optimization: {
90
- splitChunks: {
91
- cacheGroups: {
92
- adnbnIsolatedStyles: {
93
- type: "css/mini-extract",
94
- layer: IsolatedStylesLayer,
95
- chunks: "all",
96
- enforce: true,
97
- name: false,
98
- priority: 100
99
- }
100
- }
101
- }
102
- },
103
89
  module: {
104
90
  rules: [
105
91
  {
106
92
  test: /\.(scss|css)$/,
107
93
  type: "javascript/auto",
108
94
  oneOf: [
109
- ...isolationIssuerLayer === void 0 ? [] : [
110
- {
111
- issuerLayer: isolationIssuerLayer,
112
- resourceQuery: /[?&]isolation(?:[=&]|$)/,
113
- layer: IsolatedStylesLayer,
114
- oneOf: createStyleRules(true)
115
- }
116
- ],
117
- { oneOf: createStyleRules() }
95
+ {
96
+ resourceQuery: /[?&]unisolated(?:[=&]|$)/,
97
+ layer: DocumentStylesLayer,
98
+ oneOf: createStyleRules()
99
+ },
100
+ {
101
+ // Nested CSS imports preserve an explicit document destination.
102
+ issuerLayer: DocumentStylesLayer,
103
+ layer: DocumentStylesLayer,
104
+ oneOf: createStyleRules()
105
+ },
106
+ { layer: DefaultStylesLayer, oneOf: createStyleRules(true) }
118
107
  ]
119
108
  }
120
109
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/plugins/style/index.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 {mergeStyleSources} from \"./utils\";\nimport type {StylePluginOptions} from \"./types\";\nimport {IsolatedStylesLayer} from \"@cli/bundler/layers\";\n\nimport {definePlugin} from \"@main/plugin\";\n\nimport {appFilenameResolver} from \"@cli/bundler\";\nimport {getAppSourcePath, getResolvePath, getSharedPath} from \"@cli/resolvers/path\";\nimport {toPosix} from \"@cli/utils/path\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\n\n// CssExtract also identifies dependencies by loader request, not just by layer.\n// Keep isolated requests distinct from ordinary CSS and from each other's options.\nconst IsolatedAsIsLoaderIdent = \"adnbn-isolated-asis\";\nconst IsolatedModulesLoaderIdent = \"adnbn-isolated-modules\";\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 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 mergeStyleSources(sharedStyle, appStyle);\n }\n }\n };\n\nexport default definePlugin(({isolationIssuerLayer}: StylePluginOptions = {}) => {\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 const createStyleRules = (isolated = false) => [\n {\n resourceQuery: /[?&]asis(?:[=&]|$)/,\n use: createSassRuleSet({\n loader: \"css-loader\",\n ...(isolated ? {ident: IsolatedAsIsLoaderIdent} : {}),\n options: {esModule: true, modules: false},\n }),\n },\n {\n use: createSassRuleSet({\n loader: \"css-loader\",\n ...(isolated ? {ident: IsolatedModulesLoaderIdent} : {}),\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 return {\n resolve: {\n extensions: [\".css\", \".scss\"],\n },\n plugins: [\n new CssExtractRspackPlugin({\n filename,\n chunkFilename: filename,\n }),\n ],\n optimization: {\n splitChunks: {\n cacheGroups: {\n adnbnIsolatedStyles: {\n type: \"css/mini-extract\",\n layer: IsolatedStylesLayer,\n chunks: \"all\",\n enforce: true,\n name: false,\n priority: 100,\n },\n },\n },\n },\n module: {\n rules: [\n {\n test: /\\.(scss|css)$/,\n type: \"javascript/auto\",\n oneOf: [\n ...(isolationIssuerLayer === undefined\n ? []\n : [\n {\n issuerLayer: isolationIssuerLayer,\n resourceQuery: /[?&]isolation(?:[=&]|$)/,\n layer: IsolatedStylesLayer,\n oneOf: createStyleRules(true),\n },\n ]),\n {oneOf: createStyleRules()},\n ],\n },\n ],\n },\n } satisfies RspackConfig;\n },\n };\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/cli/plugins/style/index.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 {mergeStyleSources} from \"./utils\";\nimport {DocumentStylesLayer, DefaultStylesLayer} from \"@cli/bundler/layers\";\n\nimport {definePlugin} from \"@main/plugin\";\n\nimport {appFilenameResolver} from \"@cli/bundler\";\nimport {getAppSourcePath, getResolvePath, getSharedPath} from \"@cli/resolvers/path\";\nimport {toPosix} from \"@cli/utils/path\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\n\n// CssExtract also identifies dependencies by loader request, not just by layer.\n// Keep default and document styles distinct even when their contents are identical.\nconst DefaultAsIsLoaderIdent = \"adnbn-default-asis\";\nconst DefaultModulesLoaderIdent = \"adnbn-default-modules\";\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 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 mergeStyleSources(sharedStyle, appStyle);\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 const createStyleRules = (defaultStyles = false) => [\n {\n resourceQuery: /[?&]asis(?:[=&]|$)/,\n use: createSassRuleSet({\n loader: \"css-loader\",\n ...(defaultStyles ? {ident: DefaultAsIsLoaderIdent} : {}),\n options: {esModule: true, modules: false},\n }),\n },\n {\n use: createSassRuleSet({\n loader: \"css-loader\",\n ...(defaultStyles ? {ident: DefaultModulesLoaderIdent} : {}),\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 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: /[?&]unisolated(?:[=&]|$)/,\n layer: DocumentStylesLayer,\n oneOf: createStyleRules(),\n },\n {\n // Nested CSS imports preserve an explicit document destination.\n issuerLayer: DocumentStylesLayer,\n layer: DocumentStylesLayer,\n oneOf: createStyleRules(),\n },\n {layer: DefaultStylesLayer, oneOf: createStyleRules(true)},\n ],\n },\n ],\n },\n } satisfies RspackConfig;\n },\n };\n});\n"],"mappings":"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","names":[]}
@@ -29,7 +29,6 @@ import {
29
29
  pluginView
30
30
  } from "../plugins/index.js";
31
31
  import { fromRootPath, getAppPath, getAppSourcePath, getConfigFile } from "../resolvers/path.js";
32
- import { isContentLayer } from "./../../cli/bundler/layers.js";
33
32
  import { Command, Mode, Workspace } from "./../../types/app.js";
34
33
  import { Browser } from "./../../types/browser.js";
35
34
  import { Language, LanguageCodes } from "./../../types/locale.js";
@@ -303,7 +302,7 @@ var config_default = async (config) => {
303
302
  pluginReact(),
304
303
  pluginIcon(),
305
304
  pluginAsset(),
306
- pluginStyle({ isolationIssuerLayer: isContentLayer }),
305
+ pluginStyle(),
307
306
  pluginLocale(),
308
307
  pluginMeta(),
309
308
  pluginContent(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/resolvers/config.ts"],"sourcesContent":["import {existsSync} from \"fs\";\nimport dotenv, {type DotenvParseOutput} from \"dotenv\";\nimport {loadConfig} from \"c12\";\nimport _ from \"lodash\";\n\nimport {\n pluginAsset,\n pluginBackground,\n pluginBundler,\n pluginContent,\n pluginDotenv,\n pluginHtml,\n pluginIcon,\n pluginLocale,\n pluginMeta,\n pluginOffscreen,\n pluginManifest,\n pluginOptimization,\n pluginOptions,\n pluginOutput,\n pluginPage,\n pluginPopup,\n pluginPublic,\n pluginReact,\n pluginSandbox,\n pluginSidebar,\n pluginStyle,\n pluginTypescript,\n pluginVersion,\n pluginView,\n} from \"../plugins\";\n\nimport {fromRootPath, getAppPath, getAppSourcePath, getConfigFile} from \"../resolvers/path\";\nimport {isContentLayer} from \"@cli/bundler/layers\";\n\nimport type {Config, OptionalConfig, ReadonlyConfig, UserConfig} from \"@typing/config\";\nimport {Command, Mode, Workspace} from \"@typing/app\";\nimport {Browser} from \"@typing/browser\";\nimport {Plugin} from \"@typing/plugin\";\nimport {ManifestVersion} from \"@typing/manifest\";\nimport {Language, LanguageCodes} from \"@typing/locale\";\nimport {DefaultIconGroupName} from \"@typing/icon\";\n\nconst resolveLanguage = (lang?: `${Language}` | Language): Language => {\n if (!lang) {\n return Language.English;\n }\n\n if (LanguageCodes.has(lang)) {\n return lang as Language;\n }\n\n throw new Error(`Invalid language \"${lang}\" provided by config`);\n};\n\nconst resolveWorkspace = (workspace?: Workspace | `${Workspace}`): Workspace => {\n if (!workspace) {\n return Workspace.Single;\n }\n\n if (Object.values(Workspace).includes(workspace as Workspace)) {\n return workspace as Workspace;\n }\n\n throw new Error(`Invalid workspace \"${workspace}\" provided by config`);\n};\n\nconst resolveSharedDir = (workspace: Workspace, sharedDir: string): string => {\n return workspace === Workspace.Multi ? sharedDir : \".\";\n};\n\nconst getUserConfig = async (config: ReadonlyConfig): Promise<UserConfig> => {\n const configFilePath = getConfigFile(config);\n\n if (existsSync(configFilePath)) {\n const {config: userConfig} = await loadConfig<UserConfig>({\n configFile: configFilePath,\n dotenv: true,\n });\n\n if (config.debug) {\n console.log(\"Loaded user config:\", configFilePath);\n }\n\n return userConfig || {};\n } else if (config.debug) {\n console.warn(\"Config file not found:\", configFilePath);\n }\n\n return {};\n};\n\nconst validateConfig = (config: ReadonlyConfig): ReadonlyConfig => {\n const {\n outDir,\n srcDir,\n sharedDir,\n appsDir,\n appSrcDir,\n jsDir,\n cssDir,\n assetsDir,\n htmlDir,\n publicDir,\n localeDir,\n iconSrcDir,\n iconOutDir,\n } = config;\n\n if (\n [\n outDir,\n srcDir,\n sharedDir,\n appsDir,\n appSrcDir,\n jsDir,\n cssDir,\n assetsDir,\n htmlDir,\n publicDir,\n localeDir,\n iconSrcDir,\n iconOutDir,\n ]\n .filter(dir => _.isString(dir))\n .some(dir => dir.includes(\"..\"))\n ) {\n throw new Error('Directory paths cannot contain relative paths (\"..\") for security reasons.');\n }\n\n if (appsDir === sharedDir) {\n throw new Error(\"Apps directory (appsDir) and shared directory (sharedDir) cannot be the same.\");\n }\n\n if (srcDir === outDir) {\n throw new Error(\"Source directory (srcDir) and destination directory (outputDir) cannot be the same.\");\n }\n\n if (srcDir === \".\") {\n throw new Error('Source directory cannot be the root directory (\".\") for security reasons.');\n }\n\n if (publicDir === \".\" || [srcDir, outDir, appSrcDir].includes(publicDir)) {\n throw new Error(\n 'Public directory cannot be the root directory (\".\") or intersect with other root directories for security reasons.'\n );\n }\n\n return config;\n};\n\nconst updateLocalDotenv = (config: ReadonlyConfig): DotenvParseOutput => {\n const {mode, app, browser, manifestVersion} = config;\n\n const localVars: DotenvParseOutput = {\n APP: app,\n BROWSER: browser,\n MODE: mode,\n MANIFEST_VERSION: String(manifestVersion),\n };\n\n Object.assign(process.env, localVars);\n\n return localVars;\n};\n\nconst loadDotenv = (config: ReadonlyConfig): DotenvParseOutput => {\n const {mode, browser, debug} = config;\n\n const preset = [\n `.env.${mode}.${browser}.local`,\n `.env.${mode}.${browser}`,\n `.env.${browser}.local`,\n `.env.${browser}`,\n `.env.${mode}.local`,\n `.env.${mode}`,\n `.env.local`,\n `.env`,\n ];\n\n const appSourcePaths = preset.map(file => getAppSourcePath(config, file));\n const appPaths = preset.map(file => getAppPath(config, file));\n const rootPaths = preset.map(file => fromRootPath(config, file));\n\n const paths = [...appSourcePaths, ...appPaths, ...rootPaths];\n\n const {parsed: fileVars = {}} = dotenv.config({path: paths, quiet: !debug});\n\n return {...fileVars, ...updateLocalDotenv(config)};\n};\n\nexport default async (config: OptionalConfig): Promise<Config> => {\n let {\n command = Command.Build,\n debug = false,\n configFile = \"adnbn.config.ts\",\n browser = Browser.Chrome,\n app = \"myapp\",\n name = app,\n description,\n shortName,\n version = \"VERSION\",\n minimumVersion = \"MINIMUM_VERSION\",\n author = undefined,\n homepage = \"HOMEPAGE\",\n icon = DefaultIconGroupName,\n lang = Language.English,\n incognito,\n specific,\n workspace = Workspace.Single,\n rootDir = \".\",\n outDir = \"dist\",\n srcDir = \"src\",\n sharedDir = \"shared\",\n appsDir = \"apps\",\n appSrcDir = \".\",\n localeDir = \"locales\",\n iconSrcDir = \"icons\",\n iconOutDir = \"icons\",\n jsDir = \"js\",\n cssDir = \"css\",\n assetsDir = \"assets\",\n publicDir = \"public\",\n htmlDir = \".\",\n html = [],\n bundler = {},\n env = {},\n manifest,\n manifestVersion = (new Set<Browser>([Browser.Safari]).has(browser) ? 2 : 3) as ManifestVersion,\n mode = Mode.Development,\n analyze = false,\n plugins = [],\n mergeBackground = false,\n mergeCommands = false,\n mergeContentScripts = false,\n concatContentScripts = true,\n mergeStyles = true,\n mergeIcons = false,\n mergeLocales = true,\n mergePages = false,\n mergePopup = false,\n mergePublic = false,\n multiplePopup = false,\n mergeSidebar = false,\n multipleSidebar = false,\n mergeRelay = false,\n mergeService = false,\n mergeOffscreen = false,\n mergeSandbox = false,\n commonChunks = true,\n artifactName = \"[name]-[browser]-[mv]\",\n assetsFilename = mode === Mode.Production && command === Command.Build && !debug\n ? \"[contenthash:4][ext]\"\n : \"[name]-[contenthash:4][ext]\",\n jsFilename = mode === Mode.Production && command === Command.Build && !debug\n ? \"[contenthash:5].js\"\n : \"[name].js\",\n cssFilename = mode === Mode.Production && command === Command.Build && !debug\n ? \"[contenthash:5].css\"\n : \"[name].css\",\n cssIdentName = mode === Mode.Production && command === Command.Build && !debug\n ? \"[app]-[hash:base64:5]\"\n : \"[local]-[hash:base64:5]\",\n } = config;\n\n let resolvedConfig: Config = {\n command,\n debug,\n mode,\n browser,\n app,\n name,\n description,\n shortName,\n version,\n minimumVersion,\n author,\n homepage,\n lang: resolveLanguage(lang),\n icon,\n incognito,\n specific,\n manifest,\n manifestVersion,\n workspace: resolveWorkspace(workspace),\n rootDir,\n outDir,\n srcDir,\n sharedDir,\n appsDir,\n appSrcDir,\n jsDir,\n cssDir,\n assetsDir,\n publicDir,\n htmlDir,\n localeDir,\n iconSrcDir,\n iconOutDir,\n html,\n bundler,\n env,\n plugins,\n analyze,\n configFile,\n mergeBackground,\n mergeCommands,\n mergeContentScripts,\n concatContentScripts,\n mergeStyles,\n mergeIcons,\n mergeLocales,\n mergePages,\n mergePopup,\n mergePublic,\n multiplePopup,\n mergeSidebar,\n multipleSidebar,\n mergeRelay,\n mergeService,\n mergeOffscreen,\n mergeSandbox,\n commonChunks,\n artifactName,\n assetsFilename,\n jsFilename,\n cssFilename,\n cssIdentName,\n };\n\n let vars = loadDotenv(resolvedConfig);\n\n const {\n plugins: userPlugins = [],\n lang: userLang,\n workspace: userWorkspace,\n ...userConfig\n } = await getUserConfig(resolvedConfig);\n\n resolvedConfig = {\n ...resolvedConfig,\n ...userConfig,\n lang: resolveLanguage(userLang ?? resolvedConfig.lang),\n workspace: resolveWorkspace(userWorkspace ?? resolvedConfig.workspace),\n };\n\n resolvedConfig.sharedDir = resolveSharedDir(resolvedConfig.workspace, resolvedConfig.sharedDir);\n\n resolvedConfig = validateConfig(resolvedConfig);\n\n vars = {...vars, ...loadDotenv(resolvedConfig)};\n\n /**\n * IMPORTANT: the order of plugins matters. Early plugins prepare the environment and artifacts for the following ones\n * (e.g., environment variables/output/transpilation/assets → page/version generation → bundling).\n * Reordering may result in missing artifacts, incorrect configuration, or build failures.\n */\n const corePlugins: Plugin[] = [\n pluginDotenv(vars),\n pluginOutput(),\n pluginOptimization(),\n pluginTypescript(),\n pluginReact(),\n pluginIcon(),\n pluginAsset(),\n pluginStyle({isolationIssuerLayer: isContentLayer}),\n pluginLocale(),\n pluginMeta(),\n pluginContent(),\n pluginBackground(),\n pluginOptions(),\n pluginPopup(),\n pluginPublic(),\n pluginSidebar(),\n pluginOffscreen(),\n pluginSandbox(),\n pluginPage(),\n pluginView(),\n pluginHtml(),\n pluginVersion(),\n pluginBundler(),\n pluginManifest(),\n ];\n\n return {\n ...resolvedConfig,\n plugins: [...plugins, ...userPlugins, ...corePlugins],\n };\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/cli/resolvers/config.ts"],"sourcesContent":["import {existsSync} from \"fs\";\nimport dotenv, {type DotenvParseOutput} from \"dotenv\";\nimport {loadConfig} from \"c12\";\nimport _ from \"lodash\";\n\nimport {\n pluginAsset,\n pluginBackground,\n pluginBundler,\n pluginContent,\n pluginDotenv,\n pluginHtml,\n pluginIcon,\n pluginLocale,\n pluginMeta,\n pluginOffscreen,\n pluginManifest,\n pluginOptimization,\n pluginOptions,\n pluginOutput,\n pluginPage,\n pluginPopup,\n pluginPublic,\n pluginReact,\n pluginSandbox,\n pluginSidebar,\n pluginStyle,\n pluginTypescript,\n pluginVersion,\n pluginView,\n} from \"../plugins\";\n\nimport {fromRootPath, getAppPath, getAppSourcePath, getConfigFile} from \"../resolvers/path\";\n\nimport type {Config, OptionalConfig, ReadonlyConfig, UserConfig} from \"@typing/config\";\nimport {Command, Mode, Workspace} from \"@typing/app\";\nimport {Browser} from \"@typing/browser\";\nimport {Plugin} from \"@typing/plugin\";\nimport {ManifestVersion} from \"@typing/manifest\";\nimport {Language, LanguageCodes} from \"@typing/locale\";\nimport {DefaultIconGroupName} from \"@typing/icon\";\n\nconst resolveLanguage = (lang?: `${Language}` | Language): Language => {\n if (!lang) {\n return Language.English;\n }\n\n if (LanguageCodes.has(lang)) {\n return lang as Language;\n }\n\n throw new Error(`Invalid language \"${lang}\" provided by config`);\n};\n\nconst resolveWorkspace = (workspace?: Workspace | `${Workspace}`): Workspace => {\n if (!workspace) {\n return Workspace.Single;\n }\n\n if (Object.values(Workspace).includes(workspace as Workspace)) {\n return workspace as Workspace;\n }\n\n throw new Error(`Invalid workspace \"${workspace}\" provided by config`);\n};\n\nconst resolveSharedDir = (workspace: Workspace, sharedDir: string): string => {\n return workspace === Workspace.Multi ? sharedDir : \".\";\n};\n\nconst getUserConfig = async (config: ReadonlyConfig): Promise<UserConfig> => {\n const configFilePath = getConfigFile(config);\n\n if (existsSync(configFilePath)) {\n const {config: userConfig} = await loadConfig<UserConfig>({\n configFile: configFilePath,\n dotenv: true,\n });\n\n if (config.debug) {\n console.log(\"Loaded user config:\", configFilePath);\n }\n\n return userConfig || {};\n } else if (config.debug) {\n console.warn(\"Config file not found:\", configFilePath);\n }\n\n return {};\n};\n\nconst validateConfig = (config: ReadonlyConfig): ReadonlyConfig => {\n const {\n outDir,\n srcDir,\n sharedDir,\n appsDir,\n appSrcDir,\n jsDir,\n cssDir,\n assetsDir,\n htmlDir,\n publicDir,\n localeDir,\n iconSrcDir,\n iconOutDir,\n } = config;\n\n if (\n [\n outDir,\n srcDir,\n sharedDir,\n appsDir,\n appSrcDir,\n jsDir,\n cssDir,\n assetsDir,\n htmlDir,\n publicDir,\n localeDir,\n iconSrcDir,\n iconOutDir,\n ]\n .filter(dir => _.isString(dir))\n .some(dir => dir.includes(\"..\"))\n ) {\n throw new Error('Directory paths cannot contain relative paths (\"..\") for security reasons.');\n }\n\n if (appsDir === sharedDir) {\n throw new Error(\"Apps directory (appsDir) and shared directory (sharedDir) cannot be the same.\");\n }\n\n if (srcDir === outDir) {\n throw new Error(\"Source directory (srcDir) and destination directory (outputDir) cannot be the same.\");\n }\n\n if (srcDir === \".\") {\n throw new Error('Source directory cannot be the root directory (\".\") for security reasons.');\n }\n\n if (publicDir === \".\" || [srcDir, outDir, appSrcDir].includes(publicDir)) {\n throw new Error(\n 'Public directory cannot be the root directory (\".\") or intersect with other root directories for security reasons.'\n );\n }\n\n return config;\n};\n\nconst updateLocalDotenv = (config: ReadonlyConfig): DotenvParseOutput => {\n const {mode, app, browser, manifestVersion} = config;\n\n const localVars: DotenvParseOutput = {\n APP: app,\n BROWSER: browser,\n MODE: mode,\n MANIFEST_VERSION: String(manifestVersion),\n };\n\n Object.assign(process.env, localVars);\n\n return localVars;\n};\n\nconst loadDotenv = (config: ReadonlyConfig): DotenvParseOutput => {\n const {mode, browser, debug} = config;\n\n const preset = [\n `.env.${mode}.${browser}.local`,\n `.env.${mode}.${browser}`,\n `.env.${browser}.local`,\n `.env.${browser}`,\n `.env.${mode}.local`,\n `.env.${mode}`,\n `.env.local`,\n `.env`,\n ];\n\n const appSourcePaths = preset.map(file => getAppSourcePath(config, file));\n const appPaths = preset.map(file => getAppPath(config, file));\n const rootPaths = preset.map(file => fromRootPath(config, file));\n\n const paths = [...appSourcePaths, ...appPaths, ...rootPaths];\n\n const {parsed: fileVars = {}} = dotenv.config({path: paths, quiet: !debug});\n\n return {...fileVars, ...updateLocalDotenv(config)};\n};\n\nexport default async (config: OptionalConfig): Promise<Config> => {\n let {\n command = Command.Build,\n debug = false,\n configFile = \"adnbn.config.ts\",\n browser = Browser.Chrome,\n app = \"myapp\",\n name = app,\n description,\n shortName,\n version = \"VERSION\",\n minimumVersion = \"MINIMUM_VERSION\",\n author = undefined,\n homepage = \"HOMEPAGE\",\n icon = DefaultIconGroupName,\n lang = Language.English,\n incognito,\n specific,\n workspace = Workspace.Single,\n rootDir = \".\",\n outDir = \"dist\",\n srcDir = \"src\",\n sharedDir = \"shared\",\n appsDir = \"apps\",\n appSrcDir = \".\",\n localeDir = \"locales\",\n iconSrcDir = \"icons\",\n iconOutDir = \"icons\",\n jsDir = \"js\",\n cssDir = \"css\",\n assetsDir = \"assets\",\n publicDir = \"public\",\n htmlDir = \".\",\n html = [],\n bundler = {},\n env = {},\n manifest,\n manifestVersion = (new Set<Browser>([Browser.Safari]).has(browser) ? 2 : 3) as ManifestVersion,\n mode = Mode.Development,\n analyze = false,\n plugins = [],\n mergeBackground = false,\n mergeCommands = false,\n mergeContentScripts = false,\n concatContentScripts = true,\n mergeStyles = true,\n mergeIcons = false,\n mergeLocales = true,\n mergePages = false,\n mergePopup = false,\n mergePublic = false,\n multiplePopup = false,\n mergeSidebar = false,\n multipleSidebar = false,\n mergeRelay = false,\n mergeService = false,\n mergeOffscreen = false,\n mergeSandbox = false,\n commonChunks = true,\n artifactName = \"[name]-[browser]-[mv]\",\n assetsFilename = mode === Mode.Production && command === Command.Build && !debug\n ? \"[contenthash:4][ext]\"\n : \"[name]-[contenthash:4][ext]\",\n jsFilename = mode === Mode.Production && command === Command.Build && !debug\n ? \"[contenthash:5].js\"\n : \"[name].js\",\n cssFilename = mode === Mode.Production && command === Command.Build && !debug\n ? \"[contenthash:5].css\"\n : \"[name].css\",\n cssIdentName = mode === Mode.Production && command === Command.Build && !debug\n ? \"[app]-[hash:base64:5]\"\n : \"[local]-[hash:base64:5]\",\n } = config;\n\n let resolvedConfig: Config = {\n command,\n debug,\n mode,\n browser,\n app,\n name,\n description,\n shortName,\n version,\n minimumVersion,\n author,\n homepage,\n lang: resolveLanguage(lang),\n icon,\n incognito,\n specific,\n manifest,\n manifestVersion,\n workspace: resolveWorkspace(workspace),\n rootDir,\n outDir,\n srcDir,\n sharedDir,\n appsDir,\n appSrcDir,\n jsDir,\n cssDir,\n assetsDir,\n publicDir,\n htmlDir,\n localeDir,\n iconSrcDir,\n iconOutDir,\n html,\n bundler,\n env,\n plugins,\n analyze,\n configFile,\n mergeBackground,\n mergeCommands,\n mergeContentScripts,\n concatContentScripts,\n mergeStyles,\n mergeIcons,\n mergeLocales,\n mergePages,\n mergePopup,\n mergePublic,\n multiplePopup,\n mergeSidebar,\n multipleSidebar,\n mergeRelay,\n mergeService,\n mergeOffscreen,\n mergeSandbox,\n commonChunks,\n artifactName,\n assetsFilename,\n jsFilename,\n cssFilename,\n cssIdentName,\n };\n\n let vars = loadDotenv(resolvedConfig);\n\n const {\n plugins: userPlugins = [],\n lang: userLang,\n workspace: userWorkspace,\n ...userConfig\n } = await getUserConfig(resolvedConfig);\n\n resolvedConfig = {\n ...resolvedConfig,\n ...userConfig,\n lang: resolveLanguage(userLang ?? resolvedConfig.lang),\n workspace: resolveWorkspace(userWorkspace ?? resolvedConfig.workspace),\n };\n\n resolvedConfig.sharedDir = resolveSharedDir(resolvedConfig.workspace, resolvedConfig.sharedDir);\n\n resolvedConfig = validateConfig(resolvedConfig);\n\n vars = {...vars, ...loadDotenv(resolvedConfig)};\n\n /**\n * IMPORTANT: the order of plugins matters. Early plugins prepare the environment and artifacts for the following ones\n * (e.g., environment variables/output/transpilation/assets → page/version generation → bundling).\n * Reordering may result in missing artifacts, incorrect configuration, or build failures.\n */\n const corePlugins: Plugin[] = [\n pluginDotenv(vars),\n pluginOutput(),\n pluginOptimization(),\n pluginTypescript(),\n pluginReact(),\n pluginIcon(),\n pluginAsset(),\n pluginStyle(),\n pluginLocale(),\n pluginMeta(),\n pluginContent(),\n pluginBackground(),\n pluginOptions(),\n pluginPopup(),\n pluginPublic(),\n pluginSidebar(),\n pluginOffscreen(),\n pluginSandbox(),\n pluginPage(),\n pluginView(),\n pluginHtml(),\n pluginVersion(),\n pluginBundler(),\n pluginManifest(),\n ];\n\n return {\n ...resolvedConfig,\n plugins: [...plugins, ...userPlugins, ...corePlugins],\n };\n};\n"],"mappings":"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","names":[]}
@@ -1,6 +1,8 @@
1
+ import ReactNode from "./Node.js";
1
2
  import MountBuilder from "../../lifecycle/MountBuilder.js";
3
+ import type { ContentScriptRenderOptions } from "../../lifecycle/types.js";
2
4
  import type { ContentScriptNode, ContentScriptIsolation, ContentScriptProps, ContentScriptRenderHandler, ContentScriptRenderValue } from "../../../../types/content/index.js";
3
5
  export default class Builder<Data = unknown, Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`> extends MountBuilder<Data, Isolation> {
4
- protected resolveRender(render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>): ContentScriptRenderHandler<Data> | undefined;
5
- protected createRenderer(node: ContentScriptNode, render: ContentScriptRenderHandler<Data>, props: () => ContentScriptProps<Data>): ContentScriptNode;
6
+ protected resolveRender(render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>): true | ContentScriptRenderHandler<Data> | undefined;
7
+ protected createRenderer(node: ContentScriptNode, render: ContentScriptRenderHandler<Data>, props: () => ContentScriptProps<Data>, options: ContentScriptRenderOptions): ReactNode<Data>;
6
8
  }
@@ -1,12 +1,18 @@
1
+ import { createElement, isValidElement } from "react";
2
+ import ReactNode from "./Node.js";
1
3
  import MountBuilder from "../../lifecycle/MountBuilder.js";
2
- import RenderNode from "./Node.js";
3
- import { createRenderResolver } from "./resolvers/render.js";
4
4
  class Builder extends MountBuilder {
5
5
  resolveRender(render) {
6
- return render === void 0 ? void 0 : createRenderResolver(render);
6
+ if (render === true || render === void 0) {
7
+ return render;
8
+ }
9
+ return (props) => {
10
+ const value = typeof render === "function" ? createElement(render, props) : render;
11
+ return isValidElement(value) ? value : void 0;
12
+ };
7
13
  }
8
- createRenderer(node, render, props) {
9
- return new RenderNode(node, render, props);
14
+ createRenderer(node, render, props, options) {
15
+ return new ReactNode(node, render, props, options);
10
16
  }
11
17
  }
12
18
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/entry/content/adapters/react/Builder.ts"],"sourcesContent":["import MountBuilder from \"../../lifecycle/MountBuilder\";\nimport RenderNode from \"./Node\";\nimport {createRenderResolver} from \"./resolvers/render\";\n\nimport type {\n ContentScriptNode,\n ContentScriptIsolation,\n ContentScriptProps,\n ContentScriptRenderHandler,\n ContentScriptRenderValue,\n} from \"@typing/content\";\n\nexport default class Builder<\n Data = unknown,\n Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`,\n> extends MountBuilder<Data, Isolation> {\n protected resolveRender(\n render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>\n ): ContentScriptRenderHandler<Data> | undefined {\n return render === undefined ? undefined : createRenderResolver(render);\n }\n\n protected createRenderer(\n node: ContentScriptNode,\n render: ContentScriptRenderHandler<Data>,\n props: () => ContentScriptProps<Data>\n ): ContentScriptNode {\n return new RenderNode(node, render, props);\n }\n}\n"],"mappings":"AAAA,OAAO,kBAAkB;AACzB,OAAO,gBAAgB;AACvB,SAAQ,4BAA2B;AAUnC,MAAO,gBAGG,aAA8B;AAAA,EAC1B,cACN,QAC4C;AAC5C,WAAO,WAAW,SAAY,SAAY,qBAAqB,MAAM;AAAA,EACzE;AAAA,EAEU,eACN,MACA,QACA,OACiB;AACjB,WAAO,IAAI,WAAW,MAAM,QAAQ,KAAK;AAAA,EAC7C;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/entry/content/adapters/react/Builder.ts"],"sourcesContent":["import {createElement, isValidElement} from \"react\";\n\nimport ReactNode from \"./Node\";\n\nimport MountBuilder from \"../../lifecycle/MountBuilder\";\nimport type {ContentScriptRenderOptions} from \"../../lifecycle/types\";\n\nimport type {\n ContentScriptNode,\n ContentScriptIsolation,\n ContentScriptProps,\n ContentScriptRenderHandler,\n ContentScriptRenderReactComponent,\n ContentScriptRenderValue,\n} from \"@typing/content\";\n\nexport default class Builder<\n Data = unknown,\n Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`,\n> extends MountBuilder<Data, Isolation> {\n protected resolveRender(\n render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>\n ): true | ContentScriptRenderHandler<Data> | undefined {\n if (render === true || render === undefined) {\n return render;\n }\n\n return props => {\n // Functions in React entrypoints are components; React owns their invocation and hooks.\n const value =\n typeof render === \"function\"\n ? createElement(render as ContentScriptRenderReactComponent<Data>, props)\n : render;\n\n return isValidElement(value) ? value : undefined;\n };\n }\n\n protected createRenderer(\n node: ContentScriptNode,\n render: ContentScriptRenderHandler<Data>,\n props: () => ContentScriptProps<Data>,\n options: ContentScriptRenderOptions\n ): ReactNode<Data> {\n return new ReactNode(node, render, props, options);\n }\n}\n"],"mappings":"AAAA,SAAQ,eAAe,sBAAqB;AAE5C,OAAO,eAAe;AAEtB,OAAO,kBAAkB;AAYzB,MAAO,gBAGG,aAA8B;AAAA,EAC1B,cACN,QACmD;AACnD,QAAI,WAAW,QAAQ,WAAW,QAAW;AACzC,aAAO;AAAA,IACX;AAEA,WAAO,WAAS;AAEZ,YAAM,QACF,OAAO,WAAW,aACZ,cAAc,QAAmD,KAAK,IACtE;AAEV,aAAO,eAAe,KAAK,IAAI,QAAQ;AAAA,IAC3C;AAAA,EACJ;AAAA,EAEU,eACN,MACA,QACA,OACA,SACe;AACf,WAAO,IAAI,UAAU,MAAM,QAAQ,OAAO,OAAO;AAAA,EACrD;AACJ;","names":[]}
@@ -12,9 +12,9 @@ class Node extends RenderNode {
12
12
  return true;
13
13
  }
14
14
  clear() {
15
- var _a;
16
- (_a = this.root) == null ? void 0 : _a.unmount();
15
+ const root = this.root;
17
16
  this.root = void 0;
17
+ root == null ? void 0 : root.unmount();
18
18
  }
19
19
  }
20
20
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/entry/content/adapters/react/Node.ts"],"sourcesContent":["import {isValidElement} from \"react\";\nimport {createRoot, type Root} from \"react-dom/client\";\n\nimport {RenderNode} from \"../../lifecycle/nodes\";\n\nimport type {ContentScriptRenderValue} from \"@typing/content\";\n\nexport default class Node<Data = unknown> extends RenderNode<Data> {\n private root?: Root;\n\n protected render(value: ContentScriptRenderValue<Data> | undefined, target: Element): boolean {\n if (!isValidElement(value)) {\n return false;\n }\n\n this.root = createRoot(target);\n this.root.render(value);\n\n return true;\n }\n\n protected clear(): void {\n this.root?.unmount();\n this.root = undefined;\n }\n}\n"],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B,SAAQ,kBAA4B;AAEpC,SAAQ,kBAAiB;AAIzB,MAAO,aAA2C,WAAiB;AAAA,EACvD;AAAA,EAEE,OAAO,OAAmD,QAA0B;AAC1F,QAAI,CAAC,eAAe,KAAK,GAAG;AACxB,aAAO;AAAA,IACX;AAEA,SAAK,OAAO,WAAW,MAAM;AAC7B,SAAK,KAAK,OAAO,KAAK;AAEtB,WAAO;AAAA,EACX;AAAA,EAEU,QAAc;AArB5B;AAsBQ,eAAK,SAAL,mBAAW;AACX,SAAK,OAAO;AAAA,EAChB;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/entry/content/adapters/react/Node.ts"],"sourcesContent":["import {isValidElement} from \"react\";\nimport {createRoot, type Root} from \"react-dom/client\";\n\nimport {RenderNode} from \"../../lifecycle/nodes\";\n\nimport type {ContentScriptRenderValue} from \"@typing/content\";\n\nexport default class Node<Data = unknown> extends RenderNode<Data> {\n private root?: Root;\n\n protected render(value: ContentScriptRenderValue<Data> | undefined, target: Element): boolean {\n if (!isValidElement(value)) {\n return false;\n }\n\n this.root = createRoot(target);\n this.root.render(value);\n\n return true;\n }\n\n protected clear(): void {\n const root = this.root;\n this.root = undefined;\n root?.unmount();\n }\n}\n"],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B,SAAQ,kBAA4B;AAEpC,SAAQ,kBAAiB;AAIzB,MAAO,aAA2C,WAAiB;AAAA,EACvD;AAAA,EAEE,OAAO,OAAmD,QAA0B;AAC1F,QAAI,CAAC,eAAe,KAAK,GAAG;AACxB,aAAO;AAAA,IACX;AAEA,SAAK,OAAO,WAAW,MAAM;AAC7B,SAAK,KAAK,OAAO,KAAK;AAEtB,WAAO;AAAA,EACX;AAAA,EAEU,QAAc;AACpB,UAAM,OAAO,KAAK;AAClB,SAAK,OAAO;AACZ,iCAAM;AAAA,EACV;AACJ;","names":[]}
@@ -0,0 +1,2 @@
1
+ import type { ContentScriptDefinition } from "../../../../types/content/index.js";
2
+ export declare const resolveDefinition: (module: object) => ContentScriptDefinition;
@@ -1,5 +1,5 @@
1
1
  import { isValidElement } from "react";
2
- import { mergeDefinition } from "../../../resolvers/definition.js";
2
+ import { mergeDefinition } from "../../resolvers/definition.js";
3
3
  const resolveDefinition = (module) => {
4
4
  return mergeDefinition(
5
5
  module,
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/entry/content/adapters/react/definition.ts"],"sourcesContent":["import {isValidElement} from \"react\";\nimport {mergeDefinition} from \"../../resolvers/definition\";\n\nimport type {ContentScriptDefinition} from \"@typing/content\";\n\nexport const resolveDefinition = (module: object): ContentScriptDefinition => {\n return mergeDefinition(\n module,\n value =>\n typeof value === \"function\" ||\n isValidElement(value) ||\n typeof value === \"number\" ||\n (typeof value === \"string\" && value.length > 0) ||\n value instanceof Element\n );\n};\n"],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B,SAAQ,uBAAsB;AAIvB,MAAM,oBAAoB,CAAC,WAA4C;AAC1E,SAAO;AAAA,IACH;AAAA,IACA,WACI,OAAO,UAAU,cACjB,eAAe,KAAK,KACpB,OAAO,UAAU,YAChB,OAAO,UAAU,YAAY,MAAM,SAAS,KAC7C,iBAAiB;AAAA,EACzB;AACJ;","names":[]}
@@ -1,5 +1,5 @@
1
1
  import Builder from "./Builder.js";
2
2
  export { Builder };
3
- export { resolveDefinition } from "./resolvers/definition.js";
3
+ export { resolveDefinition } from "./definition.js";
4
4
  declare const _default: (definition: import("../../../../index.js").ContentScriptDefinition<unknown, "none" | "shadow" | "iframe">) => void;
5
5
  export default _default;
@@ -1,5 +1,5 @@
1
1
  import Builder from "./Builder.js";
2
- import { resolveDefinition } from "./resolvers/definition.js";
2
+ import { resolveDefinition } from "./definition.js";
3
3
  var react_default = Builder.resolver();
4
4
  export {
5
5
  Builder,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/entry/content/adapters/react/index.ts"],"sourcesContent":["import Builder from \"./Builder\";\n\nexport {Builder};\nexport {resolveDefinition} from \"./resolvers/definition\";\n\nexport default Builder.resolver();\n"],"mappings":"AAAA,OAAO,aAAa;AAGpB,SAAQ,yBAAwB;AAEhC,IAAO,gBAAQ,QAAQ,SAAS;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/entry/content/adapters/react/index.ts"],"sourcesContent":["import Builder from \"./Builder\";\n\nexport {Builder};\nexport {resolveDefinition} from \"./definition\";\n\nexport default Builder.resolver();\n"],"mappings":"AAAA,OAAO,aAAa;AAGpB,SAAQ,yBAAwB;AAEhC,IAAO,gBAAQ,QAAQ,SAAS;","names":[]}
@@ -1,6 +1,8 @@
1
1
  import MountBuilder from "../../lifecycle/MountBuilder.js";
2
+ import VanillaNode from "./Node.js";
3
+ import type { ContentScriptRenderOptions } from "../../lifecycle/types.js";
2
4
  import type { ContentScriptNode, ContentScriptIsolation, ContentScriptProps, ContentScriptRenderHandler, ContentScriptRenderValue } from "../../../../types/content/index.js";
3
5
  export default class Builder<Data = unknown, Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`> extends MountBuilder<Data, Isolation> {
4
- protected resolveRender(render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>): ContentScriptRenderHandler<Data> | undefined;
5
- protected createRenderer(node: ContentScriptNode, render: ContentScriptRenderHandler<Data>, props: () => ContentScriptProps<Data>): ContentScriptNode;
6
+ protected resolveRender(render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>): true | ContentScriptRenderHandler<Data> | undefined;
7
+ protected createRenderer(node: ContentScriptNode, render: ContentScriptRenderHandler<Data>, props: () => ContentScriptProps<Data>, options: ContentScriptRenderOptions): VanillaNode<Data>;
6
8
  }
@@ -1,12 +1,21 @@
1
1
  import MountBuilder from "../../lifecycle/MountBuilder.js";
2
- import RenderNode from "./Node.js";
3
- import { createRenderResolver } from "./resolvers/render.js";
2
+ import VanillaNode from "./Node.js";
3
+ import { isValidRenderValue } from "./utils.js";
4
4
  class Builder extends MountBuilder {
5
5
  resolveRender(render) {
6
- return render === void 0 ? void 0 : createRenderResolver(render);
6
+ if (render === true || render === void 0) {
7
+ return render;
8
+ }
9
+ return (props) => {
10
+ const resolvedRender = typeof render === "function" ? render(props) : render;
11
+ if (!isValidRenderValue(resolvedRender)) {
12
+ return;
13
+ }
14
+ return resolvedRender;
15
+ };
7
16
  }
8
- createRenderer(node, render, props) {
9
- return new RenderNode(node, render, props);
17
+ createRenderer(node, render, props, options) {
18
+ return new VanillaNode(node, render, props, options);
10
19
  }
11
20
  }
12
21
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/Builder.ts"],"sourcesContent":["import MountBuilder from \"../../lifecycle/MountBuilder\";\nimport RenderNode from \"./Node\";\nimport {createRenderResolver} from \"./resolvers/render\";\n\nimport type {\n ContentScriptNode,\n ContentScriptIsolation,\n ContentScriptProps,\n ContentScriptRenderHandler,\n ContentScriptRenderValue,\n} from \"@typing/content\";\n\nexport default class Builder<\n Data = unknown,\n Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`,\n> extends MountBuilder<Data, Isolation> {\n protected resolveRender(\n render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>\n ): ContentScriptRenderHandler<Data> | undefined {\n return render === undefined ? undefined : createRenderResolver(render);\n }\n\n protected createRenderer(\n node: ContentScriptNode,\n render: ContentScriptRenderHandler<Data>,\n props: () => ContentScriptProps<Data>\n ): ContentScriptNode {\n return new RenderNode(node, render, props);\n }\n}\n"],"mappings":"AAAA,OAAO,kBAAkB;AACzB,OAAO,gBAAgB;AACvB,SAAQ,4BAA2B;AAUnC,MAAO,gBAGG,aAA8B;AAAA,EAC1B,cACN,QAC4C;AAC5C,WAAO,WAAW,SAAY,SAAY,qBAAqB,MAAM;AAAA,EACzE;AAAA,EAEU,eACN,MACA,QACA,OACiB;AACjB,WAAO,IAAI,WAAW,MAAM,QAAQ,KAAK;AAAA,EAC7C;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/Builder.ts"],"sourcesContent":["import MountBuilder from \"../../lifecycle/MountBuilder\";\nimport VanillaNode from \"./Node\";\nimport {isValidRenderValue} from \"./utils\";\nimport type {ContentScriptRenderOptions} from \"../../lifecycle/types\";\n\nimport type {\n ContentScriptNode,\n ContentScriptIsolation,\n ContentScriptProps,\n ContentScriptRenderHandler,\n ContentScriptRenderValue,\n} from \"@typing/content\";\n\nexport default class Builder<\n Data = unknown,\n Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`,\n> extends MountBuilder<Data, Isolation> {\n protected resolveRender(\n render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>\n ): true | ContentScriptRenderHandler<Data> | undefined {\n if (render === true || render === undefined) {\n return render;\n }\n\n return props => {\n const resolvedRender = typeof render === \"function\" ? render(props) : render;\n\n if (!isValidRenderValue(resolvedRender)) {\n return;\n }\n\n return resolvedRender;\n };\n }\n\n protected createRenderer(\n node: ContentScriptNode,\n render: ContentScriptRenderHandler<Data>,\n props: () => ContentScriptProps<Data>,\n options: ContentScriptRenderOptions\n ): VanillaNode<Data> {\n return new VanillaNode(node, render, props, options);\n }\n}\n"],"mappings":"AAAA,OAAO,kBAAkB;AACzB,OAAO,iBAAiB;AACxB,SAAQ,0BAAyB;AAWjC,MAAO,gBAGG,aAA8B;AAAA,EAC1B,cACN,QACmD;AACnD,QAAI,WAAW,QAAQ,WAAW,QAAW;AACzC,aAAO;AAAA,IACX;AAEA,WAAO,WAAS;AACZ,YAAM,iBAAiB,OAAO,WAAW,aAAa,OAAO,KAAK,IAAI;AAEtE,UAAI,CAAC,mBAAmB,cAAc,GAAG;AACrC;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEU,eACN,MACA,QACA,OACA,SACiB;AACjB,WAAO,IAAI,YAAY,MAAM,QAAQ,OAAO,OAAO;AAAA,EACvD;AACJ;","names":[]}
@@ -0,0 +1,2 @@
1
+ import type { ContentScriptDefinition } from "../../../../types/content/index.js";
2
+ export declare const resolveDefinition: (module: object) => ContentScriptDefinition;
@@ -1,5 +1,5 @@
1
- import { mergeDefinition } from "../../../resolvers/definition.js";
2
- import { isValidRenderValue } from "./render.js";
1
+ import { mergeDefinition } from "../../resolvers/definition.js";
2
+ import { isValidRenderValue } from "./utils.js";
3
3
  const resolveDefinition = (module) => {
4
4
  return mergeDefinition(module, (value) => typeof value === "function" || isValidRenderValue(value));
5
5
  };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/definition.ts"],"sourcesContent":["import {mergeDefinition} from \"../../resolvers/definition\";\nimport {isValidRenderValue} from \"./utils\";\n\nimport type {ContentScriptDefinition} from \"@typing/content\";\n\nexport const resolveDefinition = (module: object): ContentScriptDefinition => {\n return mergeDefinition(module, value => typeof value === \"function\" || isValidRenderValue(value));\n};\n"],"mappings":"AAAA,SAAQ,uBAAsB;AAC9B,SAAQ,0BAAyB;AAI1B,MAAM,oBAAoB,CAAC,WAA4C;AAC1E,SAAO,gBAAgB,QAAQ,WAAS,OAAO,UAAU,cAAc,mBAAmB,KAAK,CAAC;AACpG;","names":[]}
@@ -1,5 +1,5 @@
1
1
  import Builder from "./Builder.js";
2
2
  export { Builder };
3
- export { resolveDefinition } from "./resolvers/definition.js";
3
+ export { resolveDefinition } from "./definition.js";
4
4
  declare const _default: (definition: import("../../../../index.js").ContentScriptDefinition<unknown, "none" | "shadow" | "iframe">) => void;
5
5
  export default _default;
@@ -1,5 +1,5 @@
1
1
  import Builder from "./Builder.js";
2
- import { resolveDefinition } from "./resolvers/definition.js";
2
+ import { resolveDefinition } from "./definition.js";
3
3
  var vanilla_default = Builder.resolver();
4
4
  export {
5
5
  Builder,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/index.ts"],"sourcesContent":["import Builder from \"./Builder\";\n\nexport {Builder};\nexport {resolveDefinition} from \"./resolvers/definition\";\n\nexport default Builder.resolver();\n"],"mappings":"AAAA,OAAO,aAAa;AAGpB,SAAQ,yBAAwB;AAEhC,IAAO,kBAAQ,QAAQ,SAAS;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/index.ts"],"sourcesContent":["import Builder from \"./Builder\";\n\nexport {Builder};\nexport {resolveDefinition} from \"./definition\";\n\nexport default Builder.resolver();\n"],"mappings":"AAAA,OAAO,aAAa;AAGpB,SAAQ,yBAAwB;AAEhC,IAAO,kBAAQ,QAAQ,SAAS;","names":[]}
@@ -0,0 +1 @@
1
+ export declare const isValidRenderValue: (value: unknown) => value is string | number | Element;
@@ -0,0 +1,7 @@
1
+ const isValidRenderValue = (value) => {
2
+ return typeof value === "string" && value.length > 0 || typeof value === "number" || value instanceof Element;
3
+ };
4
+ export {
5
+ isValidRenderValue
6
+ };
7
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/entry/content/adapters/vanilla/utils.ts"],"sourcesContent":["export const isValidRenderValue = (value: unknown): value is string | number | Element => {\n return (typeof value === \"string\" && value.length > 0) || typeof value === \"number\" || value instanceof Element;\n};\n"],"mappings":"AAAO,MAAM,qBAAqB,CAAC,UAAuD;AACtF,SAAQ,OAAO,UAAU,YAAY,MAAM,SAAS,KAAM,OAAO,UAAU,YAAY,iBAAiB;AAC5G;","names":[]}
@@ -1,26 +1,32 @@
1
1
  import EntrypointBuilder from "../../core/Builder.js";
2
2
  import { ManagedContext, EventEmitter } from "./context/index.js";
3
- import { ContentScriptAnchor, ContentScriptAnchorGetter, ContentScriptBuilder, ContentScriptContainerCreator, ContentScriptContainerFactory, ContentScriptContainerOptions, ContentScriptContainerTag, ContentScriptContext, ContentScriptDefinition, ContentScriptIsolation, ContentScriptMarkerContract, ContentScriptMarkerGetter, ContentScriptMarkerResolver, ContentScriptMarkerType, ContentScriptMountFunction, ContentScriptNode, ContentScriptPrepareProps, ContentScriptRenderHandler, ContentScriptRenderValue, ContentScriptResolvedDefinition, ContentScriptWatchStrategy } from "../../../types/content/index.js";
3
+ import type { ContentScriptNodeAssembly } from "./types.js";
4
+ import { ContentScriptAnchor, ContentScriptAnchorGetter, ContentScriptBuilder, ContentScriptContainerCreator, ContentScriptContainerFactory, ContentScriptContainerOptions, ContentScriptContainerTag, ContentScriptContext, ContentScriptDefinition, ContentScriptIsolation, ContentScriptIsolationOptions, ContentScriptMarkerContract, ContentScriptMarkerGetter, ContentScriptMarkerResolver, ContentScriptMarkerType, ContentScriptMountFunction, ContentScriptPrepareProps, ContentScriptPrepareResult, ContentScriptRenderHandler, ContentScriptRenderValue, ContentScriptResolvedDefinition, ContentScriptTarget, ContentScriptTargetCreator, ContentScriptWatchStrategy } from "../../../types/content/index.js";
4
5
  export default abstract class Builder<Data = unknown, Isolation extends `${ContentScriptIsolation}` = `${ContentScriptIsolation}`> extends EntrypointBuilder implements ContentScriptBuilder {
5
- private lock;
6
+ private cycle?;
6
7
  protected generation: number;
7
8
  protected readonly definition: ContentScriptResolvedDefinition<Data>;
8
9
  protected readonly emitter: EventEmitter;
9
10
  protected readonly context: ManagedContext;
10
11
  protected marker: ContentScriptMarkerContract;
11
12
  protected unwatch?: () => void;
12
- protected abstract createNode(anchor: Element, data: Data, enabled: boolean): Promise<ContentScriptNode>;
13
+ protected abstract createNode(anchor: Element, result: ContentScriptPrepareResult<Data> | undefined): Promise<ContentScriptNodeAssembly>;
13
14
  protected constructor(input: ContentScriptDefinition<Data, Isolation>);
14
15
  protected resolveMarker(marker: ContentScriptMarkerType | ContentScriptMarkerGetter): ContentScriptMarkerResolver;
15
16
  protected resolveAnchor(anchor?: ContentScriptAnchor | ContentScriptAnchorGetter): ContentScriptAnchorGetter;
16
17
  protected resolveMount(mount?: ContentScriptMountFunction): ContentScriptMountFunction;
17
18
  protected resolveContainer(container?: ContentScriptContainerTag | ContentScriptContainerOptions | ContentScriptContainerFactory<Data>): ContentScriptContainerCreator<Data>;
18
- protected resolveRender(render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>): ContentScriptRenderHandler<Data> | undefined;
19
+ protected resolveTarget(target?: ContentScriptTarget<Data>): ContentScriptTargetCreator<Data>;
20
+ protected resolveIsolation(definition: ContentScriptDefinition<Data>): ContentScriptIsolationOptions;
21
+ protected resolveRender(render?: ContentScriptRenderValue<Data> | ContentScriptRenderHandler<Data>): true | ContentScriptRenderHandler<Data> | undefined;
19
22
  protected resolveWatch(watch?: true | ContentScriptWatchStrategy): ContentScriptWatchStrategy;
20
23
  getContext(): ContentScriptContext;
21
24
  build(): Promise<void>;
22
25
  destroy(): Promise<void>;
23
26
  protected getPrepareProps(anchor: Element): ContentScriptPrepareProps;
27
+ private requestProcessing;
28
+ private drainProcessing;
24
29
  protected processing(generation: number): Promise<void>;
25
30
  protected processAnchor(anchor: Element, generation: number): Promise<void>;
31
+ private handleRenderError;
26
32
  }