extension-develop 4.1.30 → 4.1.31-canary.1790876576.d8ea8bc5
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/105~0.mjs +34 -4
- package/dist/143~0.mjs +158 -0
- package/dist/471~0.mjs +53 -0
- package/dist/{672~0.mjs → 519~0.mjs} +10 -153
- package/dist/616~0.mjs +34 -11
- package/dist/{474~0.mjs → 731~0.mjs} +3 -60
- package/dist/832~0.mjs +212 -54
- package/dist/840~0.mjs +333 -124
- package/dist/937~0.mjs +61 -0
- package/dist/938~0.mjs +8 -12
- package/dist/950~0.mjs +156 -54
- package/dist/bridge-entry.d.ts +2 -2
- package/dist/bridge.mjs +37 -10
- package/dist/command-preview.d.ts +1 -0
- package/dist/contracts.mjs +12 -1
- package/dist/dev-server/control-bridge/broker.d.ts +2 -0
- package/dist/dev-server/control-bridge/contracts.d.ts +3 -1
- package/dist/dev-server/control-bridge/logs-query.d.ts +13 -3
- package/dist/dev-server/control-bridge/producer-runtime.d.ts +1 -1
- package/dist/dev-server/control-bridge/ring-buffer.d.ts +2 -0
- package/dist/dev-server~0.mjs +100 -74
- package/dist/extension-js-devtools/build-stamp.json +4 -0
- package/dist/extension-js-theme/build-stamp.json +4 -0
- package/dist/feature-scripts-content-script-wrapper.js +8 -4
- package/dist/feature-scripts-content-script-wrapper.mjs +8 -4
- package/dist/lib/addon-lint.d.ts +8 -1
- package/dist/lib/build-summary.d.ts +13 -0
- package/dist/lib/config-loader.d.ts +4 -1
- package/dist/lib/config-resolved-plugin.d.ts +10 -0
- package/dist/lib/manifest-utils.d.ts +4 -1
- package/dist/lib/messages.d.ts +8 -1
- package/dist/lib/normalize-split-chunks.d.ts +3 -0
- package/dist/lib/optional-deps-contracts.d.ts +1 -0
- package/dist/lib/project.d.ts +1 -0
- package/dist/lib/safari-identity.d.ts +4 -0
- package/dist/lib/session-paths.d.ts +1 -0
- package/dist/lib/split-chunks.d.ts +1 -0
- package/dist/manifest-entry.d.ts +1 -0
- package/dist/manifest.mjs +2 -0
- package/dist/plugin-compatibility/compatibility-lib/free-browser-references.d.ts +2 -0
- package/dist/plugin-compatibility/compatibility-lib/messages.d.ts +1 -0
- package/dist/plugin-compatibility/feature-browser-global.d.ts +9 -0
- package/dist/plugin-compatibility/index.d.ts +1 -0
- package/dist/plugin-compilation/compilation-lib/messages.d.ts +1 -0
- package/dist/plugin-compilation/env.d.ts +3 -0
- package/dist/plugin-compilation/index.d.ts +2 -0
- package/dist/plugin-compilation/zip.d.ts +6 -1
- package/dist/plugin-js-frameworks/index.d.ts +8 -0
- package/dist/plugin-js-frameworks/js-frameworks-lib/messages.d.ts +1 -1
- package/dist/plugin-js-frameworks/js-tools/react.d.ts +1 -0
- package/dist/plugin-js-frameworks/js-tools/solid.d.ts +22 -1
- package/dist/plugin-js-frameworks/js-tools/vue.d.ts +1 -0
- package/dist/plugin-perf-budgets/categorize.d.ts +1 -1
- package/dist/plugin-playwright/index.d.ts +1 -0
- package/dist/plugin-reload/reload-lib/dev-content-scripts.d.ts +1 -0
- package/dist/plugin-reload/reload-lib/scripts-replay-shim.d.ts +1 -1
- package/dist/plugin-special-folders/folder-extensions/resolve-dirs.d.ts +1 -0
- package/dist/plugin-special-folders/folder-extensions/utils.d.ts +1 -0
- package/dist/plugin-special-folders/folders-config.d.ts +17 -0
- package/dist/plugin-special-folders/get-data.d.ts +4 -3
- package/dist/plugin-special-folders/index.d.ts +2 -0
- package/dist/plugin-special-folders/resolve-public-folder.d.ts +2 -0
- package/dist/plugin-web-extension/feature-html/html-lib/messages.d.ts +3 -0
- package/dist/plugin-web-extension/feature-icons/extract-action-theme-icons.d.ts +1 -1
- package/dist/plugin-web-extension/feature-icons/messages.d.ts +3 -0
- package/dist/plugin-web-extension/feature-json/messages.d.ts +3 -0
- package/dist/plugin-web-extension/feature-manifest/manifest-lib/sanitize-fatal-shapes.d.ts +6 -0
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/common/chrome_url_overrides.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/common/devtools_page.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/common/options_page.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/common/options_ui.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/common/page_action.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/common/sandbox.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/common/sidebar_action.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/common/theme.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/mv2/browser_action.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/mv2/chrome_settings_overrides.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/mv2/index.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/mv2/theme_experiment.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/mv3/action.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/manifest-overrides/mv3/side_panel.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/messages.d.ts +1 -0
- package/dist/plugin-web-extension/feature-manifest/normalize-manifest-path.d.ts +1 -1
- package/dist/plugin-web-extension/feature-manifest/steps/warn-undeclared-permissions.d.ts +9 -0
- package/dist/plugin-web-extension/feature-scripts/messages.d.ts +2 -1
- package/dist/plugin-web-extension/feature-scripts/steps/add-scripts.d.ts +1 -0
- package/dist/plugin-web-extension/feature-scripts/steps/compile-main-world-scripts.d.ts +15 -0
- package/dist/plugin-web-extension/feature-scripts/steps/trace-runtime-loaded-files.d.ts +14 -0
- package/dist/plugin-web-extension/shared/html-surfaces.d.ts +13 -2
- package/dist/plugin-web-extension/shared/manifest-fields.d.ts +1 -0
- package/dist/plugin-web-extension/shared/manifest-path-assets.d.ts +3 -3
- package/dist/plugin-web-extension/shared/paths.d.ts +1 -0
- package/dist/rspack-config~0.mjs +1748 -731
- package/dist/types.d.ts +47 -16
- package/package.json +10 -1
package/dist/105~0.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createRequire as __extjsCreateRequire } from "node:module"; const require = __extjsCreateRequire(import.meta.url);
|
|
2
|
+
import { publicFolderSetting } from "./471~0.mjs";
|
|
2
3
|
import * as __rspack_external_node_fs_1b05aee1 from "node:fs";
|
|
3
4
|
import * as __rspack_external_node_path_806ed179 from "node:path";
|
|
4
5
|
function isUsableDir(candidate) {
|
|
@@ -11,11 +12,12 @@ function isUsableDir(candidate) {
|
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
function inspectPublicFolders(manifestPath, projectRoot) {
|
|
15
|
+
const setting = publicFolderSetting(projectRoot);
|
|
14
16
|
const fromManifest = __rspack_external_node_path_806ed179.join(__rspack_external_node_path_806ed179.dirname(manifestPath), 'public');
|
|
15
|
-
const fromRoot = projectRoot ? __rspack_external_node_path_806ed179.join(projectRoot, 'public') : fromManifest;
|
|
17
|
+
const fromRoot = 'path' === setting.kind ? setting.dir : projectRoot ? __rspack_external_node_path_806ed179.join(projectRoot, 'public') : fromManifest;
|
|
16
18
|
const sameLocation = __rspack_external_node_path_806ed179.resolve(fromRoot) === __rspack_external_node_path_806ed179.resolve(fromManifest);
|
|
17
|
-
const rootOk = isUsableDir(fromRoot);
|
|
18
|
-
const manifestOk = !sameLocation && isUsableDir(fromManifest);
|
|
19
|
+
const rootOk = 'off' !== setting.kind && isUsableDir(fromRoot);
|
|
20
|
+
const manifestOk = 'default' === setting.kind && !sameLocation && isUsableDir(fromManifest);
|
|
19
21
|
return {
|
|
20
22
|
publicDir: rootOk ? fromRoot : manifestOk ? fromManifest : void 0,
|
|
21
23
|
fromRoot,
|
|
@@ -27,11 +29,39 @@ function inspectPublicFolders(manifestPath, projectRoot) {
|
|
|
27
29
|
function resolvePublicFolder(manifestPath, projectRoot) {
|
|
28
30
|
return inspectPublicFolders(manifestPath, projectRoot).publicDir;
|
|
29
31
|
}
|
|
32
|
+
function isUsableFile(candidate) {
|
|
33
|
+
try {
|
|
34
|
+
if (!__rspack_external_node_fs_1b05aee1.existsSync(candidate)) return false;
|
|
35
|
+
const stat = __rspack_external_node_fs_1b05aee1.statSync(candidate);
|
|
36
|
+
return 'function' == typeof stat?.isFile ? stat.isFile() : true;
|
|
37
|
+
} catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function publicRelativePath(ref) {
|
|
42
|
+
return String(ref || '').replace(/\\/g, '/').replace(/^(?:\/public\/|(?:\.\/)?public\/)/i, '').replace(/^\.\//, '').replace(/^\/+/, '');
|
|
43
|
+
}
|
|
44
|
+
function findPublicFile(manifestPath, projectRoot, ref) {
|
|
45
|
+
const rel = publicRelativePath(ref);
|
|
46
|
+
if (!rel || rel.split('/').includes('..') || __rspack_external_node_path_806ed179.isAbsolute(rel)) return;
|
|
47
|
+
const { publicDir } = inspectPublicFolders(manifestPath, projectRoot);
|
|
48
|
+
if (!publicDir) return;
|
|
49
|
+
const candidate = __rspack_external_node_path_806ed179.join(publicDir, rel);
|
|
50
|
+
return isUsableFile(candidate) ? candidate : void 0;
|
|
51
|
+
}
|
|
30
52
|
function publicFolderOrDefault(manifestPath, projectRoot) {
|
|
31
53
|
return resolvePublicFolder(manifestPath, projectRoot) || __rspack_external_node_path_806ed179.join(projectRoot, 'public');
|
|
32
54
|
}
|
|
33
55
|
function publicResolveRoots(projectRoot, manifestPath) {
|
|
56
|
+
const setting = publicFolderSetting(projectRoot);
|
|
34
57
|
const manifestDir = __rspack_external_node_path_806ed179.dirname(manifestPath);
|
|
58
|
+
if ('off' === setting.kind) return [
|
|
59
|
+
manifestDir
|
|
60
|
+
];
|
|
61
|
+
if ('path' === setting.kind) return [
|
|
62
|
+
setting.dir,
|
|
63
|
+
manifestDir
|
|
64
|
+
];
|
|
35
65
|
const fromRoot = __rspack_external_node_path_806ed179.join(projectRoot, 'public');
|
|
36
66
|
const fromManifest = __rspack_external_node_path_806ed179.join(manifestDir, 'public');
|
|
37
67
|
const roots = [
|
|
@@ -49,4 +79,4 @@ function publicRootsFor(compiler) {
|
|
|
49
79
|
if (!compiler) return [];
|
|
50
80
|
return publicRootsByCompiler.get(compiler) || [];
|
|
51
81
|
}
|
|
52
|
-
export { inspectPublicFolders, publicFolderOrDefault, publicResolveRoots, publicRootsFor, rememberPublicRoots };
|
|
82
|
+
export { findPublicFile, inspectPublicFolders, publicFolderOrDefault, publicRelativePath, publicResolveRoots, publicRootsFor, rememberPublicRoots };
|
package/dist/143~0.mjs
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { createRequire as __extjsCreateRequire } from "node:module"; const require = __extjsCreateRequire(import.meta.url);
|
|
2
|
+
import { isChromiumBasedBrowser, parseJsonSafe, isGeckoBasedBrowser } from "./937~0.mjs";
|
|
3
|
+
import * as __rspack_external_node_fs_1b05aee1 from "node:fs";
|
|
4
|
+
const CHROMIUM_VENDOR_PREFIXES = [
|
|
5
|
+
'chrome',
|
|
6
|
+
'edge'
|
|
7
|
+
];
|
|
8
|
+
function classifyPrefixes(browser) {
|
|
9
|
+
const isSafariTarget = 'safari' === browser || 'webkit-based' === browser || String(browser).includes('webkit');
|
|
10
|
+
const isChromiumTarget = isChromiumBasedBrowser(String(browser)) || isSafariTarget;
|
|
11
|
+
const isGeckoTarget = isGeckoBasedBrowser(String(browser));
|
|
12
|
+
const chromiumPrefixes = new Set([
|
|
13
|
+
'chromium'
|
|
14
|
+
]);
|
|
15
|
+
const geckoPrefixes = new Set([
|
|
16
|
+
'gecko',
|
|
17
|
+
'firefox'
|
|
18
|
+
]);
|
|
19
|
+
const webkitPrefixes = new Set([
|
|
20
|
+
'safari',
|
|
21
|
+
'webkit'
|
|
22
|
+
]);
|
|
23
|
+
const isFamilyPrefix = (prefix)=>isChromiumTarget && chromiumPrefixes.has(prefix) || isGeckoTarget && geckoPrefixes.has(prefix);
|
|
24
|
+
const isSpecificPrefix = (prefix)=>prefix === browser || isSafariTarget && webkitPrefixes.has(prefix);
|
|
25
|
+
return {
|
|
26
|
+
isChromiumTarget,
|
|
27
|
+
isFamilyPrefix,
|
|
28
|
+
isSpecificPrefix
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function filterKeysForThisBrowser(manifest, browser, options = {}) {
|
|
32
|
+
const { isFamilyPrefix, isSpecificPrefix } = classifyPrefixes(browser);
|
|
33
|
+
const fallbackPrefixes = new Set((options.fallbacks || []).map((prefix)=>prefix.replace(/:$/, '')));
|
|
34
|
+
const resolve = (node)=>{
|
|
35
|
+
if (Array.isArray(node)) return node.map((item)=>resolve(item));
|
|
36
|
+
if (node && 'object' == typeof node) {
|
|
37
|
+
const result = new Map();
|
|
38
|
+
const fallbackMatches = new Map();
|
|
39
|
+
const familyMatches = new Map();
|
|
40
|
+
const specificMatches = new Map();
|
|
41
|
+
for (const [key, value] of Object.entries(node)){
|
|
42
|
+
const indexOfColon = key.indexOf(':');
|
|
43
|
+
if (-1 === indexOfColon) {
|
|
44
|
+
result.set(key, resolve(value));
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const prefix = key.substring(0, indexOfColon);
|
|
48
|
+
const strippedKey = key.substring(indexOfColon + 1);
|
|
49
|
+
if (isSpecificPrefix(prefix)) specificMatches.set(strippedKey, resolve(value));
|
|
50
|
+
else if (isFamilyPrefix(prefix)) familyMatches.set(strippedKey, resolve(value));
|
|
51
|
+
else if (fallbackPrefixes.has(prefix)) fallbackMatches.set(strippedKey, resolve(value));
|
|
52
|
+
}
|
|
53
|
+
for (const [strippedKey, value] of fallbackMatches)result.set(strippedKey, value);
|
|
54
|
+
for (const [strippedKey, value] of familyMatches)result.set(strippedKey, value);
|
|
55
|
+
for (const [strippedKey, value] of specificMatches)result.set(strippedKey, value);
|
|
56
|
+
return Object.fromEntries(result);
|
|
57
|
+
}
|
|
58
|
+
return node;
|
|
59
|
+
};
|
|
60
|
+
return resolve(manifest);
|
|
61
|
+
}
|
|
62
|
+
function findDroppedVendorKeys(manifest, browser) {
|
|
63
|
+
const { isChromiumTarget, isFamilyPrefix, isSpecificPrefix } = classifyPrefixes(browser);
|
|
64
|
+
const found = [];
|
|
65
|
+
if (!isChromiumTarget) return found;
|
|
66
|
+
const vendors = new Set(CHROMIUM_VENDOR_PREFIXES);
|
|
67
|
+
const formerFamily = new Set([
|
|
68
|
+
'chromium',
|
|
69
|
+
...vendors
|
|
70
|
+
]);
|
|
71
|
+
const join = (at, key)=>at ? `${at}.${key}` : key;
|
|
72
|
+
const walk = (node, at)=>{
|
|
73
|
+
if (Array.isArray(node)) {
|
|
74
|
+
for (const [index, item] of node.entries())walk(item, join(at, String(index)));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (!node || 'object' != typeof node) return;
|
|
78
|
+
const lastFormerFamily = new Map();
|
|
79
|
+
const hasSpecific = new Set();
|
|
80
|
+
const hasSibling = new Set();
|
|
81
|
+
for (const key of Object.keys(node)){
|
|
82
|
+
const colon = key.indexOf(':');
|
|
83
|
+
if (-1 === colon) {
|
|
84
|
+
hasSibling.add(key);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const prefix = key.substring(0, colon);
|
|
88
|
+
const strippedKey = key.substring(colon + 1);
|
|
89
|
+
if (isSpecificPrefix(prefix)) hasSpecific.add(strippedKey);
|
|
90
|
+
else if ('chromium' === prefix) hasSibling.add(strippedKey);
|
|
91
|
+
if (formerFamily.has(prefix)) lastFormerFamily.set(strippedKey, key);
|
|
92
|
+
}
|
|
93
|
+
for (const [key, value] of Object.entries(node)){
|
|
94
|
+
const colon = key.indexOf(':');
|
|
95
|
+
if (-1 === colon) {
|
|
96
|
+
walk(value, join(at, key));
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const prefix = key.substring(0, colon);
|
|
100
|
+
const strippedKey = key.substring(colon + 1);
|
|
101
|
+
if (isSpecificPrefix(prefix) || isFamilyPrefix(prefix)) walk(value, join(at, key));
|
|
102
|
+
else if (vendors.has(prefix)) found.push({
|
|
103
|
+
path: join(at, key),
|
|
104
|
+
familyPath: join(at, `chromium:${strippedKey}`),
|
|
105
|
+
vendor: prefix,
|
|
106
|
+
appliedBefore: !hasSpecific.has(strippedKey) && !hasSibling.has(strippedKey) && lastFormerFamily.get(strippedKey) === key
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
walk(manifest, '');
|
|
111
|
+
return found;
|
|
112
|
+
}
|
|
113
|
+
function isValidManifestVersion(value) {
|
|
114
|
+
return 2 === value || 3 === value;
|
|
115
|
+
}
|
|
116
|
+
function findPrefixedManifestVersionKeys(manifest) {
|
|
117
|
+
if (!manifest || 'object' != typeof manifest) return [];
|
|
118
|
+
return Object.keys(manifest).filter((key)=>{
|
|
119
|
+
const colon = key.indexOf(':');
|
|
120
|
+
return colon > 0 && 'manifest_version' === key.substring(colon + 1);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const THEME_DISQUALIFYING_KEYS = [
|
|
124
|
+
'background',
|
|
125
|
+
"content_scripts",
|
|
126
|
+
'action',
|
|
127
|
+
'browser_action',
|
|
128
|
+
'page_action',
|
|
129
|
+
'sidebar_action',
|
|
130
|
+
'side_panel',
|
|
131
|
+
'options_page',
|
|
132
|
+
'options_ui',
|
|
133
|
+
'devtools_page',
|
|
134
|
+
'chrome_url_overrides',
|
|
135
|
+
'sandbox',
|
|
136
|
+
"user_scripts",
|
|
137
|
+
'declarative_net_request',
|
|
138
|
+
'web_accessible_resources'
|
|
139
|
+
];
|
|
140
|
+
function isStaticTheme(manifest) {
|
|
141
|
+
if (!manifest || 'object' != typeof manifest) return false;
|
|
142
|
+
const theme = manifest.theme;
|
|
143
|
+
if (!theme || 'object' != typeof theme) return false;
|
|
144
|
+
return !THEME_DISQUALIFYING_KEYS.some((key)=>{
|
|
145
|
+
const value = manifest[key];
|
|
146
|
+
return null != value;
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function isStaticThemeSource(manifestPath, browser) {
|
|
150
|
+
if (!manifestPath) return false;
|
|
151
|
+
try {
|
|
152
|
+
const parsed = parseJsonSafe(__rspack_external_node_fs_1b05aee1.readFileSync(manifestPath, 'utf-8'));
|
|
153
|
+
return isStaticTheme(filterKeysForThisBrowser(parsed, browser));
|
|
154
|
+
} catch {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export { filterKeysForThisBrowser, findDroppedVendorKeys, findPrefixedManifestVersionKeys, isStaticTheme, isStaticThemeSource, isValidManifestVersion };
|
package/dist/471~0.mjs
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createRequire as __extjsCreateRequire } from "node:module"; const require = __extjsCreateRequire(import.meta.url);
|
|
2
|
+
import * as __rspack_external_node_path_806ed179 from "node:path";
|
|
3
|
+
const foldersByProjectRoot = new Map();
|
|
4
|
+
function rememberSpecialFoldersConfig(projectRoot, folders) {
|
|
5
|
+
if (!projectRoot) return;
|
|
6
|
+
if (folders) foldersByProjectRoot.set(__rspack_external_node_path_806ed179.resolve(projectRoot), folders);
|
|
7
|
+
else foldersByProjectRoot.delete(__rspack_external_node_path_806ed179.resolve(projectRoot));
|
|
8
|
+
}
|
|
9
|
+
function rememberedFolders(projectRoot) {
|
|
10
|
+
if (!projectRoot) return {};
|
|
11
|
+
return foldersByProjectRoot.get(__rspack_external_node_path_806ed179.resolve(projectRoot)) || {};
|
|
12
|
+
}
|
|
13
|
+
const SCRIPTS_FOLDER_EXTENSIONS = new Set([
|
|
14
|
+
'.js',
|
|
15
|
+
'.mjs',
|
|
16
|
+
'.jsx',
|
|
17
|
+
'.mjsx',
|
|
18
|
+
'.ts',
|
|
19
|
+
'.mts',
|
|
20
|
+
'.tsx',
|
|
21
|
+
'.mtsx'
|
|
22
|
+
]);
|
|
23
|
+
function isScriptsFolderEntry(filePath) {
|
|
24
|
+
return SCRIPTS_FOLDER_EXTENSIONS.has(__rspack_external_node_path_806ed179.extname(filePath).toLowerCase());
|
|
25
|
+
}
|
|
26
|
+
function foldersRoots(projectRoot) {
|
|
27
|
+
const folders = rememberedFolders(projectRoot);
|
|
28
|
+
const roots = {};
|
|
29
|
+
for (const name of [
|
|
30
|
+
'pages',
|
|
31
|
+
"scripts"
|
|
32
|
+
]){
|
|
33
|
+
const setting = folders[name];
|
|
34
|
+
if (false === setting) continue;
|
|
35
|
+
const root = 'string' == typeof setting && setting.trim() ? __rspack_external_node_path_806ed179.resolve(projectRoot, setting) : __rspack_external_node_path_806ed179.join(projectRoot, name);
|
|
36
|
+
if (__rspack_external_node_path_806ed179.basename(root) === name) roots[name] = root;
|
|
37
|
+
}
|
|
38
|
+
return roots;
|
|
39
|
+
}
|
|
40
|
+
function publicFolderSetting(projectRoot) {
|
|
41
|
+
const setting = rememberedFolders(projectRoot).public;
|
|
42
|
+
if (false === setting) return {
|
|
43
|
+
kind: 'off'
|
|
44
|
+
};
|
|
45
|
+
if ('string' == typeof setting && setting.trim() && projectRoot) return {
|
|
46
|
+
kind: 'path',
|
|
47
|
+
dir: __rspack_external_node_path_806ed179.resolve(projectRoot, setting)
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
kind: 'default'
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export { foldersRoots, isScriptsFolderEntry, publicFolderSetting, rememberSpecialFoldersConfig, rememberedFolders };
|
|
@@ -1,153 +1,6 @@
|
|
|
1
1
|
import { createRequire as __extjsCreateRequire } from "node:module"; const require = __extjsCreateRequire(import.meta.url);
|
|
2
2
|
import pintor from "pintor";
|
|
3
|
-
import {
|
|
4
|
-
import { prefix as messaging_prefix } from "./852~0.mjs";
|
|
5
|
-
import * as __rspack_external_node_fs_1b05aee1 from "node:fs";
|
|
6
|
-
const CHROMIUM_VENDOR_PREFIXES = [
|
|
7
|
-
'chrome',
|
|
8
|
-
'edge'
|
|
9
|
-
];
|
|
10
|
-
function classifyPrefixes(browser) {
|
|
11
|
-
const isSafariTarget = 'safari' === browser || 'webkit-based' === browser || String(browser).includes('webkit');
|
|
12
|
-
const isChromiumTarget = isChromiumBasedBrowser(String(browser)) || isSafariTarget;
|
|
13
|
-
const isGeckoTarget = isGeckoBasedBrowser(String(browser));
|
|
14
|
-
const chromiumPrefixes = new Set([
|
|
15
|
-
'chromium'
|
|
16
|
-
]);
|
|
17
|
-
const geckoPrefixes = new Set([
|
|
18
|
-
'gecko',
|
|
19
|
-
'firefox'
|
|
20
|
-
]);
|
|
21
|
-
const webkitPrefixes = new Set([
|
|
22
|
-
'safari',
|
|
23
|
-
'webkit'
|
|
24
|
-
]);
|
|
25
|
-
const isFamilyPrefix = (prefix)=>isChromiumTarget && chromiumPrefixes.has(prefix) || isGeckoTarget && geckoPrefixes.has(prefix);
|
|
26
|
-
const isSpecificPrefix = (prefix)=>prefix === browser || isSafariTarget && webkitPrefixes.has(prefix);
|
|
27
|
-
return {
|
|
28
|
-
isChromiumTarget,
|
|
29
|
-
isFamilyPrefix,
|
|
30
|
-
isSpecificPrefix
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
function filterKeysForThisBrowser(manifest, browser) {
|
|
34
|
-
const { isFamilyPrefix, isSpecificPrefix } = classifyPrefixes(browser);
|
|
35
|
-
const resolve = (node)=>{
|
|
36
|
-
if (Array.isArray(node)) return node.map((item)=>resolve(item));
|
|
37
|
-
if (node && 'object' == typeof node) {
|
|
38
|
-
const result = new Map();
|
|
39
|
-
const familyMatches = new Map();
|
|
40
|
-
const specificMatches = new Map();
|
|
41
|
-
for (const [key, value] of Object.entries(node)){
|
|
42
|
-
const indexOfColon = key.indexOf(':');
|
|
43
|
-
if (-1 === indexOfColon) {
|
|
44
|
-
result.set(key, resolve(value));
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
const prefix = key.substring(0, indexOfColon);
|
|
48
|
-
const strippedKey = key.substring(indexOfColon + 1);
|
|
49
|
-
if (isSpecificPrefix(prefix)) specificMatches.set(strippedKey, resolve(value));
|
|
50
|
-
else if (isFamilyPrefix(prefix)) familyMatches.set(strippedKey, resolve(value));
|
|
51
|
-
}
|
|
52
|
-
for (const [strippedKey, value] of familyMatches)result.set(strippedKey, value);
|
|
53
|
-
for (const [strippedKey, value] of specificMatches)result.set(strippedKey, value);
|
|
54
|
-
return Object.fromEntries(result);
|
|
55
|
-
}
|
|
56
|
-
return node;
|
|
57
|
-
};
|
|
58
|
-
return resolve(manifest);
|
|
59
|
-
}
|
|
60
|
-
function findDroppedVendorKeys(manifest, browser) {
|
|
61
|
-
const { isChromiumTarget, isFamilyPrefix, isSpecificPrefix } = classifyPrefixes(browser);
|
|
62
|
-
const found = [];
|
|
63
|
-
if (!isChromiumTarget) return found;
|
|
64
|
-
const vendors = new Set(CHROMIUM_VENDOR_PREFIXES);
|
|
65
|
-
const formerFamily = new Set([
|
|
66
|
-
'chromium',
|
|
67
|
-
...vendors
|
|
68
|
-
]);
|
|
69
|
-
const join = (at, key)=>at ? `${at}.${key}` : key;
|
|
70
|
-
const walk = (node, at)=>{
|
|
71
|
-
if (Array.isArray(node)) {
|
|
72
|
-
for (const [index, item] of node.entries())walk(item, join(at, String(index)));
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
if (!node || 'object' != typeof node) return;
|
|
76
|
-
const lastFormerFamily = new Map();
|
|
77
|
-
const hasSpecific = new Set();
|
|
78
|
-
for (const key of Object.keys(node)){
|
|
79
|
-
const colon = key.indexOf(':');
|
|
80
|
-
if (-1 === colon) continue;
|
|
81
|
-
const prefix = key.substring(0, colon);
|
|
82
|
-
const strippedKey = key.substring(colon + 1);
|
|
83
|
-
if (isSpecificPrefix(prefix)) hasSpecific.add(strippedKey);
|
|
84
|
-
else if (formerFamily.has(prefix)) lastFormerFamily.set(strippedKey, key);
|
|
85
|
-
}
|
|
86
|
-
for (const [key, value] of Object.entries(node)){
|
|
87
|
-
const colon = key.indexOf(':');
|
|
88
|
-
if (-1 === colon) {
|
|
89
|
-
walk(value, join(at, key));
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
const prefix = key.substring(0, colon);
|
|
93
|
-
const strippedKey = key.substring(colon + 1);
|
|
94
|
-
if (isSpecificPrefix(prefix) || isFamilyPrefix(prefix)) walk(value, join(at, key));
|
|
95
|
-
else if (vendors.has(prefix)) found.push({
|
|
96
|
-
path: join(at, key),
|
|
97
|
-
familyPath: join(at, `chromium:${strippedKey}`),
|
|
98
|
-
vendor: prefix,
|
|
99
|
-
appliedBefore: !hasSpecific.has(strippedKey) && lastFormerFamily.get(strippedKey) === key
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
walk(manifest, '');
|
|
104
|
-
return found;
|
|
105
|
-
}
|
|
106
|
-
function isValidManifestVersion(value) {
|
|
107
|
-
return 2 === value || 3 === value;
|
|
108
|
-
}
|
|
109
|
-
function findPrefixedManifestVersionKeys(manifest) {
|
|
110
|
-
if (!manifest || 'object' != typeof manifest) return [];
|
|
111
|
-
return Object.keys(manifest).filter((key)=>{
|
|
112
|
-
const colon = key.indexOf(':');
|
|
113
|
-
return colon > 0 && 'manifest_version' === key.substring(colon + 1);
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
const THEME_DISQUALIFYING_KEYS = [
|
|
117
|
-
'background',
|
|
118
|
-
"content_scripts",
|
|
119
|
-
'action',
|
|
120
|
-
'browser_action',
|
|
121
|
-
'page_action',
|
|
122
|
-
'sidebar_action',
|
|
123
|
-
'side_panel',
|
|
124
|
-
'options_page',
|
|
125
|
-
'options_ui',
|
|
126
|
-
'devtools_page',
|
|
127
|
-
'chrome_url_overrides',
|
|
128
|
-
'sandbox',
|
|
129
|
-
"user_scripts",
|
|
130
|
-
'declarative_net_request',
|
|
131
|
-
'web_accessible_resources'
|
|
132
|
-
];
|
|
133
|
-
function isStaticTheme(manifest) {
|
|
134
|
-
if (!manifest || 'object' != typeof manifest) return false;
|
|
135
|
-
const theme = manifest.theme;
|
|
136
|
-
if (!theme || 'object' != typeof theme) return false;
|
|
137
|
-
return !THEME_DISQUALIFYING_KEYS.some((key)=>{
|
|
138
|
-
const value = manifest[key];
|
|
139
|
-
return null != value;
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
function isStaticThemeSource(manifestPath, browser) {
|
|
143
|
-
if (!manifestPath) return false;
|
|
144
|
-
try {
|
|
145
|
-
const parsed = parseJsonSafe(__rspack_external_node_fs_1b05aee1.readFileSync(manifestPath, 'utf-8'));
|
|
146
|
-
return isStaticTheme(filterKeysForThisBrowser(parsed, browser));
|
|
147
|
-
} catch {
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
3
|
+
import { prefix } from "./852~0.mjs";
|
|
151
4
|
function importScriptsDependencyMissing(workerPath, literal, expectedPath, sourceSibling) {
|
|
152
5
|
const lines = [];
|
|
153
6
|
lines.push(`The background service worker calls importScripts('${literal}'), but the file isn't in the output.`);
|
|
@@ -196,7 +49,11 @@ const SPLIT_ENTRY_SURFACES = {
|
|
|
196
49
|
effect: "the script never runs"
|
|
197
50
|
}
|
|
198
51
|
};
|
|
199
|
-
|
|
52
|
+
const SPLIT_ENTRY_CAUSES = {
|
|
53
|
+
runtimeChunk: ()=>"Only a user-set optimization.runtimeChunk does this. Keep runtimeChunk: false so every entry carries its own runtime",
|
|
54
|
+
cacheGroup: ()=>"Only a user-set optimization.splitChunks cache group does this. Use chunks: 'async' and import() the shared module"
|
|
55
|
+
};
|
|
56
|
+
function entrySplitAcrossInitialFiles(entryName, surface, ownFile, extraFiles, cause = 'cacheGroup') {
|
|
200
57
|
const shape = SPLIT_ENTRY_SURFACES[surface];
|
|
201
58
|
const count = extraFiles.length + 1;
|
|
202
59
|
const lines = [];
|
|
@@ -204,7 +61,7 @@ function entrySplitAcrossInitialFiles(entryName, surface, ownFile, extraFiles) {
|
|
|
204
61
|
lines.push(`${pintor.gray('LOADED')} ${pintor.underline(ownFile)}`);
|
|
205
62
|
lines.push(`${pintor.gray('NOT LOADED')} ${extraFiles.map((file)=>pintor.underline(file)).join(', ')}`);
|
|
206
63
|
lines.push(`The entry waits for the other files at runtime and never runs, so ${shape.effect}.`);
|
|
207
|
-
lines.push(
|
|
64
|
+
lines.push(`${SPLIT_ENTRY_CAUSES[cause]()}: ${pintor.blue(SPLIT_ENTRY_RECIPE_URL)}`);
|
|
208
65
|
return lines.join('\n');
|
|
209
66
|
}
|
|
210
67
|
const PAGE_CONTEXT_SURFACES = {
|
|
@@ -238,7 +95,7 @@ function getURLDependencyMissing(assetName, literal, expectedPath) {
|
|
|
238
95
|
}
|
|
239
96
|
function runtimeSetSurfaceDependencyMissing(assetName, literal, expectedPath) {
|
|
240
97
|
const lines = [];
|
|
241
|
-
lines.push(`${assetName}
|
|
98
|
+
lines.push(`${assetName} names '${literal}' at runtime (setPopup, setIcon, panels.create, tabs.create and friends), but the file isn't in the output.`);
|
|
242
99
|
lines.push(`${pintor.gray('NOT FOUND')} ${pintor.underline(expectedPath)}`);
|
|
243
100
|
lines.push("The surface opens a 404 at runtime.");
|
|
244
101
|
lines.push(`Move the file to ${pintor.blue(expectedPath)} or ${pintor.blue('public/')} so it ships with the extension.`);
|
|
@@ -254,7 +111,7 @@ function staticImportDependencyMissing(assetName, literal, expectedPath) {
|
|
|
254
111
|
}
|
|
255
112
|
function reservedScriptsFolder(relPath, indicators) {
|
|
256
113
|
const reasons = indicators.map((r)=>`- ${pintor.gray(r)}`).join('\n');
|
|
257
|
-
return `${
|
|
114
|
+
return `${prefix('error')} scripts/ is a reserved folder in Extension.js.\n${pintor.gray('PATH')} ${pintor.underline(relPath)}\nEvery file under ${pintor.blue("scripts/")} is wrapped with the browser content-script mount runtime, so Node.js-only files placed here fail to parse or run.\nThis file looks Node.js-only:\n${reasons}\nRename the folder at the project root (for example ${pintor.blue('bin/')}, ${pintor.blue('tools/')}, or ${pintor.blue('tasks/')}), or move the file out of scripts/.`;
|
|
258
115
|
}
|
|
259
116
|
function compiledSourceSpelling(assetName, api, literal, emittedPath) {
|
|
260
117
|
const lines = [];
|
|
@@ -265,4 +122,4 @@ function compiledSourceSpelling(assetName, api, literal, emittedPath) {
|
|
|
265
122
|
lines.push(`Reference the emitted path: ${pintor.blue(emittedPath)}.`);
|
|
266
123
|
return lines.join('\n');
|
|
267
124
|
}
|
|
268
|
-
export { compiledSourceSpelling, entrySplitAcrossInitialFiles, fetchedFileDependencyMissing,
|
|
125
|
+
export { compiledSourceSpelling, entrySplitAcrossInitialFiles, fetchedFileDependencyMissing, getURLDependencyMissing, importScriptsDependencyMissing, injectedCompiledSourceLiteral, injectedFileDependencyMissing, reservedScriptsFolder, runtimeSetSurfaceDependencyMissing, staticImportDependencyMissing, workerStartedFromPageContext };
|
package/dist/616~0.mjs
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { createRequire as __extjsCreateRequire } from "node:module"; const require = __extjsCreateRequire(import.meta.url);
|
|
2
|
-
import { controlTokenPath, legacyControlTokenPath } from "./950~0.mjs";
|
|
2
|
+
import { CONTROL_TOKEN_FILE_PREFIX, controlTokenPath, legacyControlTokenPath, sessionStateDir } from "./950~0.mjs";
|
|
3
3
|
import * as __rspack_external_node_fs_1b05aee1 from "node:fs";
|
|
4
4
|
import * as __rspack_external_node_path_806ed179 from "node:path";
|
|
5
5
|
import * as __rspack_external_node_crypto_2e7c4b46 from "node:crypto";
|
|
6
|
+
const LOG_CONTEXTS = [
|
|
7
|
+
'background',
|
|
8
|
+
'content',
|
|
9
|
+
'popup',
|
|
10
|
+
'options',
|
|
11
|
+
'sidebar',
|
|
12
|
+
'devtools',
|
|
13
|
+
'newtab',
|
|
14
|
+
'history',
|
|
15
|
+
'bookmarks'
|
|
16
|
+
];
|
|
6
17
|
const REFUSAL_NEEDS_HEADED_WINDOW = 'needs_headed_window';
|
|
7
18
|
const REFUSAL_NEEDS_USER_GESTURE = 'needs_user_gesture';
|
|
8
19
|
const REFUSAL_SURFACE_NOT_OPEN = 'surface_not_open';
|
|
@@ -40,22 +51,34 @@ function writeControlToken(projectPath, browser) {
|
|
|
40
51
|
__rspack_external_node_fs_1b05aee1.chmodSync(file, 384);
|
|
41
52
|
} catch {}
|
|
42
53
|
try {
|
|
43
|
-
|
|
54
|
+
const legacy = legacyControlTokenPath(projectPath);
|
|
55
|
+
__rspack_external_node_fs_1b05aee1.writeFileSync(legacy, token, {
|
|
44
56
|
encoding: 'utf-8',
|
|
45
57
|
mode: 384
|
|
46
58
|
});
|
|
59
|
+
__rspack_external_node_fs_1b05aee1.chmodSync(legacy, 384);
|
|
47
60
|
} catch {}
|
|
48
61
|
return token;
|
|
49
62
|
}
|
|
63
|
+
function readTokenFile(file) {
|
|
64
|
+
try {
|
|
65
|
+
return __rspack_external_node_fs_1b05aee1.readFileSync(file, 'utf-8').trim() || null;
|
|
66
|
+
} catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function hasAnyPerBrowserToken(projectPath) {
|
|
71
|
+
try {
|
|
72
|
+
return __rspack_external_node_fs_1b05aee1.readdirSync(sessionStateDir(projectPath)).some((name)=>name.startsWith(CONTROL_TOKEN_FILE_PREFIX));
|
|
73
|
+
} catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
50
77
|
function readControlToken(projectPath, browser) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const token = __rspack_external_node_fs_1b05aee1.readFileSync(file, 'utf-8').trim();
|
|
56
|
-
if (token.length) return token;
|
|
57
|
-
} catch {}
|
|
58
|
-
return null;
|
|
78
|
+
const token = readTokenFile(controlTokenPath(projectPath, browser));
|
|
79
|
+
if (token) return token;
|
|
80
|
+
if (hasAnyPerBrowserToken(projectPath)) return null;
|
|
81
|
+
return readTokenFile(legacyControlTokenPath(projectPath));
|
|
59
82
|
}
|
|
60
83
|
function clearControlToken(projectPath, browser) {
|
|
61
84
|
const file = controlTokenPath(projectPath, browser);
|
|
@@ -75,4 +98,4 @@ function clearControlToken(projectPath, browser) {
|
|
|
75
98
|
});
|
|
76
99
|
} catch {}
|
|
77
100
|
}
|
|
78
|
-
export { CONTROL_WS_PATH, REFUSAL_API_UNAVAILABLE, REFUSAL_NEEDS_HEADED_WINDOW, REFUSAL_NEEDS_USER_GESTURE, REFUSAL_SURFACE_NOT_OPEN, REFUSAL_TAB_NOT_FOUND, REFUSAL_URL_REFUSED, clearControlToken, readControlToken, readPersistedControlPort, writeControlToken, writePersistedControlPort };
|
|
101
|
+
export { CONTROL_WS_PATH, LOG_CONTEXTS, REFUSAL_API_UNAVAILABLE, REFUSAL_NEEDS_HEADED_WINDOW, REFUSAL_NEEDS_USER_GESTURE, REFUSAL_SURFACE_NOT_OPEN, REFUSAL_TAB_NOT_FOUND, REFUSAL_URL_REFUSED, clearControlToken, readControlToken, readPersistedControlPort, writeControlToken, writePersistedControlPort };
|
|
@@ -1,64 +1,7 @@
|
|
|
1
1
|
import { createRequire as __extjsCreateRequire } from "node:module"; const require = __extjsCreateRequire(import.meta.url);
|
|
2
|
-
import
|
|
2
|
+
import { stripBom } from "./937~0.mjs";
|
|
3
3
|
import * as __rspack_external_node_fs_1b05aee1 from "node:fs";
|
|
4
|
-
__rspack_external_node_path_806ed179
|
|
5
|
-
const CHROMIUM_BASED_BROWSERS = [
|
|
6
|
-
'chrome',
|
|
7
|
-
'edge',
|
|
8
|
-
'brave',
|
|
9
|
-
'opera',
|
|
10
|
-
'vivaldi',
|
|
11
|
-
'yandex'
|
|
12
|
-
];
|
|
13
|
-
const GECKO_BASED_BROWSERS = [
|
|
14
|
-
'firefox',
|
|
15
|
-
'waterfox',
|
|
16
|
-
'librewolf',
|
|
17
|
-
'zen',
|
|
18
|
-
'floorp'
|
|
19
|
-
];
|
|
20
|
-
const WEBKIT_BASED_BROWSERS = [
|
|
21
|
-
'safari'
|
|
22
|
-
];
|
|
23
|
-
const CHROMIUM_FAMILY_ALIASES = [
|
|
24
|
-
'chromium',
|
|
25
|
-
'chrome',
|
|
26
|
-
'edge',
|
|
27
|
-
'chromium-based'
|
|
28
|
-
];
|
|
29
|
-
const GECKO_FAMILY_ALIASES = [
|
|
30
|
-
'firefox',
|
|
31
|
-
'gecko-based'
|
|
32
|
-
];
|
|
33
|
-
const EMULATOR_BROWSER = 'chromium-emulator';
|
|
34
|
-
function isEmulatorLaneEnabled(env = process.env) {
|
|
35
|
-
const value = String(env.EXTENSION_EXPERIMENTAL_EMULATOR || '').trim().toLowerCase();
|
|
36
|
-
return '1' === value || 'true' === value;
|
|
37
|
-
}
|
|
38
|
-
function isEmulatorBrowser(browser) {
|
|
39
|
-
return browser === EMULATOR_BROWSER;
|
|
40
|
-
}
|
|
41
|
-
[
|
|
42
|
-
...CHROMIUM_BASED_BROWSERS,
|
|
43
|
-
...GECKO_BASED_BROWSERS
|
|
44
|
-
];
|
|
45
|
-
function isChromiumBasedBrowser(browser) {
|
|
46
|
-
return CHROMIUM_BASED_BROWSERS.includes(browser) || String(browser).includes('chromium');
|
|
47
|
-
}
|
|
48
|
-
function isGeckoBasedBrowser(browser) {
|
|
49
|
-
return GECKO_BASED_BROWSERS.includes(browser) || String(browser).includes('gecko') || String(browser).includes('firefox');
|
|
50
|
-
}
|
|
51
|
-
function isWebkitBasedBrowser(browser) {
|
|
52
|
-
return WEBKIT_BASED_BROWSERS.includes(browser) || String(browser).includes('webkit');
|
|
53
|
-
}
|
|
54
|
-
function stripBom(text) {
|
|
55
|
-
const raw = 'string' == typeof text ? text : String(text || '');
|
|
56
|
-
return raw && 0xfeff === raw.charCodeAt(0) ? raw.slice(1) : raw;
|
|
57
|
-
}
|
|
58
|
-
function parseJsonSafe(text) {
|
|
59
|
-
const s = stripBom(text);
|
|
60
|
-
return JSON.parse(s || '{}');
|
|
61
|
-
}
|
|
4
|
+
import * as __rspack_external_node_path_806ed179 from "node:path";
|
|
62
5
|
const PROJECT_MANIFEST_FILENAMES = [
|
|
63
6
|
'package.json',
|
|
64
7
|
'deno.jsonc',
|
|
@@ -258,4 +201,4 @@ function validateDenoConfig(denoConfigPath) {
|
|
|
258
201
|
return false;
|
|
259
202
|
}
|
|
260
203
|
}
|
|
261
|
-
export {
|
|
204
|
+
export { PROJECT_MANIFEST_FILENAMES, findNearestDenoConfigSync, findNearestProjectManifestDirSync, findNearestProjectManifestSync, hasProjectDependency, readProjectDependencies, validateDenoConfig };
|