@apex-stack/core 0.1.16 → 0.1.17

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.
@@ -5,7 +5,7 @@ import {
5
5
  renderIslandsPage,
6
6
  renderPage,
7
7
  scanPages
8
- } from "./chunk-YO4UXWIY.js";
8
+ } from "./chunk-7GPCNGGO.js";
9
9
  import "./chunk-MZVLRU3R.js";
10
10
 
11
11
  // src/commands/build.ts
@@ -154,9 +154,26 @@ function storesInitialState(stores) {
154
154
 
155
155
  // src/dev/renderPage.ts
156
156
  import { renderComponent, stateIsland } from "@apex-stack/kit";
157
+ function escAttr(s) {
158
+ return String(s).replace(
159
+ /[&<>"]/g,
160
+ (c) => c === "&" ? "&amp;" : c === "<" ? "&lt;" : c === ">" ? "&gt;" : "&quot;"
161
+ );
162
+ }
163
+ function renderHead(head) {
164
+ const parts = [`<title>${head?.title ? escAttr(head.title) : "Apex JS"}</title>`];
165
+ for (const m of head?.meta ?? []) {
166
+ parts.push(`<meta ${Object.entries(m).map(([k, v]) => `${k}="${escAttr(v)}"`).join(" ")} />`);
167
+ }
168
+ for (const l of head?.link ?? []) {
169
+ parts.push(`<link ${Object.entries(l).map(([k, v]) => `${k}="${escAttr(v)}"`).join(" ")} />`);
170
+ }
171
+ return parts.join("\n ");
172
+ }
157
173
  async function renderPage(opts) {
158
174
  const mod = await opts.loadModule(opts.pageId);
159
175
  const loaderData = await mod.loader({ params: opts.params ?? {}, url: opts.url }) ?? {};
176
+ const head = mod.head ? await mod.head({ data: loaderData, params: opts.params ?? {}, url: opts.url }) : void 0;
160
177
  const stores = opts.stores ?? [];
161
178
  const { html } = renderComponent({
162
179
  template: mod.template,
@@ -175,11 +192,21 @@ async function renderPage(opts) {
175
192
  pageId: opts.pageId,
176
193
  clientHref: opts.clientHref,
177
194
  storeIds: stores.map((s) => s.id),
178
- appCss: opts.appCss
195
+ appCss: opts.appCss,
196
+ headTags: renderHead(head)
179
197
  });
180
198
  return opts.transformHtml ? opts.transformHtml(opts.url, doc) : doc;
181
199
  }
182
- function shell({ body, island, css, pageId, clientHref, storeIds = [], appCss }) {
200
+ function shell({
201
+ body,
202
+ island,
203
+ css,
204
+ pageId,
205
+ clientHref,
206
+ storeIds = [],
207
+ appCss,
208
+ headTags = "<title>Apex JS</title>"
209
+ }) {
183
210
  const storeImports = storeIds.map((id, i) => ` import __s${i} from ${JSON.stringify(id)}`).join("\n");
184
211
  const storeRegs = storeIds.map((_, i) => ` Alpine.store(__s${i}.name, __s${i}.factory())`).join("\n");
185
212
  const clientScript = clientHref ? `<script type="module" src="${clientHref}"></script>` : `<script type="module">
@@ -196,7 +223,7 @@ ${storeRegs ? `${storeRegs}
196
223
  <head>
197
224
  <meta charset="utf-8" />
198
225
  <meta name="viewport" content="width=device-width, initial-scale=1" />
199
- <title>Apex JS</title>
226
+ ${headTags}
200
227
  <style>${css}</style>
201
228
  </head>
202
229
  <body>
package/dist/cli.js CHANGED
@@ -109,9 +109,9 @@ var main = defineCommand2({
109
109
  },
110
110
  subCommands: {
111
111
  new: newCommand,
112
- dev: () => import("./dev-PQRMJ7Z4.js").then((m) => m.devCommand),
113
- build: () => import("./build-UDFLTWY5.js").then((m) => m.buildCommand),
114
- start: () => import("./start-EYEWMZXS.js").then((m) => m.startCommand),
112
+ dev: () => import("./dev-WS52CGSE.js").then((m) => m.devCommand),
113
+ build: () => import("./build-KJF4LJWP.js").then((m) => m.buildCommand),
114
+ start: () => import("./start-XYVCDMPJ.js").then((m) => m.startCommand),
115
115
  make: () => import("./make-62PPHZQY.js").then((m) => m.makeCommand),
116
116
  migrate: () => import("./migrate-NOGFOFV2.js").then((m) => m.migrateCommand),
117
117
  mcp: () => import("./mcp-DL4J6JFJ.js").then((m) => m.mcpCommand)
@@ -20,7 +20,7 @@ var devCommand = defineCommand({
20
20
  process.stdout.write(banner());
21
21
  const sp = spinner(`Starting dev server${args.islands ? " (islands mode)" : ""}\u2026`);
22
22
  try {
23
- const { startDevServer } = await import("./server-GFQQABB4.js");
23
+ const { startDevServer } = await import("./server-5QQGUF3R.js");
24
24
  const { port: actual } = await startDevServer({ root, port, islands: Boolean(args.islands) });
25
25
  sp.succeed("Dev server ready");
26
26
  ready([
@@ -13,7 +13,7 @@ import {
13
13
  renderIslandsPage,
14
14
  renderPage,
15
15
  scanPages
16
- } from "./chunk-YO4UXWIY.js";
16
+ } from "./chunk-7GPCNGGO.js";
17
17
  import "./chunk-MZVLRU3R.js";
18
18
 
19
19
  // src/dev/server.ts
@@ -9,7 +9,7 @@ import {
9
9
  matchRoute,
10
10
  renderIslandsPage,
11
11
  renderPage
12
- } from "./chunk-YO4UXWIY.js";
12
+ } from "./chunk-7GPCNGGO.js";
13
13
  import "./chunk-MZVLRU3R.js";
14
14
 
15
15
  // src/commands/start.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apex-stack/core",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "description": "The full-stack meta-framework for Alpine.js — CLI and runtime",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -46,7 +46,7 @@
46
46
  "vite": "^6.0.7",
47
47
  "zod": "^4.4.3",
48
48
  "@apex-stack/kit": "0.1.4",
49
- "@apex-stack/vite": "0.1.4"
49
+ "@apex-stack/vite": "0.1.5"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "alpinejs": "^3.14.0"