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.
- package/dist/core/islandComponentMap.d.ts +4 -0
- package/dist/core/islandComponentMap.d.ts.map +1 -0
- package/dist/core/islandComponentMap.js +19 -0
- package/dist/core/islandComponentMap.js.map +1 -0
- package/dist/runtime/islandComponents.d.ts +5 -0
- package/dist/runtime/islandComponents.d.ts.map +1 -0
- package/dist/runtime/islandComponents.js +3 -0
- package/dist/runtime/islandComponents.js.map +1 -0
- package/dist/runtime/islands.d.ts +10 -3
- package/dist/runtime/islands.d.ts.map +1 -1
- package/dist/runtime/islands.js +45 -4
- package/dist/runtime/islands.js.map +1 -1
- package/dist/vite/islandComponentsPlugin.d.ts +8 -0
- package/dist/vite/islandComponentsPlugin.d.ts.map +1 -0
- package/dist/vite/islandComponentsPlugin.js +19 -0
- package/dist/vite/islandComponentsPlugin.js.map +1 -0
- package/dist/vite/sharedPlugins.d.ts +6 -2
- package/dist/vite/sharedPlugins.d.ts.map +1 -1
- package/dist/vite/sharedPlugins.js +3 -1
- package/dist/vite/sharedPlugins.js.map +1 -1
- package/package.json +5 -2
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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
|
-
|
|
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;
|
|
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"}
|
package/dist/runtime/islands.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;CACZ,CAAC;
|
|
1
|
+
{"version":3,"file":"islands.js","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"
|
|
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;
|
|
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": "
|
|
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",
|