@eclipse-docks/core 0.7.88 → 0.7.90
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/vite-plugin-local-aliases.d.ts.map +1 -1
- package/dist/vite-plugin-local-aliases.js +25 -12
- package/dist/vite-plugin-local-aliases.js.map +1 -1
- package/dist/vite-plugin-resolve-deps.d.ts +2 -2
- package/dist/vite-plugin-resolve-deps.d.ts.map +1 -1
- package/dist/vite-plugin-resolve-deps.js +3 -2
- package/dist/vite-plugin-resolve-deps.js.map +1 -1
- package/package.json +1 -1
- package/src/vite-plugin-local-aliases.ts +43 -14
- package/src/vite-plugin-resolve-deps.ts +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin-local-aliases.d.ts","sourceRoot":"","sources":["../src/vite-plugin-local-aliases.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,MAAM,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAE5B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"vite-plugin-local-aliases.d.ts","sourceRoot":"","sources":["../src/vite-plugin-local-aliases.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,MAAM,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAE5B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAuFD,eAAO,MAAM,kBAAkB,GAC7B,UAAS,mBAAwB,KAChC,YA2BF,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
//#region src/vite-plugin-local-aliases.ts
|
|
4
|
-
|
|
4
|
+
function discoverLocalAliasesAndExtraExcludes(cfg, mode, options = {}) {
|
|
5
5
|
const useSrcInDev = options.useSrcInDev ?? true;
|
|
6
6
|
const alwaysUseSrc = options.alwaysUseSrc ?? false;
|
|
7
7
|
const rootDir = cfg.root ?? process.cwd();
|
|
@@ -9,27 +9,36 @@ var discoverLocalAliases = (cfg, mode, options = {}) => {
|
|
|
9
9
|
const entries = fs.readdirSync(packagesRoot, { withFileTypes: true });
|
|
10
10
|
const useSrc = alwaysUseSrc || useSrcInDev && mode === "development";
|
|
11
11
|
const patterns = options.patterns && options.patterns.length ? options.patterns : [{ folderPrefix: "extension-" }];
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const aliases = {};
|
|
13
|
+
const extraOptimizeDepsExclude = [];
|
|
14
|
+
for (const entry of entries) {
|
|
15
|
+
if (!entry.isDirectory()) continue;
|
|
14
16
|
const pattern = patterns.find((p) => entry.name.startsWith(p.folderPrefix));
|
|
15
|
-
if (!pattern)
|
|
17
|
+
if (!pattern) continue;
|
|
16
18
|
const pkgDir = path.join(packagesRoot, entry.name);
|
|
17
19
|
const pkgPath = path.join(pkgDir, "package.json");
|
|
18
|
-
if (!fs.existsSync(pkgPath))
|
|
20
|
+
if (!fs.existsSync(pkgPath)) continue;
|
|
19
21
|
const pkgJson = fs.readFileSync(pkgPath, "utf8");
|
|
20
22
|
const pkg = JSON.parse(pkgJson);
|
|
21
|
-
if (!pkg.name)
|
|
22
|
-
if (pattern.packageNamePrefix && !pkg.name.startsWith(pattern.packageNamePrefix))
|
|
23
|
+
if (!pkg.name) continue;
|
|
24
|
+
if (pattern.packageNamePrefix && !pkg.name.startsWith(pattern.packageNamePrefix)) continue;
|
|
23
25
|
const entryPoint = useSrc ? path.join(pkgDir, "src") : path.join(pkgDir, "dist");
|
|
24
26
|
aliases[pkg.name] = entryPoint;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
const more = pkg.eclipseDocks?.viteOptimizeDepsExclude;
|
|
28
|
+
if (Array.isArray(more)) {
|
|
29
|
+
for (const id of more) if (typeof id === "string" && id.length > 0) extraOptimizeDepsExclude.push(id);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
aliases,
|
|
34
|
+
extraOptimizeDepsExclude
|
|
35
|
+
};
|
|
36
|
+
}
|
|
28
37
|
var localAliasesPlugin = (options = {}) => {
|
|
29
38
|
return {
|
|
30
39
|
name: "local-aliases",
|
|
31
40
|
config(config, env) {
|
|
32
|
-
const aliases =
|
|
41
|
+
const { aliases, extraOptimizeDepsExclude } = discoverLocalAliasesAndExtraExcludes(config, env.mode, options);
|
|
33
42
|
config.resolve ??= {};
|
|
34
43
|
const existingAlias = config.resolve.alias ?? {};
|
|
35
44
|
config.resolve.alias = {
|
|
@@ -38,7 +47,11 @@ var localAliasesPlugin = (options = {}) => {
|
|
|
38
47
|
};
|
|
39
48
|
config.optimizeDeps ??= {};
|
|
40
49
|
const existingExclude = config.optimizeDeps.exclude ?? [];
|
|
41
|
-
config.optimizeDeps.exclude = [...new Set([
|
|
50
|
+
config.optimizeDeps.exclude = [...new Set([
|
|
51
|
+
...existingExclude,
|
|
52
|
+
...Object.keys(aliases),
|
|
53
|
+
...extraOptimizeDepsExclude
|
|
54
|
+
])];
|
|
42
55
|
}
|
|
43
56
|
};
|
|
44
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin-local-aliases.js","names":[],"sources":["../src/vite-plugin-local-aliases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport type { PluginOption, UserConfig } from 'vite';\n\nexport interface PackagePattern {\n /**\n * Folder name prefix used to detect packages, e.g. \"extension-\" or \"core\".\n */\n folderPrefix: string;\n\n /**\n * Optional package name prefix filter, e.g. \"@eclipse-docks/\".\n */\n packageNamePrefix?: string;\n}\n\nexport interface LocalAliasesOptions {\n /**\n * Root directory that contains the local packages.\n * Defaults to the parent of the Vite `root` directory.\n */\n packagesRoot?: string;\n\n /**\n * Package patterns to scan for. By default looks for \"extension-*\"\n * folders with any package name.\n */\n patterns?: PackagePattern[];\n\n /**\n * If true, aliases will point to `src` in dev mode and `dist` otherwise.\n * Defaults to `true`.\n */\n useSrcInDev?: boolean;\n /**\n * If true, always point aliases at `src` regardless of mode.\n */\n alwaysUseSrc?: boolean;\n}\n\
|
|
1
|
+
{"version":3,"file":"vite-plugin-local-aliases.js","names":[],"sources":["../src/vite-plugin-local-aliases.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport type { PluginOption, UserConfig } from 'vite';\n\nexport interface PackagePattern {\n /**\n * Folder name prefix used to detect packages, e.g. \"extension-\" or \"core\".\n */\n folderPrefix: string;\n\n /**\n * Optional package name prefix filter, e.g. \"@eclipse-docks/\".\n */\n packageNamePrefix?: string;\n}\n\nexport interface LocalAliasesOptions {\n /**\n * Root directory that contains the local packages.\n * Defaults to the parent of the Vite `root` directory.\n */\n packagesRoot?: string;\n\n /**\n * Package patterns to scan for. By default looks for \"extension-*\"\n * folders with any package name.\n */\n patterns?: PackagePattern[];\n\n /**\n * If true, aliases will point to `src` in dev mode and `dist` otherwise.\n * Defaults to `true`.\n */\n useSrcInDev?: boolean;\n /**\n * If true, always point aliases at `src` regardless of mode.\n */\n alwaysUseSrc?: boolean;\n}\n\ninterface EclipseDocksPackageJson {\n name?: string;\n /**\n * Optional: extra `optimizeDeps.exclude` entries for this workspace package\n * (e.g. heavy WASM npm deps that must not be pre-bundled in dev).\n */\n eclipseDocks?: {\n viteOptimizeDepsExclude?: string[];\n };\n}\n\nfunction discoverLocalAliasesAndExtraExcludes(\n cfg: Pick<UserConfig, 'root'>,\n mode: string,\n options: LocalAliasesOptions = {},\n): { aliases: Record<string, string>; extraOptimizeDepsExclude: string[] } {\n const useSrcInDev = options.useSrcInDev ?? true;\n const alwaysUseSrc = options.alwaysUseSrc ?? false;\n\n const rootDir = cfg.root ?? process.cwd();\n const packagesRoot =\n options.packagesRoot ?? path.resolve(rootDir, '..');\n\n const entries = fs.readdirSync(packagesRoot, { withFileTypes: true });\n const useSrc = alwaysUseSrc || (useSrcInDev && mode === 'development');\n\n const patterns: PackagePattern[] =\n options.patterns && options.patterns.length\n ? options.patterns\n : [{ folderPrefix: 'extension-' }];\n\n const aliases: Record<string, string> = {};\n const extraOptimizeDepsExclude: string[] = [];\n\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const pattern = patterns.find((p) =>\n entry.name.startsWith(p.folderPrefix),\n );\n\n if (!pattern) {\n continue;\n }\n\n const pkgDir = path.join(packagesRoot, entry.name);\n const pkgPath = path.join(pkgDir, 'package.json');\n if (!fs.existsSync(pkgPath)) {\n continue;\n }\n\n const pkgJson = fs.readFileSync(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgJson) as EclipseDocksPackageJson;\n if (!pkg.name) {\n continue;\n }\n\n if (\n pattern.packageNamePrefix &&\n !pkg.name.startsWith(pattern.packageNamePrefix)\n ) {\n continue;\n }\n\n const entryPoint = useSrc\n ? path.join(pkgDir, 'src')\n : path.join(pkgDir, 'dist');\n\n aliases[pkg.name] = entryPoint;\n\n const more = pkg.eclipseDocks?.viteOptimizeDepsExclude;\n if (Array.isArray(more)) {\n for (const id of more) {\n if (typeof id === 'string' && id.length > 0) {\n extraOptimizeDepsExclude.push(id);\n }\n }\n }\n }\n\n return { aliases, extraOptimizeDepsExclude };\n}\n\nexport const localAliasesPlugin = (\n options: LocalAliasesOptions = {},\n): PluginOption => {\n return {\n name: 'local-aliases',\n config(config, env) {\n const { aliases, extraOptimizeDepsExclude } =\n discoverLocalAliasesAndExtraExcludes(config, env.mode, options);\n\n config.resolve ??= {};\n const existingAlias = config.resolve.alias ?? {};\n\n config.resolve.alias = {\n ...(typeof existingAlias === 'object' ? existingAlias : {}),\n ...aliases,\n };\n\n config.optimizeDeps ??= {};\n const existingExclude = config.optimizeDeps.exclude ?? [];\n\n config.optimizeDeps.exclude = [\n ...new Set([\n ...existingExclude,\n ...Object.keys(aliases),\n ...extraOptimizeDepsExclude,\n ]),\n ];\n },\n };\n};\n\n"],"mappings":";;;AAmDA,SAAS,qCACP,KACA,MACA,UAA+B,EAAE,EACwC;CACzE,MAAM,cAAc,QAAQ,eAAe;CAC3C,MAAM,eAAe,QAAQ,gBAAgB;CAE7C,MAAM,UAAU,IAAI,QAAQ,QAAQ,KAAK;CACzC,MAAM,eACJ,QAAQ,gBAAgB,KAAK,QAAQ,SAAS,KAAK;CAErD,MAAM,UAAU,GAAG,YAAY,cAAc,EAAE,eAAe,MAAM,CAAC;CACrE,MAAM,SAAS,gBAAiB,eAAe,SAAS;CAExD,MAAM,WACJ,QAAQ,YAAY,QAAQ,SAAS,SACjC,QAAQ,WACR,CAAC,EAAE,cAAc,cAAc,CAAC;CAEtC,MAAM,UAAkC,EAAE;CAC1C,MAAM,2BAAqC,EAAE;AAE7C,MAAK,MAAM,SAAS,SAAS;AAC3B,MAAI,CAAC,MAAM,aAAa,CACtB;EAGF,MAAM,UAAU,SAAS,MAAM,MAC7B,MAAM,KAAK,WAAW,EAAE,aAAa,CACtC;AAED,MAAI,CAAC,QACH;EAGF,MAAM,SAAS,KAAK,KAAK,cAAc,MAAM,KAAK;EAClD,MAAM,UAAU,KAAK,KAAK,QAAQ,eAAe;AACjD,MAAI,CAAC,GAAG,WAAW,QAAQ,CACzB;EAGF,MAAM,UAAU,GAAG,aAAa,SAAS,OAAO;EAChD,MAAM,MAAM,KAAK,MAAM,QAAQ;AAC/B,MAAI,CAAC,IAAI,KACP;AAGF,MACE,QAAQ,qBACR,CAAC,IAAI,KAAK,WAAW,QAAQ,kBAAkB,CAE/C;EAGF,MAAM,aAAa,SACf,KAAK,KAAK,QAAQ,MAAM,GACxB,KAAK,KAAK,QAAQ,OAAO;AAE7B,UAAQ,IAAI,QAAQ;EAEpB,MAAM,OAAO,IAAI,cAAc;AAC/B,MAAI,MAAM,QAAQ,KAAK;QAChB,MAAM,MAAM,KACf,KAAI,OAAO,OAAO,YAAY,GAAG,SAAS,EACxC,0BAAyB,KAAK,GAAG;;;AAMzC,QAAO;EAAE;EAAS;EAA0B;;AAG9C,IAAa,sBACX,UAA+B,EAAE,KAChB;AACjB,QAAO;EACL,MAAM;EACN,OAAO,QAAQ,KAAK;GAClB,MAAM,EAAE,SAAS,6BACf,qCAAqC,QAAQ,IAAI,MAAM,QAAQ;AAEjE,UAAO,YAAY,EAAE;GACrB,MAAM,gBAAgB,OAAO,QAAQ,SAAS,EAAE;AAEhD,UAAO,QAAQ,QAAQ;IACrB,GAAI,OAAO,kBAAkB,WAAW,gBAAgB,EAAE;IAC1D,GAAG;IACJ;AAED,UAAO,iBAAiB,EAAE;GAC1B,MAAM,kBAAkB,OAAO,aAAa,WAAW,EAAE;AAEzD,UAAO,aAAa,UAAU,CAC5B,GAAG,IAAI,IAAI;IACT,GAAG;IACH,GAAG,OAAO,KAAK,QAAQ;IACvB,GAAG;IACJ,CAAC,CACH;;EAEJ"}
|
|
@@ -27,8 +27,8 @@ export interface ExtensionSideEffectsOptions {
|
|
|
27
27
|
*/
|
|
28
28
|
priorityFirst?: string[];
|
|
29
29
|
/**
|
|
30
|
-
* Which direct `dependencies` keys qualify as
|
|
31
|
-
* @default
|
|
30
|
+
* Which direct `dependencies` keys qualify as Docks-style extensions (`extension-*`, with an optional npm scope).
|
|
31
|
+
* @default /^(?:@[^/]+\/)?extension-/
|
|
32
32
|
*/
|
|
33
33
|
packageNamePattern?: RegExp;
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin-resolve-deps.d.ts","sourceRoot":"","sources":["../src/vite-plugin-resolve-deps.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;CACnC;AAoDD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,mBAAmB,GAAG,IAAI,CAkB5B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGxB;AAID,8GAA8G;AAC9G,eAAO,MAAM,yBAAyB,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"vite-plugin-resolve-deps.d.ts","sourceRoot":"","sources":["../src/vite-plugin-resolve-deps.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;CACnC;AAoDD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,mBAAmB,GAAG,IAAI,CAkB5B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGxB;AAID,8GAA8G;AAC9G,eAAO,MAAM,yBAAyB,4CAA4C,CAAC;AAanF,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC5C,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,2BAA2B,CAAC;CAC9D,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAqBF,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,EAAE,+BAA+B,GAC3C,MAAM,EAAE,CAQV;AAED,wBAAgB,wBAAwB,CACtC,OAAO,CAAC,EAAE,+BAA+B,GACxC,MAAM,CAyER"}
|
|
@@ -51,8 +51,9 @@ var RESOLVED_PACKAGE_INFO_KEY = "__RESOLVED_PACKAGE_INFO__";
|
|
|
51
51
|
/** Virtual module id; injected into `index.html` before `main.ts` when extension side-effects are enabled. */
|
|
52
52
|
var VIRTUAL_EXTENSION_IMPORTS = "virtual:eclipse-docks-extension-imports";
|
|
53
53
|
var RESOLVED_VIRTUAL_EXTENSION_IMPORTS = `\0${VIRTUAL_EXTENSION_IMPORTS}`;
|
|
54
|
-
|
|
55
|
-
var
|
|
54
|
+
/** Unscoped `extension-*` or scoped `@namespace/extension-*` (any npm scope). */
|
|
55
|
+
var DEFAULT_EXTENSION_PATTERN = /^(?:@[^/]+\/)?extension-/;
|
|
56
|
+
var DEFAULT_PRIORITY_FIRST = ["@eclipse-docks/extension-pwa", "extension-pwa"];
|
|
56
57
|
/** Matches Vite’s default app entry in index.html. */
|
|
57
58
|
var MAIN_TS_SCRIPT_RE = /<script\b[^>]*\btype\s*=\s*["']module["'][^>]*\bsrc\s*=\s*["'][^"']*\/src\/main\.ts["'][^>]*>\s*<\/script>/i;
|
|
58
59
|
function normalizeExtensionSideEffects(opt) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin-resolve-deps.js","names":[],"sources":["../src/vite-plugin-resolve-deps.ts"],"sourcesContent":["import { readFileSync, existsSync } from 'fs';\nimport path from 'path';\nimport type { Plugin } from 'vite';\n\nexport interface ResolvedPackageInfo {\n name: string;\n version: string;\n description?: string;\n dependencies: Record<string, string>;\n marketplaceCatalogUrls?: string[];\n}\n\ninterface PackageJson {\n name?: string;\n version?: string;\n description?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nfunction findPackageVersion(appRoot: string, depName: string): string | null {\n const segments = depName.startsWith('@')\n ? depName.split('/')\n : [depName];\n const relativePath = path.join('node_modules', ...segments, 'package.json');\n let dir = path.resolve(appRoot);\n const root = path.parse(dir).root;\n\n while (true) {\n const pkgPath = path.join(dir, relativePath);\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as PackageJson;\n if (typeof pkg.version === 'string') return pkg.version;\n } catch {\n // ignore parse errors\n }\n return null;\n }\n if (dir === root) break;\n dir = path.dirname(dir);\n }\n return null;\n}\n\nfunction resolveDepVersionsFromPkg(\n appRoot: string,\n pkg: PackageJson,\n options?: { includeDevDependencies?: boolean }\n): Record<string, string> {\n const deps = { ...pkg.dependencies };\n if (options?.includeDevDependencies && pkg.devDependencies) {\n Object.assign(deps, pkg.devDependencies);\n }\n const result: Record<string, string> = {};\n for (const [name, specifier] of Object.entries(deps)) {\n const version = findPackageVersion(appRoot, name);\n result[name] = version ?? specifier;\n }\n return result;\n}\n\nexport function resolvePackageInfo(\n appRoot: string,\n options?: { includeDevDependencies?: boolean }\n): ResolvedPackageInfo | null {\n const pkgPath = path.join(appRoot, 'package.json');\n if (!existsSync(pkgPath)) return null;\n\n let pkg: PackageJson;\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as PackageJson;\n } catch {\n return null;\n }\n\n const name = typeof pkg.name === 'string' ? pkg.name : '';\n const version = typeof pkg.version === 'string' ? pkg.version : '0.0.0';\n const description = typeof pkg.description === 'string' ? pkg.description : undefined;\n const dependencies = resolveDepVersionsFromPkg(appRoot, pkg, options);\n const marketplaceCatalogUrls = (pkg as { marketplace?: { catalogUrls?: string[] } }).marketplace?.catalogUrls;\n\n return { name, version, description, dependencies, marketplaceCatalogUrls };\n}\n\nexport function resolveDepVersions(\n appRoot: string,\n options?: { includeDevDependencies?: boolean }\n): Record<string, string> {\n const info = resolvePackageInfo(appRoot, options);\n return info?.dependencies ?? {};\n}\n\nconst RESOLVED_PACKAGE_INFO_KEY = '__RESOLVED_PACKAGE_INFO__';\n\n/** Virtual module id; injected into `index.html` before `main.ts` when extension side-effects are enabled. */\nexport const VIRTUAL_EXTENSION_IMPORTS = 'virtual:eclipse-docks-extension-imports';\n\nconst RESOLVED_VIRTUAL_EXTENSION_IMPORTS = `\\0${VIRTUAL_EXTENSION_IMPORTS}`;\n\nconst DEFAULT_EXTENSION_PATTERN = /^@eclipse-docks\\/extension-/;\n\nconst DEFAULT_PRIORITY_FIRST = ['@eclipse-docks/extension-pwa'];\n\n/** Matches Vite’s default app entry in index.html. */\nconst MAIN_TS_SCRIPT_RE =\n /<script\\b[^>]*\\btype\\s*=\\s*[\"']module[\"'][^>]*\\bsrc\\s*=\\s*[\"'][^\"']*\\/src\\/main\\.ts[\"'][^>]*>\\s*<\\/script>/i;\n\nexport interface ExtensionSideEffectsOptions {\n /**\n * When false, disables automatic extension side-effect imports. Omitted or true keeps them on.\n */\n enabled?: boolean;\n /** Dependency names to skip (even if they match `packageNamePattern`). */\n exclude?: string[];\n /**\n * Packages to load first, in order (only those present in dependencies are imported).\n * Default includes PWA so `beforeinstallprompt` can register early.\n */\n priorityFirst?: string[];\n /**\n * Which direct `dependencies` keys qualify as Eclipse Docks extensions.\n * @default /^@eclipse-docks\\/extension-/\n */\n packageNamePattern?: RegExp;\n}\n\nexport type ResolveDepVersionsPluginOptions = {\n includeDevDependencies?: boolean;\n /**\n * By default, registers a virtual module that side-effect-imports every matching direct\n * `dependencies` entry (see `ExtensionSideEffectsOptions`), and injects\n * `import 'virtual:eclipse-docks-extension-imports'` into `index.html` **before** `/src/main.ts`.\n * Pass `false` or `{ enabled: false }` to disable.\n */\n extensionSideEffects?: boolean | ExtensionSideEffectsOptions;\n};\n\n/** Normalized match options for {@link listExtensionSideEffectPackages}. */\nexport type ExtensionSideEffectsListOptions = {\n exclude: Set<string>;\n priorityFirst: string[];\n pattern: RegExp;\n};\n\nfunction normalizeExtensionSideEffects(\n opt: boolean | ExtensionSideEffectsOptions | undefined,\n): ExtensionSideEffectsListOptions | null {\n if (opt === false) return null;\n if (opt === undefined || opt === true) {\n return {\n exclude: new Set(),\n priorityFirst: [...DEFAULT_PRIORITY_FIRST],\n pattern: DEFAULT_EXTENSION_PATTERN,\n };\n }\n if (opt.enabled === false) return null;\n return {\n exclude: new Set(opt.exclude ?? []),\n priorityFirst: opt.priorityFirst ?? [...DEFAULT_PRIORITY_FIRST],\n pattern: opt.packageNamePattern ?? DEFAULT_EXTENSION_PATTERN,\n };\n}\n\nexport function listExtensionSideEffectPackages(\n dependencies: Record<string, string>,\n sideEffects: ExtensionSideEffectsListOptions,\n): string[] {\n const names = Object.keys(dependencies).filter(\n (name) => sideEffects.pattern.test(name) && !sideEffects.exclude.has(name),\n );\n const prioritySet = new Set(sideEffects.priorityFirst);\n const first = sideEffects.priorityFirst.filter((p) => names.includes(p));\n const rest = names.filter((n) => !prioritySet.has(n)).sort((a, b) => a.localeCompare(b));\n return [...first, ...rest];\n}\n\nexport function resolveDepVersionsPlugin(\n options?: ResolveDepVersionsPluginOptions,\n): Plugin {\n let appRoot = process.cwd();\n let extensionSideEffectsActive = false;\n let extensionImportPackages: string[] = [];\n\n return {\n name: 'resolve-dep-versions',\n config(config) {\n const root = config.root ? path.resolve(config.root) : process.cwd();\n const info = resolvePackageInfo(root, options);\n const value =\n info ?? {\n name: '',\n version: '0.0.0',\n description: undefined,\n dependencies: {},\n marketplaceCatalogUrls: undefined,\n };\n return {\n define: {\n [RESOLVED_PACKAGE_INFO_KEY]: JSON.stringify(value),\n },\n };\n },\n configResolved(config) {\n appRoot = path.resolve(config.root ?? process.cwd());\n const normalized = normalizeExtensionSideEffects(options?.extensionSideEffects);\n extensionSideEffectsActive = normalized !== null;\n if (!normalized) {\n extensionImportPackages = [];\n return;\n }\n const info = resolvePackageInfo(appRoot, options);\n extensionImportPackages = listExtensionSideEffectPackages(\n info?.dependencies ?? {},\n normalized,\n );\n },\n resolveId(id) {\n if (id === VIRTUAL_EXTENSION_IMPORTS) {\n return RESOLVED_VIRTUAL_EXTENSION_IMPORTS;\n }\n return undefined;\n },\n load(id) {\n if (id !== RESOLVED_VIRTUAL_EXTENSION_IMPORTS) {\n return null;\n }\n if (extensionImportPackages.length === 0) {\n return 'export {};\\n';\n }\n return extensionImportPackages.map((pkg) => `import ${JSON.stringify(pkg)};\\n`).join('');\n },\n transformIndexHtml: {\n order: 'pre',\n handler(html) {\n if (!extensionSideEffectsActive) {\n return html;\n }\n if (extensionImportPackages.length === 0) {\n return html;\n }\n if (html.includes(VIRTUAL_EXTENSION_IMPORTS)) {\n return html;\n }\n if (!MAIN_TS_SCRIPT_RE.test(html)) {\n return html;\n }\n const inject = `<script type=\"module\">import ${JSON.stringify(VIRTUAL_EXTENSION_IMPORTS)};</script>\\n`;\n return html.replace(MAIN_TS_SCRIPT_RE, (match) => `${inject}${match}`);\n },\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vite-plugin-resolve-deps.js","names":[],"sources":["../src/vite-plugin-resolve-deps.ts"],"sourcesContent":["import { readFileSync, existsSync } from 'fs';\nimport path from 'path';\nimport type { Plugin } from 'vite';\n\nexport interface ResolvedPackageInfo {\n name: string;\n version: string;\n description?: string;\n dependencies: Record<string, string>;\n marketplaceCatalogUrls?: string[];\n}\n\ninterface PackageJson {\n name?: string;\n version?: string;\n description?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nfunction findPackageVersion(appRoot: string, depName: string): string | null {\n const segments = depName.startsWith('@')\n ? depName.split('/')\n : [depName];\n const relativePath = path.join('node_modules', ...segments, 'package.json');\n let dir = path.resolve(appRoot);\n const root = path.parse(dir).root;\n\n while (true) {\n const pkgPath = path.join(dir, relativePath);\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as PackageJson;\n if (typeof pkg.version === 'string') return pkg.version;\n } catch {\n // ignore parse errors\n }\n return null;\n }\n if (dir === root) break;\n dir = path.dirname(dir);\n }\n return null;\n}\n\nfunction resolveDepVersionsFromPkg(\n appRoot: string,\n pkg: PackageJson,\n options?: { includeDevDependencies?: boolean }\n): Record<string, string> {\n const deps = { ...pkg.dependencies };\n if (options?.includeDevDependencies && pkg.devDependencies) {\n Object.assign(deps, pkg.devDependencies);\n }\n const result: Record<string, string> = {};\n for (const [name, specifier] of Object.entries(deps)) {\n const version = findPackageVersion(appRoot, name);\n result[name] = version ?? specifier;\n }\n return result;\n}\n\nexport function resolvePackageInfo(\n appRoot: string,\n options?: { includeDevDependencies?: boolean }\n): ResolvedPackageInfo | null {\n const pkgPath = path.join(appRoot, 'package.json');\n if (!existsSync(pkgPath)) return null;\n\n let pkg: PackageJson;\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as PackageJson;\n } catch {\n return null;\n }\n\n const name = typeof pkg.name === 'string' ? pkg.name : '';\n const version = typeof pkg.version === 'string' ? pkg.version : '0.0.0';\n const description = typeof pkg.description === 'string' ? pkg.description : undefined;\n const dependencies = resolveDepVersionsFromPkg(appRoot, pkg, options);\n const marketplaceCatalogUrls = (pkg as { marketplace?: { catalogUrls?: string[] } }).marketplace?.catalogUrls;\n\n return { name, version, description, dependencies, marketplaceCatalogUrls };\n}\n\nexport function resolveDepVersions(\n appRoot: string,\n options?: { includeDevDependencies?: boolean }\n): Record<string, string> {\n const info = resolvePackageInfo(appRoot, options);\n return info?.dependencies ?? {};\n}\n\nconst RESOLVED_PACKAGE_INFO_KEY = '__RESOLVED_PACKAGE_INFO__';\n\n/** Virtual module id; injected into `index.html` before `main.ts` when extension side-effects are enabled. */\nexport const VIRTUAL_EXTENSION_IMPORTS = 'virtual:eclipse-docks-extension-imports';\n\nconst RESOLVED_VIRTUAL_EXTENSION_IMPORTS = `\\0${VIRTUAL_EXTENSION_IMPORTS}`;\n\n/** Unscoped `extension-*` or scoped `@namespace/extension-*` (any npm scope). */\nconst DEFAULT_EXTENSION_PATTERN = /^(?:@[^/]+\\/)?extension-/;\n\nconst DEFAULT_PRIORITY_FIRST = ['@eclipse-docks/extension-pwa', 'extension-pwa'];\n\n/** Matches Vite’s default app entry in index.html. */\nconst MAIN_TS_SCRIPT_RE =\n /<script\\b[^>]*\\btype\\s*=\\s*[\"']module[\"'][^>]*\\bsrc\\s*=\\s*[\"'][^\"']*\\/src\\/main\\.ts[\"'][^>]*>\\s*<\\/script>/i;\n\nexport interface ExtensionSideEffectsOptions {\n /**\n * When false, disables automatic extension side-effect imports. Omitted or true keeps them on.\n */\n enabled?: boolean;\n /** Dependency names to skip (even if they match `packageNamePattern`). */\n exclude?: string[];\n /**\n * Packages to load first, in order (only those present in dependencies are imported).\n * Default includes PWA so `beforeinstallprompt` can register early.\n */\n priorityFirst?: string[];\n /**\n * Which direct `dependencies` keys qualify as Docks-style extensions (`extension-*`, with an optional npm scope).\n * @default /^(?:@[^/]+\\/)?extension-/\n */\n packageNamePattern?: RegExp;\n}\n\nexport type ResolveDepVersionsPluginOptions = {\n includeDevDependencies?: boolean;\n /**\n * By default, registers a virtual module that side-effect-imports every matching direct\n * `dependencies` entry (see `ExtensionSideEffectsOptions`), and injects\n * `import 'virtual:eclipse-docks-extension-imports'` into `index.html` **before** `/src/main.ts`.\n * Pass `false` or `{ enabled: false }` to disable.\n */\n extensionSideEffects?: boolean | ExtensionSideEffectsOptions;\n};\n\n/** Normalized match options for {@link listExtensionSideEffectPackages}. */\nexport type ExtensionSideEffectsListOptions = {\n exclude: Set<string>;\n priorityFirst: string[];\n pattern: RegExp;\n};\n\nfunction normalizeExtensionSideEffects(\n opt: boolean | ExtensionSideEffectsOptions | undefined,\n): ExtensionSideEffectsListOptions | null {\n if (opt === false) return null;\n if (opt === undefined || opt === true) {\n return {\n exclude: new Set(),\n priorityFirst: [...DEFAULT_PRIORITY_FIRST],\n pattern: DEFAULT_EXTENSION_PATTERN,\n };\n }\n if (opt.enabled === false) return null;\n return {\n exclude: new Set(opt.exclude ?? []),\n priorityFirst: opt.priorityFirst ?? [...DEFAULT_PRIORITY_FIRST],\n pattern: opt.packageNamePattern ?? DEFAULT_EXTENSION_PATTERN,\n };\n}\n\nexport function listExtensionSideEffectPackages(\n dependencies: Record<string, string>,\n sideEffects: ExtensionSideEffectsListOptions,\n): string[] {\n const names = Object.keys(dependencies).filter(\n (name) => sideEffects.pattern.test(name) && !sideEffects.exclude.has(name),\n );\n const prioritySet = new Set(sideEffects.priorityFirst);\n const first = sideEffects.priorityFirst.filter((p) => names.includes(p));\n const rest = names.filter((n) => !prioritySet.has(n)).sort((a, b) => a.localeCompare(b));\n return [...first, ...rest];\n}\n\nexport function resolveDepVersionsPlugin(\n options?: ResolveDepVersionsPluginOptions,\n): Plugin {\n let appRoot = process.cwd();\n let extensionSideEffectsActive = false;\n let extensionImportPackages: string[] = [];\n\n return {\n name: 'resolve-dep-versions',\n config(config) {\n const root = config.root ? path.resolve(config.root) : process.cwd();\n const info = resolvePackageInfo(root, options);\n const value =\n info ?? {\n name: '',\n version: '0.0.0',\n description: undefined,\n dependencies: {},\n marketplaceCatalogUrls: undefined,\n };\n return {\n define: {\n [RESOLVED_PACKAGE_INFO_KEY]: JSON.stringify(value),\n },\n };\n },\n configResolved(config) {\n appRoot = path.resolve(config.root ?? process.cwd());\n const normalized = normalizeExtensionSideEffects(options?.extensionSideEffects);\n extensionSideEffectsActive = normalized !== null;\n if (!normalized) {\n extensionImportPackages = [];\n return;\n }\n const info = resolvePackageInfo(appRoot, options);\n extensionImportPackages = listExtensionSideEffectPackages(\n info?.dependencies ?? {},\n normalized,\n );\n },\n resolveId(id) {\n if (id === VIRTUAL_EXTENSION_IMPORTS) {\n return RESOLVED_VIRTUAL_EXTENSION_IMPORTS;\n }\n return undefined;\n },\n load(id) {\n if (id !== RESOLVED_VIRTUAL_EXTENSION_IMPORTS) {\n return null;\n }\n if (extensionImportPackages.length === 0) {\n return 'export {};\\n';\n }\n return extensionImportPackages.map((pkg) => `import ${JSON.stringify(pkg)};\\n`).join('');\n },\n transformIndexHtml: {\n order: 'pre',\n handler(html) {\n if (!extensionSideEffectsActive) {\n return html;\n }\n if (extensionImportPackages.length === 0) {\n return html;\n }\n if (html.includes(VIRTUAL_EXTENSION_IMPORTS)) {\n return html;\n }\n if (!MAIN_TS_SCRIPT_RE.test(html)) {\n return html;\n }\n const inject = `<script type=\"module\">import ${JSON.stringify(VIRTUAL_EXTENSION_IMPORTS)};</script>\\n`;\n return html.replace(MAIN_TS_SCRIPT_RE, (match) => `${inject}${match}`);\n },\n },\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -38,11 +38,22 @@ export interface LocalAliasesOptions {
|
|
|
38
38
|
alwaysUseSrc?: boolean;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
interface EclipseDocksPackageJson {
|
|
42
|
+
name?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Optional: extra `optimizeDeps.exclude` entries for this workspace package
|
|
45
|
+
* (e.g. heavy WASM npm deps that must not be pre-bundled in dev).
|
|
46
|
+
*/
|
|
47
|
+
eclipseDocks?: {
|
|
48
|
+
viteOptimizeDepsExclude?: string[];
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function discoverLocalAliasesAndExtraExcludes(
|
|
42
53
|
cfg: Pick<UserConfig, 'root'>,
|
|
43
54
|
mode: string,
|
|
44
55
|
options: LocalAliasesOptions = {},
|
|
45
|
-
): Record<string, string
|
|
56
|
+
): { aliases: Record<string, string>; extraOptimizeDepsExclude: string[] } {
|
|
46
57
|
const useSrcInDev = options.useSrcInDev ?? true;
|
|
47
58
|
const alwaysUseSrc = options.alwaysUseSrc ?? false;
|
|
48
59
|
|
|
@@ -58,9 +69,12 @@ const discoverLocalAliases = (
|
|
|
58
69
|
? options.patterns
|
|
59
70
|
: [{ folderPrefix: 'extension-' }];
|
|
60
71
|
|
|
61
|
-
|
|
72
|
+
const aliases: Record<string, string> = {};
|
|
73
|
+
const extraOptimizeDepsExclude: string[] = [];
|
|
74
|
+
|
|
75
|
+
for (const entry of entries) {
|
|
62
76
|
if (!entry.isDirectory()) {
|
|
63
|
-
|
|
77
|
+
continue;
|
|
64
78
|
}
|
|
65
79
|
|
|
66
80
|
const pattern = patterns.find((p) =>
|
|
@@ -68,26 +82,26 @@ const discoverLocalAliases = (
|
|
|
68
82
|
);
|
|
69
83
|
|
|
70
84
|
if (!pattern) {
|
|
71
|
-
|
|
85
|
+
continue;
|
|
72
86
|
}
|
|
73
87
|
|
|
74
88
|
const pkgDir = path.join(packagesRoot, entry.name);
|
|
75
89
|
const pkgPath = path.join(pkgDir, 'package.json');
|
|
76
90
|
if (!fs.existsSync(pkgPath)) {
|
|
77
|
-
|
|
91
|
+
continue;
|
|
78
92
|
}
|
|
79
93
|
|
|
80
94
|
const pkgJson = fs.readFileSync(pkgPath, 'utf8');
|
|
81
|
-
const pkg = JSON.parse(pkgJson) as
|
|
95
|
+
const pkg = JSON.parse(pkgJson) as EclipseDocksPackageJson;
|
|
82
96
|
if (!pkg.name) {
|
|
83
|
-
|
|
97
|
+
continue;
|
|
84
98
|
}
|
|
85
99
|
|
|
86
100
|
if (
|
|
87
101
|
pattern.packageNamePrefix &&
|
|
88
102
|
!pkg.name.startsWith(pattern.packageNamePrefix)
|
|
89
103
|
) {
|
|
90
|
-
|
|
104
|
+
continue;
|
|
91
105
|
}
|
|
92
106
|
|
|
93
107
|
const entryPoint = useSrc
|
|
@@ -95,9 +109,19 @@ const discoverLocalAliases = (
|
|
|
95
109
|
: path.join(pkgDir, 'dist');
|
|
96
110
|
|
|
97
111
|
aliases[pkg.name] = entryPoint;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
112
|
+
|
|
113
|
+
const more = pkg.eclipseDocks?.viteOptimizeDepsExclude;
|
|
114
|
+
if (Array.isArray(more)) {
|
|
115
|
+
for (const id of more) {
|
|
116
|
+
if (typeof id === 'string' && id.length > 0) {
|
|
117
|
+
extraOptimizeDepsExclude.push(id);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return { aliases, extraOptimizeDepsExclude };
|
|
124
|
+
}
|
|
101
125
|
|
|
102
126
|
export const localAliasesPlugin = (
|
|
103
127
|
options: LocalAliasesOptions = {},
|
|
@@ -105,7 +129,8 @@ export const localAliasesPlugin = (
|
|
|
105
129
|
return {
|
|
106
130
|
name: 'local-aliases',
|
|
107
131
|
config(config, env) {
|
|
108
|
-
const aliases
|
|
132
|
+
const { aliases, extraOptimizeDepsExclude } =
|
|
133
|
+
discoverLocalAliasesAndExtraExcludes(config, env.mode, options);
|
|
109
134
|
|
|
110
135
|
config.resolve ??= {};
|
|
111
136
|
const existingAlias = config.resolve.alias ?? {};
|
|
@@ -119,7 +144,11 @@ export const localAliasesPlugin = (
|
|
|
119
144
|
const existingExclude = config.optimizeDeps.exclude ?? [];
|
|
120
145
|
|
|
121
146
|
config.optimizeDeps.exclude = [
|
|
122
|
-
...new Set([
|
|
147
|
+
...new Set([
|
|
148
|
+
...existingExclude,
|
|
149
|
+
...Object.keys(aliases),
|
|
150
|
+
...extraOptimizeDepsExclude,
|
|
151
|
+
]),
|
|
123
152
|
];
|
|
124
153
|
},
|
|
125
154
|
};
|
|
@@ -98,9 +98,10 @@ export const VIRTUAL_EXTENSION_IMPORTS = 'virtual:eclipse-docks-extension-import
|
|
|
98
98
|
|
|
99
99
|
const RESOLVED_VIRTUAL_EXTENSION_IMPORTS = `\0${VIRTUAL_EXTENSION_IMPORTS}`;
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
/** Unscoped `extension-*` or scoped `@namespace/extension-*` (any npm scope). */
|
|
102
|
+
const DEFAULT_EXTENSION_PATTERN = /^(?:@[^/]+\/)?extension-/;
|
|
102
103
|
|
|
103
|
-
const DEFAULT_PRIORITY_FIRST = ['@eclipse-docks/extension-pwa'];
|
|
104
|
+
const DEFAULT_PRIORITY_FIRST = ['@eclipse-docks/extension-pwa', 'extension-pwa'];
|
|
104
105
|
|
|
105
106
|
/** Matches Vite’s default app entry in index.html. */
|
|
106
107
|
const MAIN_TS_SCRIPT_RE =
|
|
@@ -119,8 +120,8 @@ export interface ExtensionSideEffectsOptions {
|
|
|
119
120
|
*/
|
|
120
121
|
priorityFirst?: string[];
|
|
121
122
|
/**
|
|
122
|
-
* Which direct `dependencies` keys qualify as
|
|
123
|
-
* @default
|
|
123
|
+
* Which direct `dependencies` keys qualify as Docks-style extensions (`extension-*`, with an optional npm scope).
|
|
124
|
+
* @default /^(?:@[^/]+\/)?extension-/
|
|
124
125
|
*/
|
|
125
126
|
packageNamePattern?: RegExp;
|
|
126
127
|
}
|