mage-obsidian 2.4.1 โ 2.5.0
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/README.md +2 -0
- package/dist/cli/buildThemes.js +6 -0
- package/dist/cli/buildThemes.js.map +1 -1
- package/dist/cli/islandSsr.d.ts +2 -0
- package/dist/cli/islandSsr.d.ts.map +1 -0
- package/dist/cli/islandSsr.js +68 -0
- package/dist/cli/islandSsr.js.map +1 -0
- package/dist/config/default.d.ts +3 -0
- package/dist/config/default.d.ts.map +1 -1
- package/dist/config/default.js +8 -0
- package/dist/config/default.js.map +1 -1
- package/dist/core/cmsBaseline.d.ts +16 -0
- package/dist/core/cmsBaseline.d.ts.map +1 -0
- package/dist/core/cmsBaseline.js +36 -0
- package/dist/core/cmsBaseline.js.map +1 -0
- package/dist/core/cssResolver.d.ts.map +1 -1
- package/dist/core/cssResolver.js +19 -1
- package/dist/core/cssResolver.js.map +1 -1
- package/dist/core/islandSsr.d.ts +40 -0
- package/dist/core/islandSsr.d.ts.map +1 -0
- package/dist/core/islandSsr.js +58 -0
- package/dist/core/islandSsr.js.map +1 -0
- package/dist/runtime/eventManager.d.ts +56 -0
- package/dist/runtime/eventManager.d.ts.map +1 -0
- package/dist/runtime/eventManager.js +81 -0
- package/dist/runtime/eventManager.js.map +1 -0
- package/dist/runtime/hydrationDiff.d.ts +28 -0
- package/dist/runtime/hydrationDiff.d.ts.map +1 -0
- package/dist/runtime/hydrationDiff.js +53 -0
- package/dist/runtime/hydrationDiff.js.map +1 -0
- package/dist/runtime/islands.d.ts +18 -8
- package/dist/runtime/islands.d.ts.map +1 -1
- package/dist/runtime/islands.js +19 -8
- package/dist/runtime/islands.js.map +1 -1
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
[](https://github.com/mage-obsidian/js-package-utils/actions/workflows/ci.yml)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
6
|
|
|
7
|
+
[](https://github.com/mage-obsidian/module-modern-frontend)
|
|
8
|
+
|
|
7
9
|
๐ [Documentation](https://mage-obsidian.jeanmarcos.dev/) ยท ๐ [Live demo](https://mage-obsidian-demo.jeanmarcos.dev/) ยท ๐ฌ [Discussions](https://github.com/mage-obsidian/module-modern-frontend/discussions)
|
|
8
10
|
|
|
9
11
|
The JavaScript build engine behind [MageObsidian](https://github.com/mage-obsidian/module-modern-frontend), a modern frontend for Magento 2. ESM-only, consumed by the [Vite harness](https://github.com/mage-obsidian/component-modern-frontend) as the `mage-obsidian` npm package.
|
package/dist/cli/buildThemes.js
CHANGED
|
@@ -8,6 +8,7 @@ import path from "path";
|
|
|
8
8
|
import chalk from "chalk";
|
|
9
9
|
import configResolver from "../core/configResolver.js";
|
|
10
10
|
import preCompileMagentoFiles from "../core/preCompileMagentoFiles.js";
|
|
11
|
+
import { writeCmsBaseline } from "../core/cmsBaseline.js";
|
|
11
12
|
import runWithConcurrency from "../utils/runWithConcurrency.js";
|
|
12
13
|
import { selectThemeForDevServer } from "./selectTheme.js";
|
|
13
14
|
import dotenv from "dotenv";
|
|
@@ -134,6 +135,11 @@ const buildThemes = async (themeNames) => {
|
|
|
134
135
|
console.error(chalk.red(`Build failed for: ${failed.map((result) => result.themeName).join(", ")}`));
|
|
135
136
|
process.exit(1);
|
|
136
137
|
}
|
|
138
|
+
// Only for what actually built: a baseline next to a stylesheet that was
|
|
139
|
+
// never produced would tell the storefront it covers classes it does not.
|
|
140
|
+
for (const { themeName } of results) {
|
|
141
|
+
await writeCmsBaseline(themeName);
|
|
142
|
+
}
|
|
137
143
|
};
|
|
138
144
|
/**
|
|
139
145
|
* Type-check one assembled theme with vue-tsc. The theme's generated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildThemes.js","sourceRoot":"","sources":["../../src/cli/buildThemes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"buildThemes.js","sourceRoot":"","sources":["../../src/cli/buildThemes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"islandSsr.d.ts","sourceRoot":"","sources":["../../src/cli/islandSsr.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import { readFileSync } from "node:fs";
|
|
10
|
+
import { createRequire } from "node:module";
|
|
11
|
+
import { resolve } from "node:path";
|
|
12
|
+
import { pathToFileURL } from "node:url";
|
|
13
|
+
import { extractTemplate, formatForReading, renderIsland } from "../core/islandSsr.js";
|
|
14
|
+
// Generates the server-side markup a template must emit so an island hydrates
|
|
15
|
+
// instead of shifting the page. Run by hand while writing a template, not by the
|
|
16
|
+
// build. Kept argv-only (no commander) to match the other internal bins.
|
|
17
|
+
function arg(name) {
|
|
18
|
+
const i = process.argv.indexOf(name);
|
|
19
|
+
return i > -1 ? process.argv[i + 1] : undefined;
|
|
20
|
+
}
|
|
21
|
+
const componentFile = arg("--component");
|
|
22
|
+
const stateFile = arg("--state");
|
|
23
|
+
const propsArg = arg("--props");
|
|
24
|
+
if (!componentFile) {
|
|
25
|
+
console.error("usage: island-ssr --component <Component.vue> [--state <state.mjs|.json>] [--props <json>]\n" +
|
|
26
|
+
"\n" +
|
|
27
|
+
" --state values the template reads. A .mjs default-exporting an object can\n" +
|
|
28
|
+
" carry the methods the template calls; a .json is data only.\n" +
|
|
29
|
+
" --props props passed to the island, as JSON.");
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
async function loadState(file) {
|
|
33
|
+
if (!file) {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
const path = resolve(file);
|
|
37
|
+
if (path.endsWith(".json")) {
|
|
38
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
39
|
+
}
|
|
40
|
+
const module = await import(__rewriteRelativeImportExtension(pathToFileURL(path).href));
|
|
41
|
+
return module.default ?? module;
|
|
42
|
+
}
|
|
43
|
+
// Vue belongs to the harness this is run from, not to the engine, so resolve it
|
|
44
|
+
// against the working directory instead of this file's own module tree.
|
|
45
|
+
async function importFromCwd(specifier) {
|
|
46
|
+
const requireFromCwd = createRequire(pathToFileURL(resolve("package.json")).href);
|
|
47
|
+
return import(__rewriteRelativeImportExtension(pathToFileURL(requireFromCwd.resolve(specifier)).href));
|
|
48
|
+
}
|
|
49
|
+
let createSSRApp;
|
|
50
|
+
let renderToString;
|
|
51
|
+
try {
|
|
52
|
+
({ createSSRApp } = await importFromCwd("vue"));
|
|
53
|
+
({ renderToString } = await importFromCwd("vue/server-renderer"));
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error("island-ssr needs Vue: run it from the Vite harness (component-modern-frontend/vite).\n" +
|
|
57
|
+
String(error));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const source = readFileSync(resolve(componentFile), "utf8");
|
|
61
|
+
const props = propsArg ? JSON.parse(propsArg) : {};
|
|
62
|
+
const state = await loadState(stateFile);
|
|
63
|
+
const html = await renderIsland(extractTemplate(source, componentFile), state, props, {
|
|
64
|
+
createSSRApp,
|
|
65
|
+
renderToString,
|
|
66
|
+
});
|
|
67
|
+
console.log(formatForReading(html));
|
|
68
|
+
//# sourceMappingURL=islandSsr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"islandSsr.js","sourceRoot":"","sources":["../../src/cli/islandSsr.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEvF,8EAA8E;AAC9E,iFAAiF;AACjF,yEAAyE;AACzE,SAAS,GAAG,CAAC,IAAY;IACrB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,MAAM,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;AACzC,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;AACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;AAEhC,IAAI,CAAC,aAAa,EAAE,CAAC;IACjB,OAAO,CAAC,KAAK,CACT,8FAA8F;QAC1F,IAAI;QACJ,gFAAgF;QAChF,0EAA0E;QAC1E,iDAAiD,CACxD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAwB;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,MAAM,kCAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAC,CAAC;IACtD,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,wEAAwE;AACxE,KAAK,UAAU,aAAa,CAAC,SAAiB;IAC1C,MAAM,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClF,OAAO,MAAM,kCAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAC,CAAC;AACzE,CAAC;AAED,IAAI,YAA8E,CAAC;AACnF,IAAI,cAAiD,CAAC;AAEtD,IAAI,CAAC;IACD,CAAC,EAAE,YAAY,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACtE,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CACT,wFAAwF;QACpF,MAAM,CAAC,KAAK,CAAC,CACpB,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;AAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;AAEzC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;IAClF,YAAY;IACZ,cAAc;CACjB,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC"}
|
package/dist/config/default.d.ts
CHANGED
|
@@ -2,6 +2,9 @@ export declare const MAGENTO_ROOT: string;
|
|
|
2
2
|
export declare const DEPENDENCY_CONFIG_FILENAME = "mage_obsidian_frontend_modules.json";
|
|
3
3
|
export declare const MAGENTO_CONFIG_RELATIVE_PATH = "app/etc/";
|
|
4
4
|
export declare const DEPENDENCY_CONFIG_FILE_PATH: string;
|
|
5
|
+
export declare const CMS_CONTENT_DIR: string;
|
|
6
|
+
export declare const CMS_CANDIDATES_FILE = "candidates.json";
|
|
7
|
+
export declare const CMS_BASELINE_FILE = "cms-candidates.json";
|
|
5
8
|
export declare const MODULE_WEB_PATH = "view/frontend/web/";
|
|
6
9
|
export declare const MODULE_TEMPLATES_PATH = "view/frontend/templates";
|
|
7
10
|
export declare const THEME_MODULE_WEB_PATH = "web/";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/config/default.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,QAEc,CAAC;AAExC,eAAO,MAAM,0BAA0B,wCAAwC,CAAC;AAChF,eAAO,MAAM,4BAA4B,aAAa,CAAC;AACvD,eAAO,MAAM,2BAA2B,QAIvC,CAAC;
|
|
1
|
+
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/config/default.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,QAEc,CAAC;AAExC,eAAO,MAAM,0BAA0B,wCAAwC,CAAC;AAChF,eAAO,MAAM,4BAA4B,aAAa,CAAC;AACvD,eAAO,MAAM,2BAA2B,QAIvC,CAAC;AAKF,eAAO,MAAM,eAAe,QAAsD,CAAC;AACnF,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAGrD,eAAO,MAAM,iBAAiB,wBAAwB,CAAC;AAEvD,eAAO,MAAM,eAAe,uBAAuB,CAAC;AACpD,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAC/D,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAC5C,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAEvC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAElD,eAAO,MAAM,2CAA2C,sCAAsC,CAAC"}
|
package/dist/config/default.js
CHANGED
|
@@ -8,6 +8,14 @@ export const MAGENTO_ROOT = process.env.MAGE_OBSIDIAN_MAGENTO_ROOT
|
|
|
8
8
|
export const DEPENDENCY_CONFIG_FILENAME = "mage_obsidian_frontend_modules.json";
|
|
9
9
|
export const MAGENTO_CONFIG_RELATIVE_PATH = "app/etc/";
|
|
10
10
|
export const DEPENDENCY_CONFIG_FILE_PATH = path.resolve(MAGENTO_ROOT, MAGENTO_CONFIG_RELATIVE_PATH, DEPENDENCY_CONFIG_FILENAME);
|
|
11
|
+
// Where `mage-obsidian:cms:export` leaves the CMS content Tailwind has to scan.
|
|
12
|
+
// Mirrors ConfigInterface::CMS_CONTENT_PATH on the PHP side; it is a fixed
|
|
13
|
+
// layout rather than a setting, so it stays out of the generated contract.
|
|
14
|
+
export const CMS_CONTENT_DIR = path.resolve(MAGENTO_ROOT, "var/mage-obsidian/cms");
|
|
15
|
+
export const CMS_CANDIDATES_FILE = "candidates.json";
|
|
16
|
+
// Written into each theme's build output so the runtime knows which classes the
|
|
17
|
+
// stylesheet it is serving already covers. Mirrors ConfigInterface::CMS_BASELINE_FILE.
|
|
18
|
+
export const CMS_BASELINE_FILE = "cms-candidates.json";
|
|
11
19
|
export const MODULE_WEB_PATH = "view/frontend/web/";
|
|
12
20
|
export const MODULE_TEMPLATES_PATH = "view/frontend/templates";
|
|
13
21
|
export const THEME_MODULE_WEB_PATH = "web/";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/config/default.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,+EAA+E;AAC/E,+EAA+E;AAC/E,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B;IAC9D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACtD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,0BAA0B,GAAG,qCAAqC,CAAC;AAChF,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;AACvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC,OAAO,CACnD,YAAY,EACZ,4BAA4B,EAC5B,0BAA0B,CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAElD,MAAM,CAAC,MAAM,2CAA2C,GAAG,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/config/default.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,+EAA+E;AAC/E,+EAA+E;AAC/E,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B;IAC9D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACtD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,0BAA0B,GAAG,qCAAqC,CAAC;AAChF,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;AACvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC,OAAO,CACnD,YAAY,EACZ,4BAA4B,EAC5B,0BAA0B,CAC7B,CAAC;AAEF,gFAAgF;AAChF,2EAA2E;AAC3E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AACrD,gFAAgF;AAChF,uFAAuF;AACvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAElD,MAAM,CAAC,MAAM,2CAA2C,GAAG,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pin the class list this build covered next to the build's own output.
|
|
3
|
+
*
|
|
4
|
+
* The storefront compiles, at runtime, the difference between the classes in
|
|
5
|
+
* CMS content now and the ones the stylesheet already carries. That subtraction
|
|
6
|
+
* needs a baseline, and the baseline has to be the one this build actually
|
|
7
|
+
* scanned โ leaving it in `var/` would let an export run afterwards and quietly
|
|
8
|
+
* move it. Writing it into the theme's generated dir ties the two together and
|
|
9
|
+
* makes it travel with whatever gets deployed.
|
|
10
|
+
*
|
|
11
|
+
* A missing export means the build scanned no CMS content at all, which is an
|
|
12
|
+
* empty baseline โ not an error.
|
|
13
|
+
*/
|
|
14
|
+
export declare function writeCmsBaseline(themeName: any): Promise<string>;
|
|
15
|
+
export default writeCmsBaseline;
|
|
16
|
+
//# sourceMappingURL=cmsBaseline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmsBaseline.d.ts","sourceRoot":"","sources":["../../src/core/cmsBaseline.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,KAAA,mBAgB/C;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { CMS_BASELINE_FILE, CMS_CANDIDATES_FILE, CMS_CONTENT_DIR, OUTPUT_THEME_DIR, } from "../config/default.js";
|
|
4
|
+
import configResolver from "./configResolver.js";
|
|
5
|
+
const { getThemeDefinition } = configResolver;
|
|
6
|
+
/**
|
|
7
|
+
* Pin the class list this build covered next to the build's own output.
|
|
8
|
+
*
|
|
9
|
+
* The storefront compiles, at runtime, the difference between the classes in
|
|
10
|
+
* CMS content now and the ones the stylesheet already carries. That subtraction
|
|
11
|
+
* needs a baseline, and the baseline has to be the one this build actually
|
|
12
|
+
* scanned โ leaving it in `var/` would let an export run afterwards and quietly
|
|
13
|
+
* move it. Writing it into the theme's generated dir ties the two together and
|
|
14
|
+
* makes it travel with whatever gets deployed.
|
|
15
|
+
*
|
|
16
|
+
* A missing export means the build scanned no CMS content at all, which is an
|
|
17
|
+
* empty baseline โ not an error.
|
|
18
|
+
*/
|
|
19
|
+
export async function writeCmsBaseline(themeName) {
|
|
20
|
+
const theme = getThemeDefinition(themeName);
|
|
21
|
+
if (!theme?.src)
|
|
22
|
+
return null;
|
|
23
|
+
let contents = "[]";
|
|
24
|
+
try {
|
|
25
|
+
contents = await fs.readFile(path.join(CMS_CONTENT_DIR, CMS_CANDIDATES_FILE), "utf8");
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// the export was never run
|
|
29
|
+
}
|
|
30
|
+
const target = path.join(theme.src, OUTPUT_THEME_DIR, CMS_BASELINE_FILE);
|
|
31
|
+
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
32
|
+
await fs.writeFile(target, contents);
|
|
33
|
+
return target;
|
|
34
|
+
}
|
|
35
|
+
export default writeCmsBaseline;
|
|
36
|
+
//# sourceMappingURL=cmsBaseline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmsBaseline.js","sourceRoot":"","sources":["../../src/core/cmsBaseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD,MAAM,EAAE,kBAAkB,EAAE,GAAG,cAAc,CAAC;AAE9C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAS;IAC5C,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,GAAG;QAAE,OAAO,IAAI,CAAC;IAE7B,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC;QACD,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1F,CAAC;IAAC,MAAM,CAAC;QACL,2BAA2B;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cssResolver.d.ts","sourceRoot":"","sources":["../../src/core/cssResolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cssResolver.d.ts","sourceRoot":"","sources":["../../src/core/cssResolver.ts"],"names":[],"mappings":"AAuFA,iBAAe,kBAAkB,CAAC,SAAS,KAAA,mBAoB1C;AAmCD,iBAAe,aAAa,CAAC,SAAS,KAAA,mBA0BrC;AAED,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/core/cssResolver.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import themeResolver from "./themeResolverSync.js";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { MODULE_TEMPLATES_PATH, MODULE_WEB_PATH, THEME_CSS_FOLDER, THEME_MODULE_WEB_PATH, } from "../config/default.js";
|
|
3
|
+
import { CMS_CONTENT_DIR, MODULE_TEMPLATES_PATH, MODULE_WEB_PATH, THEME_CSS_FOLDER, THEME_MODULE_WEB_PATH, } from "../config/default.js";
|
|
4
4
|
import { resolveFileByTheme, getAllJsVueFilesWithInheritanceCached } from "./moduleResolver.js";
|
|
5
5
|
import configResolver from "./configResolver.js";
|
|
6
6
|
import fs from "node:fs/promises";
|
|
@@ -78,8 +78,26 @@ async function getTemplateSources(themeName) {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
sources += await getThemeTemplateSources(themeName);
|
|
81
|
+
sources += await getCmsContentSource(themeName);
|
|
81
82
|
return sources;
|
|
82
83
|
}
|
|
84
|
+
// Classes an author writes in a CMS page or block live in a database, which no
|
|
85
|
+
// scanner can read. `mage-obsidian:cms:export` dumps that content to files;
|
|
86
|
+
// this registers the directory so the build covers everything that existed when
|
|
87
|
+
// it ran. A theme opts out with `scanCmsContent: false`, and a missing
|
|
88
|
+
// directory just means the export was never run.
|
|
89
|
+
async function getCmsContentSource(themeName) {
|
|
90
|
+
const themeConfig = await themeResolver.getThemeConfig(themeName);
|
|
91
|
+
if (themeConfig?.scanCmsContent === false)
|
|
92
|
+
return "";
|
|
93
|
+
try {
|
|
94
|
+
await fs.access(CMS_CONTENT_DIR);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return "";
|
|
98
|
+
}
|
|
99
|
+
return `@source "${CMS_CONTENT_DIR}";\n`;
|
|
100
|
+
}
|
|
83
101
|
async function getVueComponentsSource(themeName) {
|
|
84
102
|
const { ignoreAllModules, excludedModules } = await getScanExclusions(themeName);
|
|
85
103
|
const vueComponents = await getAllJsVueFilesWithInheritanceCached(themeName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cssResolver.js","sourceRoot":"","sources":["../../src/core/cssResolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cssResolver.js","sourceRoot":"","sources":["../../src/core/cssResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders an island component's initial state to the HTML a template has to emit
|
|
3
|
+
* for `renderVueComponent`'s `$serverHtml` argument.
|
|
4
|
+
*
|
|
5
|
+
* Vue's hydration expects fragment anchors (`<!--[-->`, `<!---->`) that nobody
|
|
6
|
+
* can reasonably write by hand, so the markup is generated from the component's
|
|
7
|
+
* own `<template>` instead of transcribed. Only the template is used: the SFC's
|
|
8
|
+
* `<script setup>` is never executed, so this needs no bundler, no alias
|
|
9
|
+
* resolution and no browser โ the caller supplies the state the template reads,
|
|
10
|
+
* which is the same state the server will have.
|
|
11
|
+
*
|
|
12
|
+
* Development tooling only. Nothing here ships to a storefront.
|
|
13
|
+
*/
|
|
14
|
+
export interface SsrDeps {
|
|
15
|
+
createSSRApp(component: unknown, props?: Record<string, unknown>): unknown;
|
|
16
|
+
renderToString(app: unknown): Promise<string>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Pull the `<template>` block out of a single-file component.
|
|
20
|
+
*
|
|
21
|
+
* @throws Error When the file has no template block.
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractTemplate(source: string, file?: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Render a component's template against a state object.
|
|
26
|
+
*
|
|
27
|
+
* `state` becomes the component's setup bindings, so it can carry the methods a
|
|
28
|
+
* template calls (`isAvailable()`, `swatchOf()`, โฆ) and not just plain data. A
|
|
29
|
+
* `components` key is lifted out and registered instead: a template compiled at
|
|
30
|
+
* runtime resolves child components through the options entry, not through setup
|
|
31
|
+
* bindings the way a compiled `<script setup>` does.
|
|
32
|
+
*/
|
|
33
|
+
export declare function renderIsland(template: string, state: Record<string, unknown>, props: Record<string, unknown>, deps: SsrDeps): Promise<string>;
|
|
34
|
+
/**
|
|
35
|
+
* Break a rendered island into one line per element, for a readable diff against
|
|
36
|
+
* a template. Purely cosmetic โ the value handed to `$serverHtml` is the
|
|
37
|
+
* unformatted string, and PHP condenses whitespace anyway.
|
|
38
|
+
*/
|
|
39
|
+
export declare function formatForReading(html: string): string;
|
|
40
|
+
//# sourceMappingURL=islandSsr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"islandSsr.d.ts","sourceRoot":"","sources":["../../src/core/islandSsr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,OAAO;IACpB,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IAC3E,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,SAAc,GAAG,MAAM,CAa1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,IAAI,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders an island component's initial state to the HTML a template has to emit
|
|
3
|
+
* for `renderVueComponent`'s `$serverHtml` argument.
|
|
4
|
+
*
|
|
5
|
+
* Vue's hydration expects fragment anchors (`<!--[-->`, `<!---->`) that nobody
|
|
6
|
+
* can reasonably write by hand, so the markup is generated from the component's
|
|
7
|
+
* own `<template>` instead of transcribed. Only the template is used: the SFC's
|
|
8
|
+
* `<script setup>` is never executed, so this needs no bundler, no alias
|
|
9
|
+
* resolution and no browser โ the caller supplies the state the template reads,
|
|
10
|
+
* which is the same state the server will have.
|
|
11
|
+
*
|
|
12
|
+
* Development tooling only. Nothing here ships to a storefront.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Pull the `<template>` block out of a single-file component.
|
|
16
|
+
*
|
|
17
|
+
* @throws Error When the file has no template block.
|
|
18
|
+
*/
|
|
19
|
+
export function extractTemplate(source, file = "component") {
|
|
20
|
+
const opening = source.match(/<template(\s[^>]*)?>/);
|
|
21
|
+
if (!opening || opening.index === undefined) {
|
|
22
|
+
throw new Error(`${file} has no <template> block, so there is no markup to render.`);
|
|
23
|
+
}
|
|
24
|
+
const start = opening.index + opening[0].length;
|
|
25
|
+
const end = source.lastIndexOf("</template>");
|
|
26
|
+
if (end < start) {
|
|
27
|
+
throw new Error(`${file} has an unterminated <template> block.`);
|
|
28
|
+
}
|
|
29
|
+
return source.slice(start, end).trim();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Render a component's template against a state object.
|
|
33
|
+
*
|
|
34
|
+
* `state` becomes the component's setup bindings, so it can carry the methods a
|
|
35
|
+
* template calls (`isAvailable()`, `swatchOf()`, โฆ) and not just plain data. A
|
|
36
|
+
* `components` key is lifted out and registered instead: a template compiled at
|
|
37
|
+
* runtime resolves child components through the options entry, not through setup
|
|
38
|
+
* bindings the way a compiled `<script setup>` does.
|
|
39
|
+
*/
|
|
40
|
+
export async function renderIsland(template, state, props, deps) {
|
|
41
|
+
const { components = {}, ...bindings } = state;
|
|
42
|
+
const component = {
|
|
43
|
+
props: Object.keys(props),
|
|
44
|
+
components: components,
|
|
45
|
+
setup: () => bindings,
|
|
46
|
+
template,
|
|
47
|
+
};
|
|
48
|
+
return deps.renderToString(deps.createSSRApp(component, props));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Break a rendered island into one line per element, for a readable diff against
|
|
52
|
+
* a template. Purely cosmetic โ the value handed to `$serverHtml` is the
|
|
53
|
+
* unformatted string, and PHP condenses whitespace anyway.
|
|
54
|
+
*/
|
|
55
|
+
export function formatForReading(html) {
|
|
56
|
+
return html.replace(/></g, ">\n<");
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=islandSsr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"islandSsr.js","sourceRoot":"","sources":["../../src/core/islandSsr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,IAAI,GAAG,WAAW;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4DAA4D,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wCAAwC,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,QAAgB,EAChB,KAA8B,EAC9B,KAA8B,EAC9B,IAAa;IAEb,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC/C,MAAM,SAAS,GAAG;QACd,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,UAAU,EAAE,UAAqC;QACjD,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ;QACrB,QAAQ;KACX,CAAC;IAEF,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storefront event manager โ the front-end counterpart of Magento's observers,
|
|
3
|
+
* next to the plugin system already ported in `interceptorManager.ts`.
|
|
4
|
+
*
|
|
5
|
+
* The two answer different questions and both exist for the same reason they do
|
|
6
|
+
* in PHP: an interceptor wraps a specific function and can change what it does,
|
|
7
|
+
* an observer subscribes to something that happened and cannot. Extending the
|
|
8
|
+
* cart flow from another module should not require knowing which function to
|
|
9
|
+
* wrap, so the flow announces what it did and anyone can listen.
|
|
10
|
+
*
|
|
11
|
+
* Observers run in `sortOrder` and receive one mutable data object (Magento
|
|
12
|
+
* parity), so a `*_before` observer can amend the request the flow is about to
|
|
13
|
+
* make. An observer that throws is reported and skipped: a failing analytics
|
|
14
|
+
* hook must not take down an add-to-cart.
|
|
15
|
+
*
|
|
16
|
+
* No DOM and no framework, so it is unit-testable in Node. The concrete
|
|
17
|
+
* storefront wiring (the singleton, the CustomEvent bridge) lives in the
|
|
18
|
+
* module's `web/js/events.ts`.
|
|
19
|
+
*/
|
|
20
|
+
export type EventObserver<T = Record<string, unknown>> = (data: T) => void | Promise<void>;
|
|
21
|
+
export interface ObserverEntry {
|
|
22
|
+
name: string;
|
|
23
|
+
observer: EventObserver<never>;
|
|
24
|
+
sortOrder: number;
|
|
25
|
+
}
|
|
26
|
+
export interface EventManagerDeps {
|
|
27
|
+
/** Reporting sink for an observer that threw. Defaults to `console.error`. */
|
|
28
|
+
onError?(event: string, name: string, error: unknown): void;
|
|
29
|
+
}
|
|
30
|
+
export declare class EventManager {
|
|
31
|
+
private readonly observers;
|
|
32
|
+
private readonly deps;
|
|
33
|
+
constructor(deps?: EventManagerDeps);
|
|
34
|
+
/**
|
|
35
|
+
* Subscribe to an event.
|
|
36
|
+
*
|
|
37
|
+
* @returns A function that removes this observer.
|
|
38
|
+
*/
|
|
39
|
+
observe<T = Record<string, unknown>>(event: string, observer: EventObserver<T>, { name, sortOrder }?: {
|
|
40
|
+
name?: string;
|
|
41
|
+
sortOrder?: number;
|
|
42
|
+
}): () => void;
|
|
43
|
+
/**
|
|
44
|
+
* Notify every observer of an event, in order, awaiting each.
|
|
45
|
+
*
|
|
46
|
+
* @returns The same data object the observers were given, after any of them
|
|
47
|
+
* amended it โ so a dispatcher can read back what they changed.
|
|
48
|
+
*/
|
|
49
|
+
dispatch<T extends object>(event: string, data: T): Promise<T>;
|
|
50
|
+
/**
|
|
51
|
+
* Names of the observers registered for an event, in execution order.
|
|
52
|
+
*/
|
|
53
|
+
observersOf(event: string): string[];
|
|
54
|
+
private report;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=eventManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventManager.d.ts","sourceRoot":"","sources":["../../src/runtime/eventManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3F,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,8EAA8E;IAC9E,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/D;AAID,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IAEjE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;gBAE5B,IAAI,GAAE,gBAAqB;IAIvC;;;;OAIG;IACH,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,EAAE,IAAI,EAAE,SAA8B,EAAE,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACrF,MAAM,IAAI;IAmBb;;;;;OAKG;IACG,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAcpE;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAIpC,OAAO,CAAC,MAAM;CAUjB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storefront event manager โ the front-end counterpart of Magento's observers,
|
|
3
|
+
* next to the plugin system already ported in `interceptorManager.ts`.
|
|
4
|
+
*
|
|
5
|
+
* The two answer different questions and both exist for the same reason they do
|
|
6
|
+
* in PHP: an interceptor wraps a specific function and can change what it does,
|
|
7
|
+
* an observer subscribes to something that happened and cannot. Extending the
|
|
8
|
+
* cart flow from another module should not require knowing which function to
|
|
9
|
+
* wrap, so the flow announces what it did and anyone can listen.
|
|
10
|
+
*
|
|
11
|
+
* Observers run in `sortOrder` and receive one mutable data object (Magento
|
|
12
|
+
* parity), so a `*_before` observer can amend the request the flow is about to
|
|
13
|
+
* make. An observer that throws is reported and skipped: a failing analytics
|
|
14
|
+
* hook must not take down an add-to-cart.
|
|
15
|
+
*
|
|
16
|
+
* No DOM and no framework, so it is unit-testable in Node. The concrete
|
|
17
|
+
* storefront wiring (the singleton, the CustomEvent bridge) lives in the
|
|
18
|
+
* module's `web/js/events.ts`.
|
|
19
|
+
*/
|
|
20
|
+
const DEFAULT_SORT_ORDER = 10;
|
|
21
|
+
export class EventManager {
|
|
22
|
+
observers = {};
|
|
23
|
+
deps;
|
|
24
|
+
constructor(deps = {}) {
|
|
25
|
+
this.deps = deps;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Subscribe to an event.
|
|
29
|
+
*
|
|
30
|
+
* @returns A function that removes this observer.
|
|
31
|
+
*/
|
|
32
|
+
observe(event, observer, { name, sortOrder = DEFAULT_SORT_ORDER } = {}) {
|
|
33
|
+
const entry = {
|
|
34
|
+
name: name ?? `${event}_${(this.observers[event]?.length ?? 0) + 1}`,
|
|
35
|
+
observer: observer,
|
|
36
|
+
sortOrder,
|
|
37
|
+
};
|
|
38
|
+
const entries = (this.observers[event] ??= []);
|
|
39
|
+
entries.push(entry);
|
|
40
|
+
entries.sort((a, b) => a.sortOrder - b.sortOrder);
|
|
41
|
+
return () => {
|
|
42
|
+
const at = entries.indexOf(entry);
|
|
43
|
+
if (at > -1) {
|
|
44
|
+
entries.splice(at, 1);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Notify every observer of an event, in order, awaiting each.
|
|
50
|
+
*
|
|
51
|
+
* @returns The same data object the observers were given, after any of them
|
|
52
|
+
* amended it โ so a dispatcher can read back what they changed.
|
|
53
|
+
*/
|
|
54
|
+
async dispatch(event, data) {
|
|
55
|
+
// Snapshot: an observer may unsubscribe mid-dispatch, and splicing the
|
|
56
|
+
// live array would make the loop skip the entry that follows it.
|
|
57
|
+
for (const entry of (this.observers[event] ?? []).slice()) {
|
|
58
|
+
try {
|
|
59
|
+
await entry.observer(data);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
this.report(event, entry.name, error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return data;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Names of the observers registered for an event, in execution order.
|
|
69
|
+
*/
|
|
70
|
+
observersOf(event) {
|
|
71
|
+
return (this.observers[event] ?? []).map((entry) => entry.name);
|
|
72
|
+
}
|
|
73
|
+
report(event, name, error) {
|
|
74
|
+
if (this.deps.onError) {
|
|
75
|
+
this.deps.onError(event, name, error);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
console.error(`[MageObsidian] Observer "${name}" of "${event}" threw and was skipped.`, error);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=eventManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventManager.js","sourceRoot":"","sources":["../../src/runtime/eventManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAeH,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,MAAM,OAAO,YAAY;IACJ,SAAS,GAAoC,EAAE,CAAC;IAEhD,IAAI,CAAmB;IAExC,YAAY,OAAyB,EAAE;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,OAAO,CACH,KAAa,EACb,QAA0B,EAC1B,EAAE,IAAI,EAAE,SAAS,GAAG,kBAAkB,KAA4C,EAAE;QAEpF,MAAM,KAAK,GAAkB;YACzB,IAAI,EAAE,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;YACpE,QAAQ,EAAE,QAAgC;YAC1C,SAAS;SACZ,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAElD,OAAO,GAAG,EAAE;YACR,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1B,CAAC;QACL,CAAC,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAmB,KAAa,EAAE,IAAO;QACnD,uEAAuE;QACvE,iEAAiE;QACjE,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC;gBACD,MAAO,KAAK,CAAC,QAA6B,CAAC,IAAI,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAa;QACrB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAEO,MAAM,CAAC,KAAa,EAAE,IAAY,EAAE,KAAc;QACtD,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACtC,OAAO;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CACT,4BAA4B,IAAI,SAAS,KAAK,0BAA0B,EACxE,KAAK,CACR,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compares an island's markup either side of hydration.
|
|
3
|
+
*
|
|
4
|
+
* A hydration that matched leaves the DOM untouched: Vue compares `class` as a
|
|
5
|
+
* set and `style` as a map, and a difference there only logs. Anything Vue
|
|
6
|
+
* cannot adopt goes through `handleMismatch`, which removes the server node and
|
|
7
|
+
* patches the right one in โ so the server markup having changed IS the
|
|
8
|
+
* mismatch, exactly and without fixtures.
|
|
9
|
+
*
|
|
10
|
+
* Pure string work, so the browser side stays in the module's bootstrap and this
|
|
11
|
+
* is unit-testable in Node.
|
|
12
|
+
*/
|
|
13
|
+
export interface HydrationMismatch {
|
|
14
|
+
/** Index of the first differing character. */
|
|
15
|
+
offset: number;
|
|
16
|
+
/** Excerpt of the server markup around the divergence. */
|
|
17
|
+
server: string;
|
|
18
|
+
/** The same window of the markup Vue ended up with. */
|
|
19
|
+
client: string;
|
|
20
|
+
/** Where the divergence sits inside both excerpts. */
|
|
21
|
+
column: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function diffHydration(server: string, client: string, context?: number): HydrationMismatch | null;
|
|
24
|
+
/**
|
|
25
|
+
* Render a mismatch as the aligned three-line block a console shows best.
|
|
26
|
+
*/
|
|
27
|
+
export declare function formatMismatch(mismatch: HydrationMismatch, label: string): string;
|
|
28
|
+
//# sourceMappingURL=hydrationDiff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydrationDiff.d.ts","sourceRoot":"","sources":["../../src/runtime/hydrationDiff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,iBAAiB;IAC9B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;CAClB;AAeD,wBAAgB,aAAa,CACzB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,SAAU,GAClB,iBAAiB,GAAG,IAAI,CAoB1B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CASjF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compares an island's markup either side of hydration.
|
|
3
|
+
*
|
|
4
|
+
* A hydration that matched leaves the DOM untouched: Vue compares `class` as a
|
|
5
|
+
* set and `style` as a map, and a difference there only logs. Anything Vue
|
|
6
|
+
* cannot adopt goes through `handleMismatch`, which removes the server node and
|
|
7
|
+
* patches the right one in โ so the server markup having changed IS the
|
|
8
|
+
* mismatch, exactly and without fixtures.
|
|
9
|
+
*
|
|
10
|
+
* Pure string work, so the browser side stays in the module's bootstrap and this
|
|
11
|
+
* is unit-testable in Node.
|
|
12
|
+
*/
|
|
13
|
+
const CONTEXT = 60;
|
|
14
|
+
/**
|
|
15
|
+
* Back up to the tag the divergence sits in, so an excerpt starts somewhere a
|
|
16
|
+
* reader can orient on instead of mid-attribute.
|
|
17
|
+
*/
|
|
18
|
+
function tagBoundary(text, offset, context) {
|
|
19
|
+
const floor = Math.max(0, offset - context);
|
|
20
|
+
const opening = text.lastIndexOf("<", offset);
|
|
21
|
+
return opening >= floor ? opening : floor;
|
|
22
|
+
}
|
|
23
|
+
export function diffHydration(server, client, context = CONTEXT) {
|
|
24
|
+
if (server === client) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const shared = Math.min(server.length, client.length);
|
|
28
|
+
let offset = 0;
|
|
29
|
+
while (offset < shared && server[offset] === client[offset]) {
|
|
30
|
+
offset += 1;
|
|
31
|
+
}
|
|
32
|
+
const start = tagBoundary(server, offset, context);
|
|
33
|
+
const end = offset + context;
|
|
34
|
+
return {
|
|
35
|
+
offset,
|
|
36
|
+
column: offset - start,
|
|
37
|
+
server: server.slice(start, end),
|
|
38
|
+
client: client.slice(start, end),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Render a mismatch as the aligned three-line block a console shows best.
|
|
43
|
+
*/
|
|
44
|
+
export function formatMismatch(mismatch, label) {
|
|
45
|
+
const caret = `${" ".repeat("server: ".length + mismatch.column)}^ first difference at offset ${mismatch.offset}`;
|
|
46
|
+
return [
|
|
47
|
+
`[MageObsidian] Island "${label}" hydrated with a mismatch โ Vue replaced the server markup.`,
|
|
48
|
+
`server: ${mismatch.server}`,
|
|
49
|
+
`client: ${mismatch.client}`,
|
|
50
|
+
caret,
|
|
51
|
+
].join("\n");
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=hydrationDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydrationDiff.js","sourceRoot":"","sources":["../../src/runtime/hydrationDiff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,MAAM,OAAO,GAAG,EAAE,CAAC;AAEnB;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,MAAc,EAAE,OAAe;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE9C,OAAO,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CACzB,MAAc,EACd,MAAc,EACd,OAAO,GAAG,OAAO;IAEjB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC;IAE7B,OAAO;QACH,MAAM;QACN,MAAM,EAAE,MAAM,GAAG,KAAK;QACtB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;KACnC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAA2B,EAAE,KAAa;IACrE,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,gCAAgC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAElH,OAAO;QACH,0BAA0B,KAAK,8DAA8D;QAC7F,WAAW,QAAQ,CAAC,MAAM,EAAE;QAC5B,WAAW,QAAQ,CAAC,MAAM,EAAE;QAC5B,KAAK;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Framework island runtime โ the browser side of `renderVueComponent`.
|
|
3
3
|
*
|
|
4
|
-
* PHP emits
|
|
5
|
-
* (`<div data-mage-island data-component data-props data-strategy>`)
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* PHP emits a marker per component
|
|
5
|
+
* (`<div data-mage-island data-component data-props data-strategy>`), optionally
|
|
6
|
+
* carrying the component's server-rendered initial state; this module turns each
|
|
7
|
+
* marker into a mounted Vue app. Every island is its own app (preserving
|
|
8
|
+
* isolation), but the Vue runtime and the i18n plugin are loaded once per page
|
|
9
|
+
* and shared, and "visible" islands hydrate only when they enter the viewport โ
|
|
10
|
+
* so below-the-fold components cost nothing until scrolled to.
|
|
10
11
|
*
|
|
11
12
|
* All side effects (dynamic import, app creation, plugin wiring, viewport
|
|
12
13
|
* observation) are injected, so the discovery/hydration logic is unit-testable
|
|
13
14
|
* in Node without a DOM, a bundler, or Vue. The concrete wiring lives in the
|
|
14
|
-
* module's `web/js/islands.
|
|
15
|
+
* module's `web/js/islands.ts`.
|
|
15
16
|
*/
|
|
16
17
|
interface IslandElement {
|
|
17
18
|
dataset: Record<string, string | undefined>;
|
|
@@ -23,8 +24,17 @@ interface HydrateDeps {
|
|
|
23
24
|
importComponent(source: string): Promise<{
|
|
24
25
|
default?: unknown;
|
|
25
26
|
}>;
|
|
26
|
-
|
|
27
|
+
/**
|
|
28
|
+
* `hydrate` tells the factory which Vue entry point to use. Adopting server
|
|
29
|
+
* markup needs `createSSRApp`; a container about to be cleared needs
|
|
30
|
+
* `createApp`, which otherwise warns that it found nothing to hydrate.
|
|
31
|
+
*/
|
|
32
|
+
createApp(component: unknown, props: Record<string, unknown>, hydrate: boolean): AppLike;
|
|
27
33
|
configureApp(app: AppLike): void;
|
|
34
|
+
clearContainer?(element: IslandElement): void;
|
|
35
|
+
/** Opaque state captured before mounting, handed back to `onMounted`. */
|
|
36
|
+
snapshot?(element: IslandElement): unknown;
|
|
37
|
+
onMounted?(element: IslandElement, snapshot: unknown): void;
|
|
28
38
|
}
|
|
29
39
|
interface DiscoverDeps extends HydrateDeps {
|
|
30
40
|
observe(element: IslandElement, onVisible: () => void): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,UAAU,aAAa;IACnB,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,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;CAC/D;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,CA8B9B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAWtF"}
|
package/dist/runtime/islands.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Framework island runtime โ the browser side of `renderVueComponent`.
|
|
3
3
|
*
|
|
4
|
-
* PHP emits
|
|
5
|
-
* (`<div data-mage-island data-component data-props data-strategy>`)
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* PHP emits a marker per component
|
|
5
|
+
* (`<div data-mage-island data-component data-props data-strategy>`), optionally
|
|
6
|
+
* carrying the component's server-rendered initial state; this module turns each
|
|
7
|
+
* marker into a mounted Vue app. Every island is its own app (preserving
|
|
8
|
+
* isolation), but the Vue runtime and the i18n plugin are loaded once per page
|
|
9
|
+
* and shared, and "visible" islands hydrate only when they enter the viewport โ
|
|
10
|
+
* so below-the-fold components cost nothing until scrolled to.
|
|
10
11
|
*
|
|
11
12
|
* All side effects (dynamic import, app creation, plugin wiring, viewport
|
|
12
13
|
* observation) are injected, so the discovery/hydration logic is unit-testable
|
|
13
14
|
* in Node without a DOM, a bundler, or Vue. The concrete wiring lives in the
|
|
14
|
-
* module's `web/js/islands.
|
|
15
|
+
* module's `web/js/islands.ts`.
|
|
15
16
|
*/
|
|
16
17
|
// Set synchronously before the async import so a second observer callback for
|
|
17
18
|
// the same element is a no-op (dataset key for `data-mage-island-mounted`).
|
|
@@ -34,9 +35,19 @@ export async function hydrateIsland(element, deps) {
|
|
|
34
35
|
const module = await deps.importComponent(source);
|
|
35
36
|
const component = module.default ?? module;
|
|
36
37
|
const props = element.dataset.props ? JSON.parse(element.dataset.props) : {};
|
|
37
|
-
const
|
|
38
|
+
const hydrate = Boolean(element.dataset.hydrate);
|
|
39
|
+
// Captured before the container is cleared: the baseline is what the page
|
|
40
|
+
// painted, not what is left after a placeholder is thrown away.
|
|
41
|
+
const snapshot = deps.snapshot?.(element);
|
|
42
|
+
if (!hydrate) {
|
|
43
|
+
deps.clearContainer?.(element);
|
|
44
|
+
}
|
|
45
|
+
const app = deps.createApp(component, props, hydrate);
|
|
38
46
|
deps.configureApp(app);
|
|
39
47
|
app.mount(element);
|
|
48
|
+
// Read back before yielding to the event loop, so what is compared is what
|
|
49
|
+
// hydration did and not what a later reactive effect changed.
|
|
50
|
+
deps.onMounted?.(element, snapshot);
|
|
40
51
|
return app;
|
|
41
52
|
}
|
|
42
53
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"islands.js","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"islands.js","sourceRoot":"","sources":["../../src/runtime/islands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,YAAY,GAAG,mBAAmB,CAAC;AA6BzC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,OAAsB,EACtB,IAAiB;IAEjB,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACvB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnB,2EAA2E;IAC3E,8DAA8D;IAC9D,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAiC,EAAE,IAAkB;IAC5E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;QACvD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACvB,KAAK,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,KAAK,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mage-obsidian",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
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": {
|
|
@@ -31,7 +31,8 @@
|
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"type": "module",
|
|
33
33
|
"bin": {
|
|
34
|
-
"mage-obsidian:build-themes": "./dist/cli/buildThemes.js"
|
|
34
|
+
"mage-obsidian:build-themes": "./dist/cli/buildThemes.js",
|
|
35
|
+
"mage-obsidian:island-ssr": "./dist/cli/islandSsr.js"
|
|
35
36
|
},
|
|
36
37
|
"imports": {
|
|
37
38
|
"#core/*": "./src/core/*",
|
|
@@ -114,7 +115,10 @@
|
|
|
114
115
|
"prettier": "^3.8.4",
|
|
115
116
|
"typescript": "^5.9.3",
|
|
116
117
|
"typescript-eslint": "^8.61.1",
|
|
117
|
-
"vitest": "^
|
|
118
|
+
"vitest": "^4.1.10"
|
|
119
|
+
},
|
|
120
|
+
"overrides": {
|
|
121
|
+
"vite": "^8.1.5"
|
|
118
122
|
},
|
|
119
123
|
"scripts": {
|
|
120
124
|
"build": "tsc -p tsconfig.build.json && node scripts/copy-assets.mjs",
|