extension-develop 3.14.0-next.0 → 3.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/144.cjs CHANGED
@@ -2243,12 +2243,7 @@ exports.modules = {
2243
2243
  test,
2244
2244
  exclude,
2245
2245
  type,
2246
- issuer: isContentScript,
2247
- resourceQuery: {
2248
- not: [
2249
- /url/
2250
- ]
2251
- }
2246
+ issuer: isContentScript
2252
2247
  };
2253
2248
  if ('asset' === type) baseConfig.generator = {
2254
2249
  filename: "content_scripts/[name].[contenthash:8].css"
@@ -2323,12 +2318,7 @@ exports.modules = {
2323
2318
  test,
2324
2319
  exclude,
2325
2320
  type,
2326
- issuer: isNotContentScript,
2327
- resourceQuery: {
2328
- not: [
2329
- /url/
2330
- ]
2331
- }
2321
+ issuer: isNotContentScript
2332
2322
  };
2333
2323
  if (!loader) return {
2334
2324
  ...baseConfig,
@@ -9076,7 +9066,7 @@ Set background.noDynamicEntryWarning to true to disable this warning.
9076
9066
  minimize: 'production' === devOptions.mode,
9077
9067
  sideEffects: true,
9078
9068
  usedExports: 'global',
9079
- concatenateModules: true,
9069
+ concatenateModules: 'production' === devOptions.mode,
9080
9070
  splitChunks: false,
9081
9071
  runtimeChunk: false,
9082
9072
  moduleIds: 'deterministic',
@@ -68,6 +68,12 @@ function findNearestPackageJsonSync(manifestPath) {
68
68
  return null;
69
69
  }
70
70
  }
71
+ const external_pintor_namespaceObject = require("pintor");
72
+ var external_pintor_default = /*#__PURE__*/ __webpack_require__.n(external_pintor_namespaceObject);
73
+ function reservedScriptsFolder(relPath, indicators) {
74
+ const reasons = indicators.map((r)=>`- ${external_pintor_default().gray(r)}`).join('\n');
75
+ return `${external_pintor_default().red('ERROR')} scripts/ is a reserved folder in Extension.js.\nEvery file under ${external_pintor_default().yellow("scripts/")} is wrapped with the browser content-script mount runtime, so Node.js-only files placed here will fail to parse or run.\nRename the folder at the project root (for example ${external_pintor_default().yellow('bin/')}, ${external_pintor_default().yellow('tools/')}, ${external_pintor_default().yellow('ops/')}, ${external_pintor_default().yellow('tasks/')}, or ${external_pintor_default().yellow("ci-scripts/")}) or move the file out of scripts/.\n\n${external_pintor_default().red('NODE.JS SHAPE')}\n${reasons}\n${external_pintor_default().red('NOT ALLOWED')} ${external_pintor_default().underline(relPath)}`;
76
+ }
71
77
  const schema = {
72
78
  type: 'object',
73
79
  properties: {
@@ -100,6 +106,12 @@ function createBuildToken(source) {
100
106
  for(let index = 0; index < source.length; index++)hash = 31 * hash + source.charCodeAt(index) >>> 0;
101
107
  return hash.toString(16);
102
108
  }
109
+ function detectNodeJsShapedScript(source) {
110
+ const indicators = [];
111
+ if ('string' == typeof source && source.startsWith('#!')) indicators.push('shebang on line 1 (#!/usr/bin/env node ...)');
112
+ if ('string' == typeof source && /(?:^|\n)\s*(?:import[^\n;]*?from\s*|import\s*\(\s*|require\s*\(\s*)["']node:[\w/-]+["']/m.test(source)) indicators.push("import from the 'node:' protocol");
113
+ return indicators;
114
+ }
103
115
  function collectStyleAssetSpecifiers(source) {
104
116
  const SAFE_SPECIFIER = /^[\w./@~\-?&=#+%]+$/;
105
117
  const styleSpecifiers = new Set();
@@ -207,6 +219,13 @@ function contentScriptWrapper(source) {
207
219
  const scriptsDir = external_path_default().resolve(packageJsonDir, "scripts");
208
220
  const relToScripts = external_path_default().relative(scriptsDir, resourceAbsPath);
209
221
  const isScriptsFolderScript = relToScripts && !relToScripts.startsWith('..') && !external_path_default().isAbsolute(relToScripts);
222
+ if (isScriptsFolderScript && !declaredEntry) {
223
+ const nodeIndicators = detectNodeJsShapedScript(rewrittenSource);
224
+ if (nodeIndicators.length > 0) {
225
+ const relFromProject = external_path_default().relative(packageJsonDir, resourceAbsPath).split(external_path_default().sep).join('/');
226
+ throw new Error(reservedScriptsFolder(relFromProject, nodeIndicators));
227
+ }
228
+ }
210
229
  const isContentScriptLike = Boolean(declaredEntry || isScriptsFolderScript);
211
230
  if (!isContentScriptLike) return rewrittenSource;
212
231
  const runAt = declaredEntry?.runAt || 'document_idle';
@@ -68,6 +68,12 @@ function findNearestPackageJsonSync(manifestPath) {
68
68
  return null;
69
69
  }
70
70
  }
71
+ const external_pintor_namespaceObject = require("pintor");
72
+ var external_pintor_default = /*#__PURE__*/ __webpack_require__.n(external_pintor_namespaceObject);
73
+ function reservedScriptsFolder(relPath, indicators) {
74
+ const reasons = indicators.map((r)=>`- ${external_pintor_default().gray(r)}`).join('\n');
75
+ return `${external_pintor_default().red('ERROR')} scripts/ is a reserved folder in Extension.js.\nEvery file under ${external_pintor_default().yellow("scripts/")} is wrapped with the browser content-script mount runtime, so Node.js-only files placed here will fail to parse or run.\nRename the folder at the project root (for example ${external_pintor_default().yellow('bin/')}, ${external_pintor_default().yellow('tools/')}, ${external_pintor_default().yellow('ops/')}, ${external_pintor_default().yellow('tasks/')}, or ${external_pintor_default().yellow("ci-scripts/")}) or move the file out of scripts/.\n\n${external_pintor_default().red('NODE.JS SHAPE')}\n${reasons}\n${external_pintor_default().red('NOT ALLOWED')} ${external_pintor_default().underline(relPath)}`;
76
+ }
71
77
  const schema = {
72
78
  type: 'object',
73
79
  properties: {
@@ -100,6 +106,12 @@ function createBuildToken(source) {
100
106
  for(let index = 0; index < source.length; index++)hash = 31 * hash + source.charCodeAt(index) >>> 0;
101
107
  return hash.toString(16);
102
108
  }
109
+ function detectNodeJsShapedScript(source) {
110
+ const indicators = [];
111
+ if ('string' == typeof source && source.startsWith('#!')) indicators.push('shebang on line 1 (#!/usr/bin/env node ...)');
112
+ if ('string' == typeof source && /(?:^|\n)\s*(?:import[^\n;]*?from\s*|import\s*\(\s*|require\s*\(\s*)["']node:[\w/-]+["']/m.test(source)) indicators.push("import from the 'node:' protocol");
113
+ return indicators;
114
+ }
103
115
  function collectStyleAssetSpecifiers(source) {
104
116
  const SAFE_SPECIFIER = /^[\w./@~\-?&=#+%]+$/;
105
117
  const styleSpecifiers = new Set();
@@ -207,6 +219,13 @@ function contentScriptWrapper(source) {
207
219
  const scriptsDir = external_path_default().resolve(packageJsonDir, "scripts");
208
220
  const relToScripts = external_path_default().relative(scriptsDir, resourceAbsPath);
209
221
  const isScriptsFolderScript = relToScripts && !relToScripts.startsWith('..') && !external_path_default().isAbsolute(relToScripts);
222
+ if (isScriptsFolderScript && !declaredEntry) {
223
+ const nodeIndicators = detectNodeJsShapedScript(rewrittenSource);
224
+ if (nodeIndicators.length > 0) {
225
+ const relFromProject = external_path_default().relative(packageJsonDir, resourceAbsPath).split(external_path_default().sep).join('/');
226
+ throw new Error(reservedScriptsFolder(relFromProject, nodeIndicators));
227
+ }
228
+ }
210
229
  const isContentScriptLike = Boolean(declaredEntry || isScriptsFolderScript);
211
230
  if (!isContentScriptLike) return rewrittenSource;
212
231
  const runAt = declaredEntry?.runAt || 'document_idle';
package/dist/module.cjs CHANGED
@@ -2216,7 +2216,7 @@ var __webpack_modules__ = {
2216
2216
  module.exports = require("webpack-merge");
2217
2217
  },
2218
2218
  "./package.json" (module) {
2219
- module.exports = JSON.parse('{"rE":"3.14.0-next.0","El":{"@prefresh/core":"1.5.9","@prefresh/utils":"1.2.1","@rspack/core":"^1.7.5","@rspack/dev-server":"^1.2.1","@rspack/plugin-preact-refresh":"1.1.4","@rspack/plugin-react-refresh":"1.6.0","@swc/core":"^1.15.8","@swc/helpers":"^0.5.18","@vue/compiler-sfc":"3.5.26","adm-zip":"^0.5.16","browser-extension-manifest-fields":"^2.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","content-security-policy-parser":"^0.6.0","cross-spawn":"^7.0.6","dotenv":"^17.2.3","extension-from-store":"^0.1.1","go-git-it":"^5.1.5","ignore":"^7.0.5","less":"4.5.1","less-loader":"12.3.0","loader-utils":"^3.3.1","magic-string":"^0.30.21","parse5-utilities":"^1.0.0","pintor":"0.3.0","postcss":"8.5.6","postcss-loader":"8.2.0","postcss-preset-env":"11.1.1","postcss-scss":"4.0.9","preact":"10.27.3","react-refresh":"0.18.0","sass-loader":"16.0.6","schema-utils":"^4.3.3","svelte-loader":"3.2.4","tiny-glob":"^0.2.9","typescript":"5.9.3","unique-names-generator":"^4.7.1","vue":"3.5.26","vue-loader":"17.4.2","webextension-polyfill":"^0.12.0","webpack-merge":"^6.0.1","webpack-target-webextension":"^2.1.3"}}');
2219
+ module.exports = JSON.parse('{"rE":"3.14.1","El":{"@prefresh/core":"1.5.9","@prefresh/utils":"1.2.1","@rspack/core":"^1.7.5","@rspack/dev-server":"^1.2.1","@rspack/plugin-preact-refresh":"1.1.4","@rspack/plugin-react-refresh":"1.6.0","@swc/core":"^1.15.8","@swc/helpers":"^0.5.18","@vue/compiler-sfc":"3.5.26","adm-zip":"^0.5.16","browser-extension-manifest-fields":"^2.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","content-security-policy-parser":"^0.6.0","cross-spawn":"^7.0.6","dotenv":"^17.2.3","extension-from-store":"^0.1.1","go-git-it":"^5.1.5","ignore":"^7.0.5","less":"4.5.1","less-loader":"12.3.0","loader-utils":"^3.3.1","magic-string":"^0.30.21","parse5-utilities":"^1.0.0","pintor":"0.3.0","postcss":"8.5.6","postcss-loader":"8.2.0","postcss-preset-env":"11.1.1","postcss-scss":"4.0.9","preact":"10.27.3","react-refresh":"0.18.0","sass-loader":"16.0.6","schema-utils":"^4.3.3","svelte-loader":"3.2.4","tiny-glob":"^0.2.9","typescript":"5.9.3","unique-names-generator":"^4.7.1","vue":"3.5.26","vue-loader":"17.4.2","webextension-polyfill":"^0.12.0","webpack-merge":"^6.0.1","webpack-target-webextension":"^2.1.3"}}');
2220
2220
  }
2221
2221
  };
2222
2222
  var __webpack_module_cache__ = {};
package/dist/preview.cjs CHANGED
@@ -150,7 +150,7 @@ var __webpack_modules__ = {
150
150
  module.exports = require("pintor");
151
151
  },
152
152
  "./package.json" (module) {
153
- module.exports = JSON.parse('{"rE":"3.14.0-next.0","El":{"@prefresh/core":"1.5.9","@prefresh/utils":"1.2.1","@rspack/core":"^1.7.5","@rspack/dev-server":"^1.2.1","@rspack/plugin-preact-refresh":"1.1.4","@rspack/plugin-react-refresh":"1.6.0","@swc/core":"^1.15.8","@swc/helpers":"^0.5.18","@vue/compiler-sfc":"3.5.26","adm-zip":"^0.5.16","browser-extension-manifest-fields":"^2.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","content-security-policy-parser":"^0.6.0","cross-spawn":"^7.0.6","dotenv":"^17.2.3","extension-from-store":"^0.1.1","go-git-it":"^5.1.5","ignore":"^7.0.5","less":"4.5.1","less-loader":"12.3.0","loader-utils":"^3.3.1","magic-string":"^0.30.21","parse5-utilities":"^1.0.0","pintor":"0.3.0","postcss":"8.5.6","postcss-loader":"8.2.0","postcss-preset-env":"11.1.1","postcss-scss":"4.0.9","preact":"10.27.3","react-refresh":"0.18.0","sass-loader":"16.0.6","schema-utils":"^4.3.3","svelte-loader":"3.2.4","tiny-glob":"^0.2.9","typescript":"5.9.3","unique-names-generator":"^4.7.1","vue":"3.5.26","vue-loader":"17.4.2","webextension-polyfill":"^0.12.0","webpack-merge":"^6.0.1","webpack-target-webextension":"^2.1.3"}}');
153
+ module.exports = JSON.parse('{"rE":"3.14.1","El":{"@prefresh/core":"1.5.9","@prefresh/utils":"1.2.1","@rspack/core":"^1.7.5","@rspack/dev-server":"^1.2.1","@rspack/plugin-preact-refresh":"1.1.4","@rspack/plugin-react-refresh":"1.6.0","@swc/core":"^1.15.8","@swc/helpers":"^0.5.18","@vue/compiler-sfc":"3.5.26","adm-zip":"^0.5.16","browser-extension-manifest-fields":"^2.2.1","case-sensitive-paths-webpack-plugin":"^2.4.0","content-security-policy-parser":"^0.6.0","cross-spawn":"^7.0.6","dotenv":"^17.2.3","extension-from-store":"^0.1.1","go-git-it":"^5.1.5","ignore":"^7.0.5","less":"4.5.1","less-loader":"12.3.0","loader-utils":"^3.3.1","magic-string":"^0.30.21","parse5-utilities":"^1.0.0","pintor":"0.3.0","postcss":"8.5.6","postcss-loader":"8.2.0","postcss-preset-env":"11.1.1","postcss-scss":"4.0.9","preact":"10.27.3","react-refresh":"0.18.0","sass-loader":"16.0.6","schema-utils":"^4.3.3","svelte-loader":"3.2.4","tiny-glob":"^0.2.9","typescript":"5.9.3","unique-names-generator":"^4.7.1","vue":"3.5.26","vue-loader":"17.4.2","webextension-polyfill":"^0.12.0","webpack-merge":"^6.0.1","webpack-target-webextension":"^2.1.3"}}');
154
154
  }
155
155
  };
156
156
  var __webpack_module_cache__ = {};
package/package.json CHANGED
@@ -29,7 +29,7 @@
29
29
  "dist"
30
30
  ],
31
31
  "name": "extension-develop",
32
- "version": "3.14.0-next.0",
32
+ "version": "3.14.1",
33
33
  "description": "Develop, build, preview, and package Extension.js projects.",
34
34
  "author": {
35
35
  "name": "Cezar Augusto",