pagiera 0.2.0-alpha.60 → 0.2.0-alpha.62

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 (55) hide show
  1. package/dist/client.d.ts +1 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +13 -0
  4. package/dist/client.js.map +1 -1
  5. package/dist/data.js +64 -6
  6. package/dist/data.js.map +3 -3
  7. package/dist/full-editor.js +1333 -1041
  8. package/dist/full-editor.js.map +4 -4
  9. package/dist/full.css +19 -0
  10. package/dist/internal/app/p/editor/data-modal.d.ts.map +1 -1
  11. package/dist/internal/app/p/editor/data-modal.js +43 -4
  12. package/dist/internal/app/p/editor/data-modal.js.map +1 -1
  13. package/dist/internal/app/p/editor/editor.d.ts.map +1 -1
  14. package/dist/internal/app/p/editor/editor.js +56 -15
  15. package/dist/internal/app/p/editor/editor.js.map +1 -1
  16. package/dist/internal/app/p/editor/inspector.d.ts.map +1 -1
  17. package/dist/internal/app/p/editor/inspector.js +1 -1
  18. package/dist/internal/app/p/editor/inspector.js.map +1 -1
  19. package/dist/internal/app/p/editor/seo-settings.d.ts +21 -0
  20. package/dist/internal/app/p/editor/seo-settings.d.ts.map +1 -0
  21. package/dist/internal/app/p/editor/seo-settings.js +70 -0
  22. package/dist/internal/app/p/editor/seo-settings.js.map +1 -0
  23. package/dist/internal/app/p/editor/ui/settings-nav.d.ts +1 -1
  24. package/dist/internal/app/p/editor/ui/settings-nav.d.ts.map +1 -1
  25. package/dist/internal/app/p/editor/ui/settings-nav.js +2 -1
  26. package/dist/internal/app/p/editor/ui/settings-nav.js.map +1 -1
  27. package/dist/internal/app/p/editor/ui/shell.d.ts +7 -1
  28. package/dist/internal/app/p/editor/ui/shell.d.ts.map +1 -1
  29. package/dist/internal/app/p/editor/ui/shell.js +2 -2
  30. package/dist/internal/app/p/editor/ui/shell.js.map +1 -1
  31. package/dist/internal/lib/data/source.d.ts +9 -0
  32. package/dist/internal/lib/data/source.d.ts.map +1 -1
  33. package/dist/internal/lib/data/source.js +19 -2
  34. package/dist/internal/lib/data/source.js.map +1 -1
  35. package/dist/internal/lib/editor/types.d.ts +21 -0
  36. package/dist/internal/lib/editor/types.d.ts.map +1 -1
  37. package/dist/internal/lib/editor/types.js.map +1 -1
  38. package/dist/internal/lib/editor/validate.d.ts.map +1 -1
  39. package/dist/internal/lib/editor/validate.js +34 -1
  40. package/dist/internal/lib/editor/validate.js.map +1 -1
  41. package/dist/internal/lib/render/load-data.d.ts +3 -1
  42. package/dist/internal/lib/render/load-data.d.ts.map +1 -1
  43. package/dist/internal/lib/render/load-data.js +9 -4
  44. package/dist/internal/lib/render/load-data.js.map +1 -1
  45. package/dist/internal/lib/render/seo.d.ts +26 -0
  46. package/dist/internal/lib/render/seo.d.ts.map +1 -0
  47. package/dist/internal/lib/render/seo.js +64 -0
  48. package/dist/internal/lib/render/seo.js.map +1 -0
  49. package/dist/runtime.d.ts +8 -0
  50. package/dist/runtime.js +5 -2
  51. package/dist/runtime.js.map +3 -3
  52. package/dist/server.d.ts +16 -1
  53. package/dist/server.js +180 -28
  54. package/dist/server.js.map +4 -4
  55. package/package.json +1 -1
package/dist/client.d.ts CHANGED
@@ -35,6 +35,7 @@ export declare function createPagieraClient(options?: PagieraClientOptions): {
35
35
  restoreRevision: (id: string, revisionId: string) => Promise<any>;
36
36
  previewSource: (source: unknown, sampleQuery: string) => Promise<any>;
37
37
  compileCode: (source: string) => Promise<any>;
38
+ uploadImage: (file: File) => Promise<string>;
38
39
  mcp: (request: {
39
40
  action: "list" | "inspect";
40
41
  id?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACnC,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IACb,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAxC,OAAO,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM;CAIvD;AAmFD,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB;yBAOzC,MAAM;uBACR,MAAM;;uBAEN,MAAM,YAAY,OAAO,mBAAmB,MAAM;2BAC9C,MAAM,QAAQ,MAAM;yBACtB,MAAM,QAAQ,MAAM,QAAQ,MAAM;4BAC/B,MAAM,QAAQ,MAAM,QAAQ,MAAM;yBACrC,MAAM;sCACO,MAAM,eAAe,MAAM;iCAChC,OAAO,eAAe,MAAM;gCAC7B,MAAM;kCACJ,MAAM,gBAAgB,OAAO,EAAE;4CACrB,MAAM,0BAA0B,MAAM;mCAC/C,MAAM,aAAa,MAAM;0BAClC,MAAM;4BACJ,MAAM;4BACN,MAAM;8BACJ,MAAM,cAAc,MAAM;gCAExB,OAAO,eAAe,MAAM;8BAC9B,MAAM;uBACb;YAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE;4BACtC,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,WAAW,WAAW;;EAIhG"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACnC,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IACb,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAxC,OAAO,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM;CAIvD;AAmFD,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB;yBAOzC,MAAM;uBACR,MAAM;;uBAEN,MAAM,YAAY,OAAO,mBAAmB,MAAM;2BAC9C,MAAM,QAAQ,MAAM;yBACtB,MAAM,QAAQ,MAAM,QAAQ,MAAM;4BAC/B,MAAM,QAAQ,MAAM,QAAQ,MAAM;yBACrC,MAAM;sCACO,MAAM,eAAe,MAAM;iCAChC,OAAO,eAAe,MAAM;gCAC7B,MAAM;kCACJ,MAAM,gBAAgB,OAAO,EAAE;4CACrB,MAAM,0BAA0B,MAAM;mCAC/C,MAAM,aAAa,MAAM;0BAClC,MAAM;4BACJ,MAAM;4BACN,MAAM;8BACJ,MAAM,cAAc,MAAM;gCAExB,OAAO,eAAe,MAAM;8BAC9B,MAAM;4BAEF,IAAI;uBAef;YAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE;4BACtC,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,WAAW,WAAW;;EAIhG"}
package/dist/client.js CHANGED
@@ -111,6 +111,19 @@ export function createPagieraClient(options = {}) {
111
111
  restoreRevision: (id, revisionId) => call(`/pages/${id}/revisions/${revisionId}/restore`, "POST"),
112
112
  previewSource: (source, sampleQuery) => call("/data/preview", "POST", { source, sampleQuery }),
113
113
  compileCode: (source) => call("/code/compile", "POST", { source }),
114
+ // The file goes up as the raw body; the document keeps the URL.
115
+ uploadImage: async (file) => {
116
+ const response = await fetcher(`${base}/assets`, {
117
+ method: "POST",
118
+ headers: { "Content-Type": file.type || "application/octet-stream" },
119
+ body: file,
120
+ });
121
+ const body = await response.json().catch(() => null);
122
+ if (!response.ok || typeof body?.url !== "string") {
123
+ throw new PagieraRequestError(body?.error ?? `The image could not be uploaded (${response.status}).`, response.status);
124
+ }
125
+ return body.url;
126
+ },
114
127
  mcp: (request) => call("/mcp", "POST", request),
115
128
  generate: (request, onEvent, signal) => streamAi(fetcher, `${base}/ai`, request, onEvent, signal),
116
129
  },
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/data.js CHANGED
@@ -55,8 +55,11 @@ function assertFetchableUrl(raw, allowPrivateHosts) {
55
55
  if (host === "[::]" || /^\[::ffff:/i.test(host)) refuse("Requests to private addresses are not allowed.");
56
56
  return url;
57
57
  }
58
+ function pathSteps(path) {
59
+ return path.trim().replace(/^\$/, "").replace(/\[\s*(?:"([^"]*)"|'([^']*)'|([^\]]*))\s*\]/g, (_, a, b, c) => `.${a ?? b ?? c}`).split(".").map((s) => s.trim()).filter(Boolean);
60
+ }
58
61
  function selectPath(payload, path) {
59
- const steps = path.split(".").map((s) => s.trim()).filter(Boolean);
62
+ const steps = pathSteps(path);
60
63
  let cursor = payload;
61
64
  for (const step of steps) {
62
65
  if (cursor === null || typeof cursor !== "object") return void 0;
@@ -151,6 +154,12 @@ async function loadSource(source, { revalidate = DEFAULT_REVALIDATE, context = E
151
154
  const keys = [...new Set(rows.flatMap((row) => Object.keys(row)))].sort();
152
155
  return { rows, keys };
153
156
  }
157
+ function readBinding(row, path) {
158
+ const value = selectPath(row, path);
159
+ if (value === null || value === void 0) return "";
160
+ if (typeof value === "object") return "";
161
+ return String(value);
162
+ }
154
163
  function resolveTokens(value, context) {
155
164
  return value.replace(/\{\{\s*([a-zA-Z0-9_.]+)\s*\}\}/g, (_, token) => {
156
165
  if (token === "WINDOW_URL") return context.origin?.replace(/\/$/, "") ?? "";
@@ -202,10 +211,11 @@ var PageDataNotFoundError = class extends Error {
202
211
  this.name = "PageDataNotFoundError";
203
212
  }
204
213
  };
205
- async function loadPageData(elements, sources, options) {
206
- const used = new Set(
207
- elements.filter((el) => el.sourceId).map((el) => el.sourceId)
208
- );
214
+ async function loadPageData(elements, sources, options, alsoLoad = []) {
215
+ const used = /* @__PURE__ */ new Set([
216
+ ...elements.filter((el) => el.sourceId).map((el) => el.sourceId),
217
+ ...alsoLoad.filter((id) => Boolean(id))
218
+ ]);
209
219
  const wanted = sources.filter((source) => used.has(source.id) && source.url);
210
220
  if (wanted.length === 0) return {};
211
221
  const results = await Promise.all(
@@ -227,8 +237,56 @@ async function loadPageData(elements, sources, options) {
227
237
  );
228
238
  return Object.fromEntries(results);
229
239
  }
240
+
241
+ // src/internal/lib/render/bind.ts
242
+ var PAGE_TOKEN = /\{\{\s*(query|params|page)\.([a-zA-Z0-9_]+)\s*\}\}/g;
243
+ function bindPageContext(value, context) {
244
+ if (!value || !context || !value.includes("{{")) return value;
245
+ return value.replace(PAGE_TOKEN, (_match, namespace, key) => {
246
+ if (namespace === "query") return context.query?.[key] ?? "";
247
+ if (namespace === "params") return context.params?.[key] ?? "";
248
+ return key === "slug" ? context.page?.slug ?? "" : "";
249
+ });
250
+ }
251
+
252
+ // src/internal/lib/render/seo.ts
253
+ var MAX_TITLE = 160;
254
+ var MAX_DESCRIPTION = 320;
255
+ function plain(value, max) {
256
+ const text = value.replace(/<[^>]*>/g, " ").replace(/&nbsp;/g, " ").replace(/\s+/g, " ").trim();
257
+ return text.length > max ? `${text.slice(0, max - 1).trimEnd()}\u2026` : text;
258
+ }
259
+ function fill(template, row, context) {
260
+ if (!template) return "";
261
+ const withPage = bindPageContext(template, context);
262
+ if (!withPage.includes("{{")) return withPage;
263
+ if (!row) return "";
264
+ return withPage.replace(/{{\s*([^{}]+?)\s*}}/g, (_match, path) => readBinding(row, path));
265
+ }
266
+ function address(value) {
267
+ const trimmed = value.trim();
268
+ if (/^https?:\/\/[^\s"'<>]+$/i.test(trimmed)) return trimmed;
269
+ if (/^\/[^\s"'<>]*$/.test(trimmed) && !trimmed.startsWith("//")) return trimmed;
270
+ return void 0;
271
+ }
272
+ function resolvePageSeo(page, data = {}, context) {
273
+ const seo = page.rootStyle?.seo ?? {};
274
+ const row = seo.sourceId ? data[seo.sourceId]?.[0] : void 0;
275
+ const title = plain(fill(seo.title, row, context), MAX_TITLE) || plain(page.name ?? "", MAX_TITLE);
276
+ const description = plain(fill(seo.description, row, context), MAX_DESCRIPTION) || void 0;
277
+ const image = address(fill(seo.image, row, context));
278
+ const canonical = address(fill(seo.canonical, row, context));
279
+ return {
280
+ title,
281
+ ...description ? { description } : {},
282
+ ...image ? { image } : {},
283
+ ...canonical ? { canonical } : {},
284
+ noindex: seo.noindex === true
285
+ };
286
+ }
230
287
  export {
231
288
  PageDataNotFoundError,
232
- loadPageData
289
+ loadPageData,
290
+ resolvePageSeo
233
291
  };
234
292
  //# sourceMappingURL=data.js.map