mage-obsidian 2.4.0 โ†’ 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.
Files changed (46) hide show
  1. package/README.md +32 -12
  2. package/dist/cli/buildThemes.js +8 -2
  3. package/dist/cli/buildThemes.js.map +1 -1
  4. package/dist/cli/criticalCss.js.map +1 -1
  5. package/dist/cli/islandSsr.d.ts +2 -0
  6. package/dist/cli/islandSsr.d.ts.map +1 -0
  7. package/dist/cli/islandSsr.js +68 -0
  8. package/dist/cli/islandSsr.js.map +1 -0
  9. package/dist/config/default.d.ts +3 -0
  10. package/dist/config/default.d.ts.map +1 -1
  11. package/dist/config/default.js +8 -0
  12. package/dist/config/default.js.map +1 -1
  13. package/dist/core/cmsBaseline.d.ts +16 -0
  14. package/dist/core/cmsBaseline.d.ts.map +1 -0
  15. package/dist/core/cmsBaseline.js +36 -0
  16. package/dist/core/cmsBaseline.js.map +1 -0
  17. package/dist/core/criticalCss.d.ts +1 -1
  18. package/dist/core/criticalCss.d.ts.map +1 -1
  19. package/dist/core/criticalCss.js +1 -1
  20. package/dist/core/criticalCss.js.map +1 -1
  21. package/dist/core/cssResolver.d.ts.map +1 -1
  22. package/dist/core/cssResolver.js +19 -1
  23. package/dist/core/cssResolver.js.map +1 -1
  24. package/dist/core/islandSsr.d.ts +40 -0
  25. package/dist/core/islandSsr.d.ts.map +1 -0
  26. package/dist/core/islandSsr.js +58 -0
  27. package/dist/core/islandSsr.js.map +1 -0
  28. package/dist/runtime/eventManager.d.ts +56 -0
  29. package/dist/runtime/eventManager.d.ts.map +1 -0
  30. package/dist/runtime/eventManager.js +81 -0
  31. package/dist/runtime/eventManager.js.map +1 -0
  32. package/dist/runtime/hydrationDiff.d.ts +28 -0
  33. package/dist/runtime/hydrationDiff.d.ts.map +1 -0
  34. package/dist/runtime/hydrationDiff.js +53 -0
  35. package/dist/runtime/hydrationDiff.js.map +1 -0
  36. package/dist/runtime/i18nCore.d.ts.map +1 -1
  37. package/dist/runtime/i18nCore.js.map +1 -1
  38. package/dist/runtime/islands.d.ts +18 -8
  39. package/dist/runtime/islands.d.ts.map +1 -1
  40. package/dist/runtime/islands.js +19 -8
  41. package/dist/runtime/islands.js.map +1 -1
  42. package/dist/vite/vueAlias.d.ts +1 -1
  43. package/dist/vite/vueAlias.d.ts.map +1 -1
  44. package/dist/vite/vueAlias.js +1 -1
  45. package/dist/vite/vueAlias.js.map +1 -1
  46. package/package.json +22 -6
package/README.md CHANGED
@@ -1,19 +1,39 @@
1
- [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/Q5Q816Z9WN)
2
-
3
- # MageObsidian JS Utils
1
+ # mage-obsidian โ€” JS Build Engine
4
2
 
3
+ [![npm version](https://img.shields.io/npm/v/mage-obsidian.svg?style=flat-square)](https://www.npmjs.com/package/mage-obsidian)
4
+ [![CI](https://github.com/mage-obsidian/js-package-utils/actions/workflows/ci.yml/badge.svg)](https://github.com/mage-obsidian/js-package-utils/actions/workflows/ci.yml)
5
5
  [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://opensource.org/licenses/MIT)
6
6
 
7
- This repository hosts js utils for the MageObsidian project.
7
+ [![Star MageObsidian](https://img.shields.io/github/stars/mage-obsidian/module-modern-frontend?style=flat-square&label=Star%20the%20core%20repo&logo=github)](https://github.com/mage-obsidian/module-modern-frontend)
8
+
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)
10
+
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.
12
+
13
+ ## What it does
14
+
15
+ - **Theme inheritance resolution** โ€” merges module web assets with theme and parent-theme overrides into the final set of JS/Vue/CSS entries, Magento-style.
16
+ - **Precompilation** โ€” generates per-theme `precompiled.js` / `precompiled.css` consumed as Vite inputs.
17
+ - **JS interceptors** โ€” a port of Magento's plugin system (`before`/`around`/`after`, `sortOrder`) implemented as a Vite plugin with virtual modules, so a module can customize another module's JS without patching its source.
18
+ - **`mage-obsidian:build-themes`** โ€” the CLI that reads the config contract generated by the PHP side and runs `vite build` / dev server per theme.
19
+
20
+ ## Usage
21
+
22
+ You normally don't install this package directly โ€” it comes with the [Vite harness](https://github.com/mage-obsidian/component-modern-frontend):
23
+
24
+ ```bash
25
+ composer require mage-obsidian/component-modern-frontend
26
+ pnpm --prefix vite install
27
+ ```
28
+
29
+ See the [documentation](https://mage-obsidian.jeanmarcos.dev/) for theme/module configuration (`theme.config.js`, `module.config.ts`, interceptors and more).
8
30
 
9
- ## Related Repositories
31
+ ## Development
10
32
 
11
- - [MageObsidian Modern Frontend](https://github.com/mage-obsidian/module-modern-frontend)
12
- - [MageObsidian Modern Frontend CLI](https://github.com/mage-obsidian/module-modern-frontend-cli)
13
- - [MageObsidian Modern Frontend Component](https://github.com/mage-obsidian/component-modern-frontend)
14
- - [Docs](https://github.com/mage-obsidian/docs)
15
- - [JS Utils](https://github.com/mage-obsidian/js-package-utils)
33
+ ```bash
34
+ npm test # Jest with native ESM
35
+ ```
16
36
 
17
- ## Documentation
37
+ ## Support the project
18
38
 
19
- For more details, visit the [official documentation](https://mage-obsidian.jeanmarcos.dev/).
39
+ If MageObsidian saves you time, consider [buying me a coffee](https://ko-fi.com/Q5Q816Z9WN). โค๏ธ
@@ -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";
@@ -24,8 +25,8 @@ let theme;
24
25
  if (options.devServer) {
25
26
  const selected = selectThemeForDevServer(options.theme, Object.keys(themesConfig), Boolean(process.stdin.isTTY), (themes) => readlineSync.keyInSelect(themes, "Select a theme to serve"));
26
27
  if (!selected) {
27
- console.error(chalk.red("Error: The --theme option is required when using --dev-server. "
28
- + "Pass --theme <Vendor/theme>, or run from an interactive terminal to pick one."));
28
+ console.error(chalk.red("Error: The --theme option is required when using --dev-server. " +
29
+ "Pass --theme <Vendor/theme>, or run from an interactive terminal to pick one."));
29
30
  process.exit(1);
30
31
  }
31
32
  theme = selected;
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"criticalCss.js","sourceRoot":"","sources":["../../src/cli/criticalCss.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,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,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAE7B,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,OAAO,CAAC,KAAK,CACT,4DAA4D,CAC/D,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AACtD,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACjC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,MAAM,aAAa,OAAO,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"criticalCss.js","sourceRoot":"","sources":["../../src/cli/criticalCss.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,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,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AAE7B,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AACtD,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACjC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,MAAM,aAAa,OAAO,EAAE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=islandSsr.d.ts.map
@@ -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":"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"}
@@ -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;AAEF,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"}
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"}
@@ -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"}
@@ -3,6 +3,6 @@ export interface ExtractCriticalOptions {
3
3
  html: string;
4
4
  css: string;
5
5
  }
6
- export declare function extractCritical({ html, css, }: ExtractCriticalOptions): Promise<string>;
6
+ export declare function extractCritical({ html, css }: ExtractCriticalOptions): Promise<string>;
7
7
  export default extractCritical;
8
8
  //# sourceMappingURL=criticalCss.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"criticalCss.d.ts","sourceRoot":"","sources":["../../src/core/criticalCss.ts"],"names":[],"mappings":"AA2BA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACf;AASD,wBAAsB,eAAe,CAAC,EAClC,IAAI,EACJ,GAAG,GACN,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B1C;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"criticalCss.d.ts","sourceRoot":"","sources":["../../src/core/criticalCss.ts"],"names":[],"mappings":"AA2BA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACf;AASD,wBAAsB,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B5F;AAED,eAAe,eAAe,CAAC"}
@@ -20,7 +20,7 @@ export function extractFontFaces(css) {
20
20
  //
21
21
  // Beasties resolves <link> hrefs from disk, so the sheet is written to a temp
22
22
  // dir and the page's stylesheet link is repointed at it.
23
- export async function extractCritical({ html, css, }) {
23
+ export async function extractCritical({ html, css }) {
24
24
  const dir = mkdtempSync(join(tmpdir(), "mo-critical-"));
25
25
  try {
26
26
  const sheet = "sheet.css";
@@ -1 +1 @@
1
- {"version":3,"file":"criticalCss.js","sourceRoot":"","sources":["../../src/core/criticalCss.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,MAAM,aAAa,GAAG,QAAmC,CAAC;AAE1D,MAAM,YAAY,GAAG,yBAAyB,CAAC;AAC/C,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AACpD,MAAM,aAAa,GAAG,wCAAwC,CAAC;AAE/D,iFAAiF;AACjF,8EAA8E;AAC9E,iFAAiF;AACjF,sDAAsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,GAAW;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpD,CAAC;AAOD,2EAA2E;AAC3E,iFAAiF;AACjF,iFAAiF;AACjF,iDAAiD;AACjD,EAAE;AACF,8EAA8E;AAC9E,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAClC,IAAI,EACJ,GAAG,GACkB;IACrB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,WAAW,CAAC;QAC1B,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,sEAAsE;QACtE,sEAAsE;QACtE,wCAAwC;QACxC,MAAM,KAAK,GAAG,IAAI;aACb,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;aAChD,OAAO,CAAC,aAAa,EAAE,gCAAgC,KAAK,IAAI,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC;YAC/B,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,KAAK;YAClB,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACP,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACL,CAAC;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"criticalCss.js","sourceRoot":"","sources":["../../src/core/criticalCss.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,MAAM,aAAa,GAAG,QAAmC,CAAC;AAE1D,MAAM,YAAY,GAAG,yBAAyB,CAAC;AAC/C,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AACpD,MAAM,aAAa,GAAG,wCAAwC,CAAC;AAE/D,iFAAiF;AACjF,8EAA8E;AAC9E,iFAAiF;AACjF,sDAAsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,GAAW;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpD,CAAC;AAOD,2EAA2E;AAC3E,iFAAiF;AACjF,iFAAiF;AACjF,iDAAiD;AACjD,EAAE;AACF,8EAA8E;AAC9E,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAA0B;IACvE,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,WAAW,CAAC;QAC1B,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,sEAAsE;QACtE,sEAAsE;QACtE,wCAAwC;QACxC,MAAM,KAAK,GAAG,IAAI;aACb,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;aAChD,OAAO,CAAC,aAAa,EAAE,gCAAgC,KAAK,IAAI,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC;YAC/B,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,KAAK;YAClB,gBAAgB,EAAE,KAAK;YACvB,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACP,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACL,CAAC;AAED,eAAe,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cssResolver.d.ts","sourceRoot":"","sources":["../../src/core/cssResolver.ts"],"names":[],"mappings":"AAsFA,iBAAe,kBAAkB,CAAC,SAAS,KAAA,mBAmB1C;AAkBD,iBAAe,aAAa,CAAC,SAAS,KAAA,mBA0BrC;AAED,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
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"}
@@ -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 +1 @@
1
- {"version":3,"file":"i18nCore.d.ts","sourceRoot":"","sources":["../../src/runtime/i18nCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,UAAU;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,SAAS;IACf,sBAAsB,CAAC,EAAE,UAAU,CAAC;CACvC;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAGhD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,sBAAsB,CAAC,EAAE,UAAU,CAAC;KACvC;CACJ;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,EAAO,GAAG,MAAM,CAQtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACzC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,OAAO,EAAO,GACrB,MAAM,CAIR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,KAAK,GAAE,SAAS,GAAG,SAA8D,GAClF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAMlD;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,CAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9B,SAAS,GAAE,OAAO,KAAK,GAAG,SAA4D,GACvF,OAAO,CAAC,UAAU,CAAC,CAoBrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAgBD;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI;eACF,MAAM,WAAW,OAAO,EAAE,GAAG,MAAM;CAIjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
1
+ {"version":3,"file":"i18nCore.d.ts","sourceRoot":"","sources":["../../src/runtime/i18nCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,UAAU;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,SAAS;IACf,sBAAsB,CAAC,EAAE,UAAU,CAAC;CACvC;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAGhD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,sBAAsB,CAAC,EAAE,UAAU,CAAC;KACvC;CACJ;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,EAAO,GAAG,MAAM,CAQtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACzC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,OAAO,EAAO,GACrB,MAAM,CAIR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,KAAK,GAAE,SAAS,GAAG,SAA8D,GAClF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAMlD;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,CAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9B,SAAS,GAAE,OAAO,KAAK,GAAG,SAA4D,GACvF,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAgBD;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI;eACF,MAAM,WAAW,OAAO,EAAE,GAAG,MAAM;CAIjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"i18nCore.js","sourceRoot":"","sources":["../../src/runtime/i18nCore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18nCore.js","sourceRoot":"","sources":["../../src/runtime/i18nCore.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,18 @@
1
1
  /**
2
2
  * Framework island runtime โ€” the browser side of `renderVueComponent`.
3
3
  *
4
- * PHP emits an inert marker per component
5
- * (`<div data-mage-island data-component data-props data-strategy>`); this
6
- * module turns each marker into a mounted Vue app. Every island is its own app
7
- * (preserving isolation), but the Vue runtime and the i18n plugin are loaded
8
- * once per page and shared, and "visible" islands hydrate only when they enter
9
- * the viewport โ€” so below-the-fold components cost nothing until scrolled to.
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.js`.
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
- createApp(component: unknown, props?: Record<string, unknown>): AppLike;
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;;;;;;;;;;;;;;GAcG;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,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IACxE,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CACpC;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,CAmB9B;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;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"}
@@ -1,17 +1,18 @@
1
1
  /**
2
2
  * Framework island runtime โ€” the browser side of `renderVueComponent`.
3
3
  *
4
- * PHP emits an inert marker per component
5
- * (`<div data-mage-island data-component data-props data-strategy>`); this
6
- * module turns each marker into a mounted Vue app. Every island is its own app
7
- * (preserving isolation), but the Vue runtime and the i18n plugin are loaded
8
- * once per page and shared, and "visible" islands hydrate only when they enter
9
- * the viewport โ€” so below-the-fold components cost nothing until scrolled to.
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.js`.
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 app = deps.createApp(component, props);
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;;;;;;;;;;;;;;GAcG;AAEH,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAoBzC;;;;;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,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACvB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnB,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"}
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"}
@@ -2,6 +2,6 @@ export interface VueAliasOptions {
2
2
  runtimeOnly?: boolean;
3
3
  production?: boolean;
4
4
  }
5
- export declare function resolveVueAlias({ runtimeOnly, production }?: VueAliasOptions): string;
5
+ export declare function resolveVueAlias({ runtimeOnly, production, }?: VueAliasOptions): string;
6
6
  export default resolveVueAlias;
7
7
  //# sourceMappingURL=vueAlias.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vueAlias.d.ts","sourceRoot":"","sources":["../../src/vite/vueAlias.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD,wBAAgB,eAAe,CAC3B,EAAE,WAAmB,EAAE,UAAkB,EAAE,GAAE,eAAoB,GAClE,MAAM,CAIR;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"vueAlias.d.ts","sourceRoot":"","sources":["../../src/vite/vueAlias.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAMD,wBAAgB,eAAe,CAAC,EAC5B,WAAmB,EACnB,UAAkB,GACrB,GAAE,eAAoB,GAAG,MAAM,CAI/B;AAED,eAAe,eAAe,CAAC"}
@@ -2,7 +2,7 @@
2
2
  // bootstrap never uses โ€” every component is a precompiled SFC. Themes relying
3
3
  // on the in-DOM template escape hatch must keep the full build, so this stays
4
4
  // opt-in per theme.
5
- export function resolveVueAlias({ runtimeOnly = false, production = false } = {}) {
5
+ export function resolveVueAlias({ runtimeOnly = false, production = false, } = {}) {
6
6
  const build = runtimeOnly ? "vue.runtime.esm-browser" : "vue.esm-browser";
7
7
  const ext = production ? ".prod.js" : ".js";
8
8
  return `vue/dist/${build}${ext}`;
@@ -1 +1 @@
1
- {"version":3,"file":"vueAlias.js","sourceRoot":"","sources":["../../src/vite/vueAlias.ts"],"names":[],"mappings":"AAKA,yEAAyE;AACzE,8EAA8E;AAC9E,8EAA8E;AAC9E,oBAAoB;AACpB,MAAM,UAAU,eAAe,CAC3B,EAAE,WAAW,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,KAAsB,EAAE;IAEjE,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC1E,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5C,OAAO,YAAY,KAAK,GAAG,GAAG,EAAE,CAAC;AACrC,CAAC;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"vueAlias.js","sourceRoot":"","sources":["../../src/vite/vueAlias.ts"],"names":[],"mappings":"AAKA,yEAAyE;AACzE,8EAA8E;AAC9E,8EAA8E;AAC9E,oBAAoB;AACpB,MAAM,UAAU,eAAe,CAAC,EAC5B,WAAW,GAAG,KAAK,EACnB,UAAU,GAAG,KAAK,MACD,EAAE;IACnB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC1E,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5C,OAAO,YAAY,KAAK,GAAG,GAAG,EAAE,CAAC;AACrC,CAAC;AAED,eAAe,eAAe,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "mage-obsidian",
3
- "version": "2.4.0",
4
- "description": "Mage Obsidian Ultis",
3
+ "version": "2.5.0",
4
+ "description": "The MageObsidian JS build engine for Magento 2 frontends: theme inheritance resolution, precompilation and JS interceptors for Vite builds.",
5
+ "homepage": "https://mage-obsidian.jeanmarcos.dev/",
6
+ "bugs": {
7
+ "url": "https://github.com/mage-obsidian/js-package-utils/issues"
8
+ },
5
9
  "repository": {
6
10
  "type": "git",
7
11
  "url": "git+https://github.com/mage-obsidian/js-package-utils.git"
@@ -12,14 +16,23 @@
12
16
  "dist"
13
17
  ],
14
18
  "keywords": [
15
- "Magento",
16
- "MageObsidian"
19
+ "magento",
20
+ "magento2",
21
+ "mageobsidian",
22
+ "vite",
23
+ "vue",
24
+ "tailwindcss",
25
+ "frontend",
26
+ "theme",
27
+ "build-tools",
28
+ "esm"
17
29
  ],
18
30
  "author": "Jeanmarcos Juarez",
19
31
  "license": "MIT",
20
32
  "type": "module",
21
33
  "bin": {
22
- "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"
23
36
  },
24
37
  "imports": {
25
38
  "#core/*": "./src/core/*",
@@ -102,7 +115,10 @@
102
115
  "prettier": "^3.8.4",
103
116
  "typescript": "^5.9.3",
104
117
  "typescript-eslint": "^8.61.1",
105
- "vitest": "^3.2.6"
118
+ "vitest": "^4.1.10"
119
+ },
120
+ "overrides": {
121
+ "vite": "^8.1.5"
106
122
  },
107
123
  "scripts": {
108
124
  "build": "tsc -p tsconfig.build.json && node scripts/copy-assets.mjs",