mage-obsidian 2.9.1 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ export declare function isComponentMapModule(id: string): boolean;
2
+ export declare function mountableComponents(files: Record<string, string>, componentsPath?: string): Record<string, string>;
3
+ export declare function renderComponentMap(mountable: Record<string, string>): string;
4
+ //# sourceMappingURL=islandComponentMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islandComponentMap.d.ts","sourceRoot":"","sources":["../../src/core/islandComponentMap.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,cAAc,SAAe,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAK5E"}
@@ -0,0 +1,19 @@
1
+ const MODULE_TAIL = /[\\/]runtime[\\/]islandComponents\.(ts|js)$/;
2
+ export function isComponentMapModule(id) {
3
+ return MODULE_TAIL.test(id.split("?")[0]);
4
+ }
5
+ export function mountableComponents(files, componentsPath = "components") {
6
+ const segment = `/${componentsPath}/`;
7
+ const mountable = {};
8
+ for (const key of Object.keys(files).sort()) {
9
+ if (key.includes(segment) && files[key]) {
10
+ mountable[key] = files[key];
11
+ }
12
+ }
13
+ return mountable;
14
+ }
15
+ export function renderComponentMap(mountable) {
16
+ const entries = Object.entries(mountable).map(([name, file]) => ` ${JSON.stringify(name)}: () => import(${JSON.stringify(file)}),`);
17
+ return `const components = {\n${entries.join("\n")}\n};\nexport default components;\n`;
18
+ }
19
+ //# sourceMappingURL=islandComponentMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islandComponentMap.js","sourceRoot":"","sources":["../../src/core/islandComponentMap.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,6CAA6C,CAAC;AAElE,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC3C,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,KAA6B,EAC7B,cAAc,GAAG,YAAY;IAE7B,MAAM,OAAO,GAAG,IAAI,cAAc,GAAG,CAAC;IACtC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiC;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CACzC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAC1F,CAAC;IACF,OAAO,yBAAyB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ComponentLoader } from "./islands.ts";
2
+ export type IslandComponentMap = Record<string, ComponentLoader>;
3
+ declare const components: IslandComponentMap;
4
+ export default components;
5
+ //# sourceMappingURL=islandComponents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islandComponents.d.ts","sourceRoot":"","sources":["../../src/runtime/islandComponents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEjE,QAAA,MAAM,UAAU,EAAE,kBAAuB,CAAC;AAE1C,eAAe,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ const components = {};
2
+ export default components;
3
+ //# sourceMappingURL=islandComponents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islandComponents.js","sourceRoot":"","sources":["../../src/runtime/islandComponents.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,GAAuB,EAAE,CAAC;AAE1C,eAAe,UAAU,CAAC"}
@@ -20,6 +20,12 @@ export declare const IslandStrategy: {
20
20
  readonly Visible: "visible";
21
21
  };
22
22
  export type IslandStrategy = (typeof IslandStrategy)[keyof typeof IslandStrategy];
23
+ export declare function componentKey(source: string): string | null;
24
+ export declare function resolveStrategy(value: string | undefined): IslandStrategy;
25
+ export declare class UnknownIslandComponent extends Error {
26
+ readonly requested: string;
27
+ constructor(requested: string);
28
+ }
23
29
  export interface IslandElement {
24
30
  dataset: Record<string, string | undefined>;
25
31
  }
@@ -33,10 +39,11 @@ export interface IslandAnnouncement {
33
39
  durationMs?: number;
34
40
  error?: unknown;
35
41
  }
42
+ export type ComponentLoader = () => Promise<{
43
+ default?: unknown;
44
+ }>;
36
45
  interface HydrateDeps {
37
- importComponent(source: string): Promise<{
38
- default?: unknown;
39
- }>;
46
+ resolveComponent(name: string): ComponentLoader | undefined;
40
47
  /**
41
48
  * `hydrate` tells the factory which Vue entry point to use. Adopting server
42
49
  * markup needs `createSSRApp`; a container about to be cleared needs
@@ -1 +1 @@
1
- {"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQnD,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAElF,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC/C;AAED,UAAU,OAAO;IACb,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,WAAW;IACjB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChE;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IACzF,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,cAAc,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,yEAAyE;IACzE,QAAQ,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IAC3C,SAAS,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5D,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClE,GAAG,CAAC,IAAI,MAAM,CAAC;CAClB;AAED,UAAU,YAAa,SAAQ,WAAW;IACtC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAChE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAqD9B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAWtF"}
1
+ {"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQnD,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAIlF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB1D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAIzE;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM;CAKhC;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC/C;AAED,UAAU,OAAO;IACb,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAEnE,UAAU,WAAW;IACjB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IAC5D;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IACzF,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,cAAc,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,yEAAyE;IACzE,QAAQ,CAAC,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IAC3C,SAAS,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5D,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClE,GAAG,CAAC,IAAI,MAAM,CAAC;CAClB;AAED,UAAU,YAAa,SAAQ,WAAW;IACtC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAChE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAiE9B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAUtF"}
@@ -23,6 +23,37 @@ export const IslandStrategy = {
23
23
  Eager: "eager",
24
24
  Visible: "visible",
25
25
  };
26
+ const GENERATED_SEGMENTS = ["/generated/", "/vite_generated/"];
27
+ export function componentKey(source) {
28
+ for (const segment of GENERATED_SEGMENTS) {
29
+ const at = source.indexOf(segment);
30
+ if (at === -1) {
31
+ continue;
32
+ }
33
+ const name = source
34
+ .slice(at + segment.length)
35
+ .split(/[?#]/)[0]
36
+ .replace(/\.js$/, "");
37
+ if (name === "" || name.includes("..")) {
38
+ return null;
39
+ }
40
+ return name;
41
+ }
42
+ return null;
43
+ }
44
+ export function resolveStrategy(value) {
45
+ return value === IslandStrategy.Eager || value === IslandStrategy.Visible
46
+ ? value
47
+ : IslandStrategy.Visible;
48
+ }
49
+ export class UnknownIslandComponent extends Error {
50
+ requested;
51
+ constructor(requested) {
52
+ super(`Island component "${requested}" is not part of this theme's build.`);
53
+ this.name = "UnknownIslandComponent";
54
+ this.requested = requested;
55
+ }
56
+ }
26
57
  /**
27
58
  * Mount a single island. Idempotent: the first call claims the element and
28
59
  * later calls return immediately, so re-observation never double-mounts.
@@ -38,13 +69,24 @@ export async function hydrateIsland(element, deps) {
38
69
  if (!source) {
39
70
  throw new Error("Island marker is missing data-component.");
40
71
  }
41
- const strategy = element.dataset.strategy ?? IslandStrategy.Visible;
72
+ const strategy = resolveStrategy(element.dataset.strategy);
42
73
  const clock = deps.now ?? (() => (typeof performance !== "undefined" ? performance.now() : 0));
43
74
  const startedAt = deps.announce ? clock() : 0;
44
75
  deps.announce?.(MutationPhase.Before, { component: source, strategy, element });
76
+ const name = componentKey(source);
77
+ const load = name === null ? undefined : deps.resolveComponent(name);
78
+ if (!load) {
79
+ deps.announce?.(MutationPhase.Failed, {
80
+ component: source,
81
+ strategy,
82
+ element,
83
+ error: new UnknownIslandComponent(source),
84
+ });
85
+ return undefined;
86
+ }
45
87
  let app;
46
88
  try {
47
- const module = await deps.importComponent(source);
89
+ const module = await load();
48
90
  const component = module.default ?? module;
49
91
  const props = element.dataset.props ? JSON.parse(element.dataset.props) : {};
50
92
  // Presence, not truth: PHP emits `data-hydrate` with no value, and the
@@ -84,8 +126,7 @@ export async function hydrateIsland(element, deps) {
84
126
  */
85
127
  export function hydrateAll(elements, deps) {
86
128
  for (const element of elements) {
87
- const strategy = element.dataset.strategy ?? IslandStrategy.Visible;
88
- if (strategy === IslandStrategy.Eager) {
129
+ if (resolveStrategy(element.dataset.strategy) === IslandStrategy.Eager) {
89
130
  void hydrateIsland(element, deps);
90
131
  }
91
132
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"islands.js","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"islands.js","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export default function islandComponentsPlugin(options?: {
2
+ themeName?: string;
3
+ }): {
4
+ name: string;
5
+ enforce: "pre";
6
+ load(id: string): Promise<string>;
7
+ };
8
+ //# sourceMappingURL=islandComponentsPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islandComponentsPlugin.d.ts","sourceRoot":"","sources":["../../src/vite/islandComponentsPlugin.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO;;;aAO5D,MAAM;EAS5B"}
@@ -0,0 +1,19 @@
1
+ import configResolver from "../core/configResolver.js";
2
+ import moduleResolver from "../core/moduleResolver.js";
3
+ import { isComponentMapModule, mountableComponents, renderComponentMap, } from "../core/islandComponentMap.js";
4
+ export default function islandComponentsPlugin(options = {}) {
5
+ const { themeName } = options;
6
+ return {
7
+ name: "mage-obsidian:island-components",
8
+ enforce: "pre",
9
+ async load(id) {
10
+ if (!isComponentMapModule(id)) {
11
+ return null;
12
+ }
13
+ const files = await moduleResolver.getAllJsVueFilesWithInheritance(themeName);
14
+ const componentsPath = configResolver.getMagentoConfig().VUE_COMPONENTS_PATH;
15
+ return renderComponentMap(mountableComponents(files, componentsPath));
16
+ },
17
+ };
18
+ }
19
+ //# sourceMappingURL=islandComponentsPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islandComponentsPlugin.js","sourceRoot":"","sources":["../../src/vite/islandComponentsPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACrB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,UAAkC,EAAE;IAC/E,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAE9B,OAAO;QACH,IAAI,EAAE,iCAAiC;QACvC,OAAO,EAAE,KAAc;QAEvB,KAAK,CAAC,IAAI,CAAC,EAAU;YACjB,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;YAC9E,MAAM,cAAc,GAAG,cAAc,CAAC,gBAAgB,EAAE,CAAC,mBAAmB,CAAC;YAC7E,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1E,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -8,13 +8,17 @@
8
8
  * playground all resolve imports through the exact same chain instead of each
9
9
  * reimplementing it and drifting.
10
10
  */
11
- export declare function getResolverPlugins(): {
11
+ export declare function getResolverPlugins(options?: {}): ({
12
+ name: string;
13
+ enforce: "pre";
14
+ load(id: string): Promise<string>;
15
+ } | {
12
16
  name: string;
13
17
  resolveId: {
14
18
  order: string;
15
19
  handler(id: string, importer?: string): void;
16
20
  };
17
- }[];
21
+ })[];
18
22
  /**
19
23
  * Ensure a theme's precompiled entries exist on disk before a build/test/story
20
24
  * run. Idempotent per (theme, contract hash). Any consumer that resolves
@@ -1 +1 @@
1
- {"version":3,"file":"sharedPlugins.d.ts","sourceRoot":"","sources":["../../src/vite/sharedPlugins.ts"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB;;;;;;IAOjC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,KAAA,iBAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,KAAA,SAQrC"}
1
+ {"version":3,"file":"sharedPlugins.d.ts","sourceRoot":"","sources":["../../src/vite/sharedPlugins.ts"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,KAAK;;;;;;;;;;KAQ9C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,KAAA,iBAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,KAAA,SAQrC"}
@@ -2,6 +2,7 @@ import inheritModuleResolver from "./inheritModuleResolver.js";
2
2
  import inheritAssetsModuleResolver from "./inheritAssetsModuleResolver.js";
3
3
  import defaultNodeResolve from "./defaultNodeResolver.js";
4
4
  import unresolvedModuleGuard from "./unresolvedModuleGuard.js";
5
+ import islandComponentsPlugin from "./islandComponentsPlugin.js";
5
6
  import preCompileMagentoFiles from "../core/preCompileMagentoFiles.js";
6
7
  import configResolver from "../core/configResolver.js";
7
8
  /**
@@ -14,10 +15,11 @@ import configResolver from "../core/configResolver.js";
14
15
  * playground all resolve imports through the exact same chain instead of each
15
16
  * reimplementing it and drifting.
16
17
  */
17
- export function getResolverPlugins() {
18
+ export function getResolverPlugins(options = {}) {
18
19
  return [
19
20
  inheritModuleResolver(),
20
21
  inheritAssetsModuleResolver(),
22
+ islandComponentsPlugin(options),
21
23
  defaultNodeResolve,
22
24
  unresolvedModuleGuard(),
23
25
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"sharedPlugins.js","sourceRoot":"","sources":["../../src/vite/sharedPlugins.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,2BAA2B,MAAM,kCAAkC,CAAC;AAC3E,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,sBAAsB,MAAM,mCAAmC,CAAC;AACvE,OAAO,cAAc,MAAM,2BAA2B,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB;IAC9B,OAAO;QACH,qBAAqB,EAAE;QACvB,2BAA2B,EAAE;QAC7B,kBAAkB;QAClB,qBAAqB,EAAE;KAC1B,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAS;IACvC,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,OAAO;IAClC,MAAM,QAAQ,GAAG;QACb,GAAG,cAAc,CAAC,qBAAqB,EAAE;QACzC,GAAG,cAAc,CAAC,oBAAoB,EAAE;KAC3C;SACI,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC;SACxC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"sharedPlugins.js","sourceRoot":"","sources":["../../src/vite/sharedPlugins.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,2BAA2B,MAAM,kCAAkC,CAAC;AAC3E,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AACjE,OAAO,sBAAsB,MAAM,mCAAmC,CAAC;AACvE,OAAO,cAAc,MAAM,2BAA2B,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAO,GAAG,EAAE;IAC3C,OAAO;QACH,qBAAqB,EAAE;QACvB,2BAA2B,EAAE;QAC7B,sBAAsB,CAAC,OAAO,CAAC;QAC/B,kBAAkB;QAClB,qBAAqB,EAAE;KAC1B,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAS;IACvC,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,OAAO;IAClC,MAAM,QAAQ,GAAG;QACb,GAAG,cAAc,CAAC,qBAAqB,EAAE;QACzC,GAAG,cAAc,CAAC,oBAAoB,EAAE;KAC3C;SACI,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC;SACxC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mage-obsidian",
3
- "version": "2.9.1",
3
+ "version": "3.0.1",
4
4
  "description": "The MageObsidian JS build engine for Magento 2 frontends: theme inheritance resolution, precompilation and JS interceptors for Vite builds.",
5
5
  "homepage": "https://mage-obsidian.jeanmarcos.dev/",
6
6
  "bugs": {
@@ -118,7 +118,10 @@
118
118
  "vitest": "^4.1.10"
119
119
  },
120
120
  "overrides": {
121
- "vite": "^8.1.5"
121
+ "vite": "^8.1.5",
122
+ "nanoid": "^3.3.18",
123
+ "postcss": "^8.5.23",
124
+ "brace-expansion": "^5.0.9"
122
125
  },
123
126
  "scripts": {
124
127
  "build": "tsc -p tsconfig.build.json && node scripts/copy-assets.mjs",