@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.
@@ -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;AA+DD,eAAO,MAAM,kBAAkB,GAC7B,UAAS,mBAAwB,KAChC,YAsBF,CAAC"}
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
- var discoverLocalAliases = (cfg, mode, options = {}) => {
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
- return entries.reduce((aliases, entry) => {
13
- if (!entry.isDirectory()) return aliases;
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) return aliases;
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)) return aliases;
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) return aliases;
22
- if (pattern.packageNamePrefix && !pkg.name.startsWith(pattern.packageNamePrefix)) return aliases;
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
- return aliases;
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 = discoverLocalAliases(config, env.mode, options);
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([...existingExclude, ...Object.keys(aliases)])];
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\nconst discoverLocalAliases = (\n cfg: Pick<UserConfig, 'root'>,\n mode: string,\n options: LocalAliasesOptions = {},\n): Record<string, 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 return entries.reduce<Record<string, string>>((aliases, entry) => {\n if (!entry.isDirectory()) {\n return aliases;\n }\n\n const pattern = patterns.find((p) =>\n entry.name.startsWith(p.folderPrefix),\n );\n\n if (!pattern) {\n return aliases;\n }\n\n const pkgDir = path.join(packagesRoot, entry.name);\n const pkgPath = path.join(pkgDir, 'package.json');\n if (!fs.existsSync(pkgPath)) {\n return aliases;\n }\n\n const pkgJson = fs.readFileSync(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgJson) as { name?: string };\n if (!pkg.name) {\n return aliases;\n }\n\n if (\n pattern.packageNamePrefix &&\n !pkg.name.startsWith(pattern.packageNamePrefix)\n ) {\n return aliases;\n }\n\n const entryPoint = useSrc\n ? path.join(pkgDir, 'src')\n : path.join(pkgDir, 'dist');\n\n aliases[pkg.name] = entryPoint;\n return aliases;\n }, {});\n};\n\nexport const localAliasesPlugin = (\n options: LocalAliasesOptions = {},\n): PluginOption => {\n return {\n name: 'local-aliases',\n config(config, env) {\n const aliases = discoverLocalAliases(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([...existingExclude, ...Object.keys(aliases)]),\n ];\n },\n };\n};\n\n"],"mappings":";;;AAwCA,IAAM,wBACJ,KACA,MACA,UAA+B,EAAE,KACN;CAC3B,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;AAEtC,QAAO,QAAQ,QAAgC,SAAS,UAAU;AAChE,MAAI,CAAC,MAAM,aAAa,CACtB,QAAO;EAGT,MAAM,UAAU,SAAS,MAAM,MAC7B,MAAM,KAAK,WAAW,EAAE,aAAa,CACtC;AAED,MAAI,CAAC,QACH,QAAO;EAGT,MAAM,SAAS,KAAK,KAAK,cAAc,MAAM,KAAK;EAClD,MAAM,UAAU,KAAK,KAAK,QAAQ,eAAe;AACjD,MAAI,CAAC,GAAG,WAAW,QAAQ,CACzB,QAAO;EAGT,MAAM,UAAU,GAAG,aAAa,SAAS,OAAO;EAChD,MAAM,MAAM,KAAK,MAAM,QAAQ;AAC/B,MAAI,CAAC,IAAI,KACP,QAAO;AAGT,MACE,QAAQ,qBACR,CAAC,IAAI,KAAK,WAAW,QAAQ,kBAAkB,CAE/C,QAAO;EAGT,MAAM,aAAa,SACf,KAAK,KAAK,QAAQ,MAAM,GACxB,KAAK,KAAK,QAAQ,OAAO;AAE7B,UAAQ,IAAI,QAAQ;AACpB,SAAO;IACN,EAAE,CAAC;;AAGR,IAAa,sBACX,UAA+B,EAAE,KAChB;AACjB,QAAO;EACL,MAAM;EACN,OAAO,QAAQ,KAAK;GAClB,MAAM,UAAU,qBAAqB,QAAQ,IAAI,MAAM,QAAQ;AAE/D,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,CAAC,GAAG,iBAAiB,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAC1D;;EAEJ"}
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 Eclipse Docks extensions.
31
- * @default /^@eclipse-docks\/extension-/
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;AAYnF,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"}
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
- var DEFAULT_EXTENSION_PATTERN = /^@eclipse-docks\/extension-/;
55
- var DEFAULT_PRIORITY_FIRST = ["@eclipse-docks/extension-pwa"];
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-docks/core",
3
- "version": "0.7.88",
3
+ "version": "0.7.90",
4
4
  "description": "Eclipse Docks platform core: registries, services, parts, widgets, and API",
5
5
  "type": "module",
6
6
  "license": "EPL-2.0",
@@ -38,11 +38,22 @@ export interface LocalAliasesOptions {
38
38
  alwaysUseSrc?: boolean;
39
39
  }
40
40
 
41
- const discoverLocalAliases = (
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
- return entries.reduce<Record<string, string>>((aliases, entry) => {
72
+ const aliases: Record<string, string> = {};
73
+ const extraOptimizeDepsExclude: string[] = [];
74
+
75
+ for (const entry of entries) {
62
76
  if (!entry.isDirectory()) {
63
- return aliases;
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
- return aliases;
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
- return aliases;
91
+ continue;
78
92
  }
79
93
 
80
94
  const pkgJson = fs.readFileSync(pkgPath, 'utf8');
81
- const pkg = JSON.parse(pkgJson) as { name?: string };
95
+ const pkg = JSON.parse(pkgJson) as EclipseDocksPackageJson;
82
96
  if (!pkg.name) {
83
- return aliases;
97
+ continue;
84
98
  }
85
99
 
86
100
  if (
87
101
  pattern.packageNamePrefix &&
88
102
  !pkg.name.startsWith(pattern.packageNamePrefix)
89
103
  ) {
90
- return aliases;
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
- return aliases;
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 = discoverLocalAliases(config, env.mode, options);
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([...existingExclude, ...Object.keys(aliases)]),
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
- const DEFAULT_EXTENSION_PATTERN = /^@eclipse-docks\/extension-/;
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 Eclipse Docks extensions.
123
- * @default /^@eclipse-docks\/extension-/
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
  }