@zorgo/next 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/seo.d.mts CHANGED
@@ -1,12 +1,10 @@
1
- import { MenuItem as MenuItem$1, Category, Component as Component$1, Rule as Rule$1 } from '../interfaces';
2
-
3
- interface Menu {
4
- items: MenuItem$1[];
5
- categories: Category[];
6
- components: Component$1[];
7
- rules: Rule$1[];
1
+ interface Category {
2
+ category_id: number;
3
+ name: string;
4
+ is_catering?: boolean;
5
+ rules: Rule[];
6
+ active_promo_id?: number;
8
7
  }
9
-
10
8
  interface ItemVariant {
11
9
  item_id: number;
12
10
  name: string;
@@ -82,6 +80,13 @@ interface RuleComponent {
82
80
  serving_weight?: number;
83
81
  }
84
82
 
83
+ interface Menu {
84
+ items: MenuItem[];
85
+ categories: Category[];
86
+ components: Component[];
87
+ rules: Rule[];
88
+ }
89
+
85
90
  /** Franchise-level facts for the Restaurant node. Everything but `name` is
86
91
  * optional so the schema degrades gracefully when a field is missing. */
87
92
  interface RestaurantInfo {
package/dist/seo.d.ts CHANGED
@@ -1,12 +1,10 @@
1
- import { MenuItem as MenuItem$1, Category, Component as Component$1, Rule as Rule$1 } from '../interfaces';
2
-
3
- interface Menu {
4
- items: MenuItem$1[];
5
- categories: Category[];
6
- components: Component$1[];
7
- rules: Rule$1[];
1
+ interface Category {
2
+ category_id: number;
3
+ name: string;
4
+ is_catering?: boolean;
5
+ rules: Rule[];
6
+ active_promo_id?: number;
8
7
  }
9
-
10
8
  interface ItemVariant {
11
9
  item_id: number;
12
10
  name: string;
@@ -82,6 +80,13 @@ interface RuleComponent {
82
80
  serving_weight?: number;
83
81
  }
84
82
 
83
+ interface Menu {
84
+ items: MenuItem[];
85
+ categories: Category[];
86
+ components: Component[];
87
+ rules: Rule[];
88
+ }
89
+
85
90
  /** Franchise-level facts for the Restaurant node. Everything but `name` is
86
91
  * optional so the schema degrades gracefully when a field is missing. */
87
92
  interface RestaurantInfo {
package/dist/server.js CHANGED
@@ -1,459 +1 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/server.ts
31
- var server_exports = {};
32
- __export(server_exports, {
33
- SiteTokenError: () => SiteTokenError,
34
- fetchSiteToken: () => fetchSiteToken,
35
- runPrebuild: () => runPrebuild
36
- });
37
- module.exports = __toCommonJS(server_exports);
38
- var import_fs = require("fs");
39
- var import_path = __toESM(require("path"));
40
- var import_env = require("@next/env");
41
- var import_zod = require("zod");
42
-
43
- // src/seo.ts
44
- function priceString(cents) {
45
- return (cents / 100).toFixed(2);
46
- }
47
- function variantOffer(variant) {
48
- return {
49
- "@type": "Offer",
50
- price: priceString(variant.display_price ?? variant.price),
51
- priceCurrency: "USD"
52
- };
53
- }
54
- function menuItemNode(item) {
55
- const node = {
56
- "@type": "MenuItem",
57
- name: item.name
58
- };
59
- if (item.description) node.description = item.description;
60
- const offers = item.variants.map(variantOffer);
61
- if (offers.length === 1) node.offers = offers[0];
62
- else if (offers.length > 1) node.offers = offers;
63
- return node;
64
- }
65
- function buildRestaurantJsonLd(menu2, info) {
66
- const hasMenuSection = menu2.categories.map((category) => {
67
- const section = {
68
- "@type": "MenuSection",
69
- name: category.name
70
- };
71
- const items = menu2.items.filter((item) => item.category_id === category.category_id).map(menuItemNode);
72
- if (items.length) section.hasMenuItem = items;
73
- return section;
74
- });
75
- const restaurant = {
76
- "@context": "https://schema.org",
77
- "@type": "Restaurant",
78
- name: info.name
79
- };
80
- if (info.url) restaurant.url = info.url;
81
- if (info.image) restaurant.image = info.image;
82
- if (info.description) restaurant.description = info.description;
83
- if (info.servesCuisine?.length) restaurant.servesCuisine = info.servesCuisine;
84
- restaurant.hasMenu = {
85
- "@type": "Menu",
86
- name: "Menu",
87
- hasMenuSection
88
- };
89
- return restaurant;
90
- }
91
-
92
- // src/server.ts
93
- function apiBaseUrl() {
94
- return process.env.NEXT_PUBLIC_API_BASE_URL ?? "http://localhost:3000";
95
- }
96
- var SiteTokenError = class extends Error {
97
- reason;
98
- constructor(reason, message, options) {
99
- super(message, options);
100
- this.name = "SiteTokenError";
101
- this.reason = reason;
102
- }
103
- };
104
- async function fetchSiteToken() {
105
- const secret = process.env.ZORGO_SITE_SECRET;
106
- if (!secret) {
107
- throw new SiteTokenError(
108
- "missing-secret",
109
- "ZORGO_SITE_SECRET is not set. Add it to this site's .env."
110
- );
111
- }
112
- const url = `${apiBaseUrl()}/auth/site-token`;
113
- let res;
114
- try {
115
- res = await fetch(url, {
116
- method: "POST",
117
- headers: { "x-zorgo-site-secret": secret }
118
- });
119
- } catch (cause) {
120
- throw new SiteTokenError(
121
- "unreachable",
122
- `Could not reach the site-token endpoint at ${url}. Check NEXT_PUBLIC_API_BASE_URL and that the API is running.`,
123
- { cause }
124
- );
125
- }
126
- if (!res.ok) {
127
- const body = (await res.text().catch(() => "")).slice(0, 200);
128
- throw new SiteTokenError(
129
- "rejected",
130
- `The site-token endpoint rejected the request (${res.status} ${res.statusText}) at ${url}. This usually means ZORGO_SITE_SECRET is wrong for this environment.${body ? ` Response: ${body}` : ""}`
131
- );
132
- }
133
- const { token } = await res.json();
134
- if (!token) {
135
- throw new SiteTokenError(
136
- "rejected",
137
- `The site-token endpoint returned 200 but no token at ${url}.`
138
- );
139
- }
140
- return token;
141
- }
142
- var BrandingSchema = import_zod.z.object({
143
- backgroundBase: import_zod.z.string().default("#F5F5F5"),
144
- primary: import_zod.z.string().default("#3264FF"),
145
- accent: import_zod.z.string().default("#9696FF"),
146
- fontFamily: import_zod.z.string().default("Inter")
147
- // Google Font family name
148
- }).prefault({});
149
- var FranchiseSchema = import_zod.z.object({
150
- name: import_zod.z.string().nullish().transform((v) => v ?? process.env.ZORGO_PROJECT_NAME ?? "Restaurant"),
151
- site_url: import_zod.z.string().nullish().transform((v) => v ?? void 0)
152
- }).prefault({});
153
- var HoursSchema = import_zod.z.array(import_zod.z.unknown()).prefault([]);
154
- var MenuSchema = import_zod.z.object({
155
- items: import_zod.z.array(import_zod.z.unknown()).default([]),
156
- categories: import_zod.z.array(import_zod.z.unknown()).default([]),
157
- components: import_zod.z.array(import_zod.z.unknown()).default([]),
158
- rules: import_zod.z.array(import_zod.z.unknown()).default([])
159
- });
160
- async function fetchData(endpoint, token, schema) {
161
- try {
162
- const res = await fetch(`${apiBaseUrl()}${endpoint}`, {
163
- headers: { Authorization: `Bearer ${token}` }
164
- });
165
- if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
166
- const body = await res.json();
167
- return schema.parse(body?.data ?? body);
168
- } catch (err) {
169
- console.error(`prebuild: ${endpoint} failed, using defaults:`, err);
170
- return schema.parse(void 0);
171
- }
172
- }
173
- var FONT_ON_LIGHT = "#0a0a0a";
174
- var FONT_ON_DARK = "#f5f5f5";
175
- var BACKGROUND_SURFACE_DELTA = 15;
176
- var BACKGROUND_TEMPERATURE_BIAS = 8;
177
- function parseHexRgb(background) {
178
- const hex = background.trim().replace(/^#/, "");
179
- const full = hex.length === 3 ? hex.split("").map((c) => c + c).join("") : hex;
180
- if (full.length !== 6 || Number.isNaN(Number.parseInt(full, 16))) {
181
- return null;
182
- }
183
- return {
184
- r: Number.parseInt(full.slice(0, 2), 16),
185
- g: Number.parseInt(full.slice(2, 4), 16),
186
- b: Number.parseInt(full.slice(4, 6), 16)
187
- };
188
- }
189
- function toHex({ r, g, b }) {
190
- return `#${[r, g, b].map((c) => c.toString(16).padStart(2, "0")).join("")}`;
191
- }
192
- function relativeLuminance({ r, g, b }) {
193
- return (0.299 * r + 0.587 * g + 0.114 * b) / 255;
194
- }
195
- function temperatureBiasFor({ r, g, b }) {
196
- return Math.round(BACKGROUND_TEMPERATURE_BIAS * relativeLuminance({ r, g, b }));
197
- }
198
- function deriveFontColor(background) {
199
- const rgb = parseHexRgb(background);
200
- if (!rgb) return FONT_ON_LIGHT;
201
- return relativeLuminance(rgb) > 0.5 ? FONT_ON_LIGHT : FONT_ON_DARK;
202
- }
203
- function deriveElevatedBackground(background) {
204
- const rgb = parseHexRgb(background);
205
- if (!rgb) return background;
206
- const bias = temperatureBiasFor(rgb);
207
- const warm = Math.round(bias / 4);
208
- return toHex({
209
- r: Math.min(255, rgb.r + BACKGROUND_SURFACE_DELTA + warm),
210
- g: Math.min(255, rgb.g + BACKGROUND_SURFACE_DELTA),
211
- b: Math.min(255, rgb.b + BACKGROUND_SURFACE_DELTA - bias)
212
- });
213
- }
214
- function deriveRecessedBackground(background) {
215
- const rgb = parseHexRgb(background);
216
- if (!rgb) return background;
217
- const bias = temperatureBiasFor(rgb);
218
- const cool = Math.round(bias / 4);
219
- return toHex({
220
- r: Math.max(0, rgb.r - BACKGROUND_SURFACE_DELTA - cool),
221
- g: Math.max(0, rgb.g - BACKGROUND_SURFACE_DELTA),
222
- b: Math.max(0, rgb.b - BACKGROUND_SURFACE_DELTA + bias)
223
- });
224
- }
225
- function writeWranglerToml() {
226
- const name = process.env.ZORGO_PROJECT_NAME ?? "zorgo-site";
227
- const siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? "";
228
- const apiUrl = process.env.NEXT_PUBLIC_API_BASE_URL ?? "";
229
- const baseUrl = process.env.NEXT_PUBLIC_BASE_URL ?? siteUrl;
230
- const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL ?? "";
231
- let host;
232
- try {
233
- host = new URL(siteUrl).hostname;
234
- } catch {
235
- host = void 0;
236
- }
237
- const routes = host ? `
238
- [[routes]]
239
- pattern = "${host}"
240
- custom_domain = true
241
-
242
- [[routes]]
243
- pattern = "www.${host}"
244
- custom_domain = true
245
- ` : "";
246
- const vars = {
247
- NEXT_PUBLIC_SUPABASE_URL: supabaseUrl,
248
- NEXT_PUBLIC_API_BASE_URL: apiUrl,
249
- NEXT_PUBLIC_SITE_URL: siteUrl,
250
- NEXT_PUBLIC_BASE_URL: baseUrl
251
- };
252
- const varsBlock = Object.entries(vars).filter(([, value]) => value !== "").map(([key, value]) => `${key} = "${value}"`).join("\n");
253
- const toml = `# AUTO-GENERATED by scripts/prebuild.ts from .env \u2014 do not edit.
254
- name = "${name}"
255
- main = ".open-next/worker.js"
256
- compatibility_date = "2024-09-23"
257
- compatibility_flags = ["nodejs_compat"]
258
-
259
- # Bundles the Cloudflare worker as part of \`wrangler deploy\` (and \`wrangler dev\`),
260
- # so the deploy command stays a plain \`wrangler deploy\`. prebuild (which writes
261
- # this file + lib/generated) must still run first \u2014 on Cloudflare Workers Builds
262
- # that is the project's Build command; locally it is the npm scripts below.
263
- [build]
264
- command = "npx opennextjs-cloudflare build"
265
-
266
- [assets]
267
- directory = ".open-next/assets"
268
- binding = "ASSETS"
269
-
270
- [vars]
271
- ${varsBlock}
272
-
273
- [observability]
274
- enabled = true
275
-
276
- [observability.logs]
277
- enabled = true
278
- invocation_logs = true
279
- ${routes}`;
280
- (0, import_fs.writeFileSync)(import_path.default.join(process.cwd(), "wrangler.toml"), toml);
281
- }
282
- async function logo({ franchiseId, token }) {
283
- const logoResponse = await fetch(
284
- `${apiBaseUrl()}/franchise-info/logo/${franchiseId}`,
285
- { headers: { Authorization: `Bearer ${token}` } }
286
- );
287
- if (!logoResponse.ok) return;
288
- const arrayBuffer = await logoResponse.arrayBuffer();
289
- const buffer = Buffer.from(arrayBuffer);
290
- const outDir = import_path.default.join(process.cwd(), `public/images/`);
291
- (0, import_fs.mkdirSync)(outDir, { recursive: true });
292
- (0, import_fs.writeFileSync)(import_path.default.join(outDir, "logo.png"), buffer);
293
- (0, import_fs.writeFileSync)(import_path.default.join(outDir, "logo.jpg"), buffer);
294
- }
295
- function writeMenuModule(menu2) {
296
- const outDir = import_path.default.join(process.cwd(), `lib/generated/`);
297
- (0, import_fs.mkdirSync)(outDir, { recursive: true });
298
- (0, import_fs.writeFileSync)(
299
- import_path.default.join(outDir, "menu.ts"),
300
- `// AUTO-GENERATED by scripts/prebuild.ts \u2014 do not edit.
301
- import type { Menu } from "@zorgo/next";
302
-
303
- export const menu: Menu = ${JSON.stringify(menu2, null, 2)};
304
- `
305
- );
306
- }
307
- async function menu({ franchiseId, token }) {
308
- const menuResponse = await fetch(
309
- `${apiBaseUrl()}/franchise-info/menu/${franchiseId}`,
310
- { headers: { Authorization: `Bearer ${token}` } }
311
- );
312
- if (!menuResponse.ok) {
313
- throw new Error(
314
- `menu fetch failed ${menuResponse.status}: ${await menuResponse.text()}`
315
- );
316
- }
317
- const body = await menuResponse.json();
318
- const parsed = MenuSchema.parse(body?.data ?? {});
319
- if (parsed.items.length === 0) {
320
- console.warn(
321
- "prebuild: franchise has no menu items yet \u2014 generating an empty menu. Add items in the dashboard and rebuild to populate the storefront."
322
- );
323
- }
324
- writeMenuModule(parsed);
325
- return parsed;
326
- }
327
- async function jsonLd({ franchiseId, token }, menuData) {
328
- const franchise = await fetchData(
329
- `/franchise-info/franchise/${franchiseId}`,
330
- token,
331
- FranchiseSchema
332
- );
333
- const url = franchise.site_url;
334
- const data = buildRestaurantJsonLd(menuData, {
335
- name: franchise.name,
336
- url,
337
- image: url ? `${url}/images/logo.png` : void 0
338
- });
339
- const outDir = import_path.default.join(process.cwd(), `lib/generated/`);
340
- (0, import_fs.mkdirSync)(outDir, { recursive: true });
341
- (0, import_fs.writeFileSync)(
342
- import_path.default.join(outDir, "jsonld.ts"),
343
- `// AUTO-GENERATED by scripts/prebuild.ts \u2014 do not edit.
344
- export const restaurantJsonLd = ${JSON.stringify(data, null, 2)};
345
- `
346
- );
347
- }
348
- async function hours({ franchiseId, token }) {
349
- await fetchData(`/franchise-info/hours/${franchiseId}`, token, HoursSchema);
350
- }
351
- async function styles({ franchiseId, token }) {
352
- const brand = await fetchData(
353
- `/franchise-info/styles/${franchiseId}`,
354
- token,
355
- BrandingSchema
356
- );
357
- const branding = {
358
- ...brand,
359
- backgroundElevated: deriveElevatedBackground(brand.backgroundBase),
360
- backgroundRecessed: deriveRecessedBackground(brand.backgroundBase),
361
- foreground: deriveFontColor(brand.backgroundBase),
362
- primaryForeground: deriveFontColor(brand.primary),
363
- accentForeground: deriveFontColor(brand.accent)
364
- };
365
- const stylesDir = import_path.default.join(process.cwd(), `public/styles/`);
366
- (0, import_fs.mkdirSync)(stylesDir, { recursive: true });
367
- (0, import_fs.writeFileSync)(
368
- import_path.default.join(stylesDir, "styles.json"),
369
- JSON.stringify(branding, null, 2)
370
- );
371
- (0, import_fs.writeFileSync)(
372
- import_path.default.join(process.cwd(), "app", "globals.css"),
373
- buildGlobalsCss(brand)
374
- );
375
- }
376
- function buildGlobalsCss(branding) {
377
- const fontFamilyParam = branding.fontFamily.replace(/ /g, "+");
378
- const foreground = deriveFontColor(branding.backgroundBase);
379
- const primaryForeground = deriveFontColor(branding.primary);
380
- const accentForeground = deriveFontColor(branding.accent);
381
- const backgroundElevated = deriveElevatedBackground(branding.backgroundBase);
382
- const backgroundRecessed = deriveRecessedBackground(branding.backgroundBase);
383
- return `
384
- @import url("https://fonts.googleapis.com/css2?family=${fontFamilyParam}:wght@400;700&display=swap");
385
- @import "tailwindcss";
386
- /* Tailwind v4 skips node_modules; @zorgo/next ships un-obfuscated components so
387
- their class names are scannable here. */
388
- @source "../node_modules/@zorgo/next/dist/components.mjs";
389
-
390
- :root {
391
- --background: ${branding.backgroundBase};
392
- --background-elevated: ${backgroundElevated};
393
- --background-recessed: ${backgroundRecessed};
394
- --foreground: ${foreground};
395
- --primary: ${branding.primary};
396
- --primary-foreground: ${primaryForeground};
397
- --accent: ${branding.accent};
398
- --accent-foreground: ${accentForeground};
399
- --font-sans: "${branding.fontFamily}", sans-serif;
400
- }
401
-
402
- @theme inline {
403
- --color-background: var(--background);
404
- --color-background-elevated: var(--background-elevated);
405
- --color-background-recessed: var(--background-recessed);
406
- --color-foreground: var(--foreground);
407
- --color-primary: var(--primary);
408
- --color-primary-foreground: var(--primary-foreground);
409
- --color-accent: var(--accent);
410
- --color-accent-foreground: var(--accent-foreground);
411
- --font-sans: var(--font-sans);
412
- }
413
-
414
- @layer base {
415
- button,
416
- [type="button"],
417
- [type="submit"],
418
- [type="reset"] {
419
- cursor: pointer;
420
- }
421
-
422
- button:disabled,
423
- [type="button"]:disabled,
424
- [type="submit"]:disabled,
425
- [type="reset"]:disabled {
426
- cursor: not-allowed;
427
- }
428
- }
429
- `;
430
- }
431
- async function runPrebuild() {
432
- console.log("running prebuild script...");
433
- (0, import_env.loadEnvConfig)(process.cwd());
434
- writeWranglerToml();
435
- const token = await fetchSiteToken();
436
- const encodedPayload = token.split(".")[1];
437
- if (!encodedPayload) {
438
- throw new Error("site token is not a well-formed JWT (no payload segment)");
439
- }
440
- const payload = JSON.parse(Buffer.from(encodedPayload, "base64url").toString());
441
- const franchiseId = payload.franchise_ids[0];
442
- const [menuData] = await Promise.all([
443
- menu({ franchiseId, token }),
444
- logo({ franchiseId, token }).catch((err) => console.error("logo failed:", err)),
445
- hours({ franchiseId, token }).catch((err) => console.error("hours failed:", err)),
446
- styles({ franchiseId, token }).catch((err) => console.error("styles failed:", err))
447
- ]);
448
- await jsonLd({ franchiseId, token }, menuData).catch(
449
- (err) => console.error("jsonLd failed:", err)
450
- );
451
- console.log("prebuild script completed");
452
- }
453
- // Annotate the CommonJS export names for ESM import in node:
454
- 0 && (module.exports = {
455
- SiteTokenError,
456
- fetchSiteToken,
457
- runPrebuild
458
- });
459
- //# sourceMappingURL=server.js.map
1
+ 'use strict';const a0_0x2f09e2=a0_0x554f;(function(_0x4217c9,_0x10d74a){const _0x519fc3=a0_0x554f,_0x1040e2=_0x4217c9();while(!![]){try{const _0x3ca004=parseInt(_0x519fc3(0xc5))/0x1+parseInt(_0x519fc3(0x113))/0x2*(parseInt(_0x519fc3(0xfe))/0x3)+-parseInt(_0x519fc3(0xaa))/0x4+-parseInt(_0x519fc3(0xad))/0x5+-parseInt(_0x519fc3(0xde))/0x6*(parseInt(_0x519fc3(0x137))/0x7)+-parseInt(_0x519fc3(0x117))/0x8+parseInt(_0x519fc3(0x13d))/0x9;if(_0x3ca004===_0x10d74a)break;else _0x1040e2['push'](_0x1040e2['shift']());}catch(_0x3a7471){_0x1040e2['push'](_0x1040e2['shift']());}}}(a0_0x4cc3,0x5b130));var __create=Object[a0_0x2f09e2(0xe0)],__defProp=Object[a0_0x2f09e2(0xdf)],__getOwnPropDesc=Object['getOwnPropertyDescriptor'],__getOwnPropNames=Object['getOwnPropertyNames'],__getProtoOf=Object[a0_0x2f09e2(0x14a)],__hasOwnProp=Object[a0_0x2f09e2(0xd7)]['hasOwnProperty'],__export=(_0x9ba453,_0x92a0bc)=>{const _0x1a6652=a0_0x2f09e2,_0x5f1e0f={'nCMoy':function(_0x333564,_0x39cd85,_0x1d53db,_0x3dca98){return _0x333564(_0x39cd85,_0x1d53db,_0x3dca98);}};for(var _0x3fd570 in _0x92a0bc)_0x5f1e0f[_0x1a6652(0x138)](__defProp,_0x9ba453,_0x3fd570,{'get':_0x92a0bc[_0x3fd570],'enumerable':!![]});},__copyProps=(_0x234e1c,_0x4fd5f3,_0x283e3d,_0x2ec414)=>{const _0x5015ba=a0_0x2f09e2,_0x203248={'aJynA':function(_0x2cf2b0,_0x166e46,_0x1e3d77){return _0x2cf2b0(_0x166e46,_0x1e3d77);}};if(_0x4fd5f3&&typeof _0x4fd5f3===_0x5015ba(0x153)||typeof _0x4fd5f3===_0x5015ba(0x11f)){for(let _0x419008 of __getOwnPropNames(_0x4fd5f3))if(!__hasOwnProp[_0x5015ba(0x14d)](_0x234e1c,_0x419008)&&_0x419008!==_0x283e3d)__defProp(_0x234e1c,_0x419008,{'get':()=>_0x4fd5f3[_0x419008],'enumerable':!(_0x2ec414=_0x203248['aJynA'](__getOwnPropDesc,_0x4fd5f3,_0x419008))||_0x2ec414[_0x5015ba(0xcd)]});}return _0x234e1c;},__toESM=(_0x1fac75,_0x1f2db8,_0x38faa7)=>(_0x38faa7=_0x1fac75!=null?__create(__getProtoOf(_0x1fac75)):{},__copyProps(_0x1f2db8||!_0x1fac75||!_0x1fac75[a0_0x2f09e2(0xcb)]?__defProp(_0x38faa7,a0_0x2f09e2(0x13c),{'value':_0x1fac75,'enumerable':!![]}):_0x38faa7,_0x1fac75)),__toCommonJS=_0x50591f=>__copyProps(__defProp({},'__esModule',{'value':!![]}),_0x50591f),server_exports={};__export(server_exports,{'SiteTokenError':()=>SiteTokenError,'fetchSiteToken':()=>fetchSiteToken,'runPrebuild':()=>runPrebuild}),module[a0_0x2f09e2(0xe1)]=__toCommonJS(server_exports);var import_fs=require('fs'),import_path=__toESM(require(a0_0x2f09e2(0x11d))),import_env=require(a0_0x2f09e2(0xa8)),import_zod=require('zod');function priceString(_0x544e46){const _0x53c8be=a0_0x2f09e2,_0x2475d1={'ZDSma':function(_0x39109c,_0x3e1851){return _0x39109c/_0x3e1851;}};return _0x2475d1[_0x53c8be(0xb5)](_0x544e46,0x64)['toFixed'](0x2);}function variantOffer(_0x47b873){const _0x22ab30=a0_0x2f09e2,_0xe5be1={'VrLnO':_0x22ab30(0x104),'eGfGL':'USD'};return{'@type':_0xe5be1[_0x22ab30(0x131)],'price':priceString(_0x47b873[_0x22ab30(0xd4)]??_0x47b873[_0x22ab30(0x126)]),'priceCurrency':_0xe5be1['eGfGL']};}function menuItemNode(_0x57a1e9){const _0x3469e3=a0_0x2f09e2,_0x5caf2d={'MViNF':'MenuItem'},_0x2fa810={'@type':_0x5caf2d['MViNF'],'name':_0x57a1e9[_0x3469e3(0xd1)]};if(_0x57a1e9['description'])_0x2fa810[_0x3469e3(0xbe)]=_0x57a1e9[_0x3469e3(0xbe)];const _0x2c5ba2=_0x57a1e9[_0x3469e3(0x132)][_0x3469e3(0xb3)](variantOffer);if(_0x2c5ba2[_0x3469e3(0x12f)]===0x1)_0x2fa810['offers']=_0x2c5ba2[0x0];else{if(_0x2c5ba2[_0x3469e3(0x12f)]>0x1)_0x2fa810[_0x3469e3(0x110)]=_0x2c5ba2;}return _0x2fa810;}function buildRestaurantJsonLd(_0x3acf20,_0xff5d34){const _0xefff90=a0_0x2f09e2,_0x1906e3={'VwwRu':'Restaurant'},_0x20674e=_0x3acf20[_0xefff90(0xf5)]['map'](_0x1cef69=>{const _0x40d68=_0xefff90,_0x6298c5={'@type':'MenuSection','name':_0x1cef69[_0x40d68(0xd1)]},_0x1cdebb=_0x3acf20['items']['filter'](_0xc4c686=>_0xc4c686[_0x40d68(0x118)]===_0x1cef69[_0x40d68(0x118)])['map'](menuItemNode);if(_0x1cdebb[_0x40d68(0x12f)])_0x6298c5[_0x40d68(0x11e)]=_0x1cdebb;return _0x6298c5;}),_0x4c7aa1={'@context':_0xefff90(0xfa),'@type':_0x1906e3['VwwRu'],'name':_0xff5d34[_0xefff90(0xd1)]};if(_0xff5d34[_0xefff90(0x10e)])_0x4c7aa1[_0xefff90(0x10e)]=_0xff5d34[_0xefff90(0x10e)];if(_0xff5d34[_0xefff90(0xcf)])_0x4c7aa1[_0xefff90(0xcf)]=_0xff5d34[_0xefff90(0xcf)];if(_0xff5d34[_0xefff90(0xbe)])_0x4c7aa1[_0xefff90(0xbe)]=_0xff5d34[_0xefff90(0xbe)];if(_0xff5d34['servesCuisine']?.[_0xefff90(0x12f)])_0x4c7aa1[_0xefff90(0x15a)]=_0xff5d34[_0xefff90(0x15a)];return _0x4c7aa1[_0xefff90(0x143)]={'@type':'Menu','name':_0xefff90(0x150),'hasMenuSection':_0x20674e},_0x4c7aa1;}function apiBaseUrl(){const _0x177c4c=a0_0x2f09e2,_0x2e9fa7={'dZwJj':_0x177c4c(0x101)};return process.env.NEXT_PUBLIC_API_BASE_URL??_0x2e9fa7[_0x177c4c(0x109)];}var SiteTokenError=class extends Error{['reason'];constructor(_0x33feb5,_0x5bb1cc,_0x42c913){const _0x4f8db4=a0_0x2f09e2,_0x4e2f11={'VyPhX':_0x4f8db4(0xcc)};super(_0x5bb1cc,_0x42c913),this['name']=_0x4e2f11[_0x4f8db4(0xff)],this['reason']=_0x33feb5;}};async function fetchSiteToken(){const _0x2f6d19=a0_0x2f09e2,_0x1fb3f0={'tMJPg':function(_0x445f29){return _0x445f29();},'QNzPs':function(_0x52a2f6,_0xca694b,_0xd92a){return _0x52a2f6(_0xca694b,_0xd92a);},'cybbw':_0x2f6d19(0x145),'jkarw':_0x2f6d19(0x10a),'jOUKj':'rejected'},_0x2f18cf=process.env.ZORGO_SITE_SECRET;if(!_0x2f18cf)throw new SiteTokenError(_0x2f6d19(0xf4),_0x2f6d19(0xc2));const _0x5e8097=_0x1fb3f0['tMJPg'](apiBaseUrl)+_0x2f6d19(0x10c);let _0xe2a542;try{_0xe2a542=await _0x1fb3f0[_0x2f6d19(0xd0)](fetch,_0x5e8097,{'method':_0x1fb3f0[_0x2f6d19(0xea)],'headers':{'x-zorgo-site-secret':_0x2f18cf}});}catch(_0x3c1ab3){throw new SiteTokenError(_0x1fb3f0[_0x2f6d19(0xf2)],_0x2f6d19(0xd8)+_0x5e8097+_0x2f6d19(0x123),{'cause':_0x3c1ab3});}if(!_0xe2a542['ok']){const _0x2ac7d2=(await _0xe2a542[_0x2f6d19(0xa7)]()[_0x2f6d19(0x119)](()=>''))[_0x2f6d19(0xaf)](0x0,0xc8);throw new SiteTokenError(_0x1fb3f0[_0x2f6d19(0xdc)],'The\x20site-token\x20endpoint\x20rejected\x20the\x20request\x20('+_0xe2a542[_0x2f6d19(0x136)]+'\x20'+_0xe2a542[_0x2f6d19(0xc8)]+_0x2f6d19(0xb6)+_0x5e8097+'.\x20This\x20usually\x20means\x20ZORGO_SITE_SECRET\x20is\x20wrong\x20for\x20this\x20environment.'+(_0x2ac7d2?_0x2f6d19(0x127)+_0x2ac7d2:''));}const {token:_0x45006f}=await _0xe2a542[_0x2f6d19(0xab)]();if(!_0x45006f)throw new SiteTokenError(_0x2f6d19(0xdb),_0x2f6d19(0x134)+_0x5e8097+'.');return _0x45006f;}function a0_0x554f(_0x3cdacc,_0x551ea2){_0x3cdacc=_0x3cdacc-0xa4;const _0x4cc3e1=a0_0x4cc3();let _0x554f84=_0x4cc3e1[_0x3cdacc];if(a0_0x554f['wWgHNx']===undefined){var _0x17985c=function(_0x540f09){const _0x68ec55='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x270c3d='',_0x4b075e='';for(let _0x2fe6fc=0x0,_0x10e737,_0x498400,_0x35af48=0x0;_0x498400=_0x540f09['charAt'](_0x35af48++);~_0x498400&&(_0x10e737=_0x2fe6fc%0x4?_0x10e737*0x40+_0x498400:_0x498400,_0x2fe6fc++%0x4)?_0x270c3d+=String['fromCharCode'](0xff&_0x10e737>>(-0x2*_0x2fe6fc&0x6)):0x0){_0x498400=_0x68ec55['indexOf'](_0x498400);}for(let _0x2218d3=0x0,_0x9e3742=_0x270c3d['length'];_0x2218d3<_0x9e3742;_0x2218d3++){_0x4b075e+='%'+('00'+_0x270c3d['charCodeAt'](_0x2218d3)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4b075e);};a0_0x554f['MmWUuT']=_0x17985c,a0_0x554f['yylkyu']={},a0_0x554f['wWgHNx']=!![];}const _0xc2bbea=_0x4cc3e1[0x0],_0x3d5fd7=_0x3cdacc+_0xc2bbea,_0x44afe4=a0_0x554f['yylkyu'][_0x3d5fd7];return!_0x44afe4?(_0x554f84=a0_0x554f['MmWUuT'](_0x554f84),a0_0x554f['yylkyu'][_0x3d5fd7]=_0x554f84):_0x554f84=_0x44afe4,_0x554f84;}var BrandingSchema=import_zod['z']['object']({'backgroundBase':import_zod['z']['string']()[a0_0x2f09e2(0x13c)](a0_0x2f09e2(0xa6)),'primary':import_zod['z'][a0_0x2f09e2(0xb4)]()[a0_0x2f09e2(0x13c)](a0_0x2f09e2(0x15c)),'accent':import_zod['z'][a0_0x2f09e2(0xb4)]()['default'](a0_0x2f09e2(0x12c)),'fontFamily':import_zod['z']['string']()[a0_0x2f09e2(0x13c)](a0_0x2f09e2(0xf3))})[a0_0x2f09e2(0x129)]({}),FranchiseSchema=import_zod['z'][a0_0x2f09e2(0x153)]({'name':import_zod['z'][a0_0x2f09e2(0xb4)]()['nullish']()[a0_0x2f09e2(0xac)](_0x214f15=>_0x214f15??process.env.ZORGO_PROJECT_NAME??'Restaurant'),'site_url':import_zod['z'][a0_0x2f09e2(0xb4)]()['nullish']()[a0_0x2f09e2(0xac)](_0x1c798a=>_0x1c798a??void 0x0)})[a0_0x2f09e2(0x129)]({}),HoursSchema=import_zod['z'][a0_0x2f09e2(0x12b)](import_zod['z'][a0_0x2f09e2(0x103)]())['prefault']([]),MenuSchema=import_zod['z'][a0_0x2f09e2(0x153)]({'items':import_zod['z'][a0_0x2f09e2(0x12b)](import_zod['z'][a0_0x2f09e2(0x103)]())[a0_0x2f09e2(0x13c)]([]),'categories':import_zod['z'][a0_0x2f09e2(0x12b)](import_zod['z']['unknown']())[a0_0x2f09e2(0x13c)]([]),'components':import_zod['z'][a0_0x2f09e2(0x12b)](import_zod['z']['unknown']())[a0_0x2f09e2(0x13c)]([]),'rules':import_zod['z'][a0_0x2f09e2(0x12b)](import_zod['z'][a0_0x2f09e2(0x103)]())[a0_0x2f09e2(0x13c)]([])});async function fetchData(_0x5a5985,_0x5242e2,_0x2edc5a){const _0xfebf7b=a0_0x2f09e2,_0x8399e4={'JujEk':function(_0x40b176,_0x2b52da,_0x2da5db){return _0x40b176(_0x2b52da,_0x2da5db);},'YPAxu':function(_0x170722,_0xcaa888){return _0x170722!==_0xcaa888;}};try{const _0x37f8c2=await _0x8399e4['JujEk'](fetch,''+apiBaseUrl()+_0x5a5985,{'headers':{'Authorization':_0xfebf7b(0x106)+_0x5242e2}});if(!_0x37f8c2['ok'])throw new Error(_0x37f8c2[_0xfebf7b(0x136)]+':\x20'+await _0x37f8c2[_0xfebf7b(0xa7)]());const _0x36b720=await _0x37f8c2[_0xfebf7b(0xab)]();return _0x2edc5a['parse'](_0x36b720?.[_0xfebf7b(0xd9)]??_0x36b720);}catch(_0x4dc68e){if(_0x8399e4['YPAxu'](_0xfebf7b(0xe9),'XfbIP'))_0x546651=void 0x0;else return console[_0xfebf7b(0x146)]('prebuild:\x20'+_0x5a5985+_0xfebf7b(0xef),_0x4dc68e),_0x2edc5a[_0xfebf7b(0x155)](void 0x0);}}var FONT_ON_LIGHT=a0_0x2f09e2(0xca),FONT_ON_DARK=a0_0x2f09e2(0xb0),BACKGROUND_SURFACE_DELTA=0xf,BACKGROUND_TEMPERATURE_BIAS=0x8;function parseHexRgb(_0x53d25c){const _0x8e457b=a0_0x2f09e2,_0x2d537a=_0x53d25c[_0x8e457b(0x115)]()[_0x8e457b(0xf8)](/^#/,''),_0x324743=_0x2d537a[_0x8e457b(0x12f)]===0x3?_0x2d537a[_0x8e457b(0xfd)]('')[_0x8e457b(0xb3)](_0x3f4c7b=>_0x3f4c7b+_0x3f4c7b)[_0x8e457b(0xfb)](''):_0x2d537a;if(_0x324743[_0x8e457b(0x12f)]!==0x6||Number[_0x8e457b(0xb2)](Number[_0x8e457b(0xb1)](_0x324743,0x10)))return null;return{'r':Number[_0x8e457b(0xb1)](_0x324743[_0x8e457b(0xaf)](0x0,0x2),0x10),'g':Number[_0x8e457b(0xb1)](_0x324743[_0x8e457b(0xaf)](0x2,0x4),0x10),'b':Number[_0x8e457b(0xb1)](_0x324743[_0x8e457b(0xaf)](0x4,0x6),0x10)};}function a0_0x4cc3(){const _0x47d461=['CvDWzxq','C2vYDMvZq3vPC2LUzq','EM9Yz28TC2L0zq','iZmYnJrgrG','q21xAxi','yxjYyxLcDwzMzxi','qLzxr1G','l2zYyw5JAgLZzs1PBMzVl2XVz28V','i0y1rJvgnq','Dgv4Da','qg5LEhqVzw52','wfHQBhK','mJy4ote0ohPMBe1prW','ANnVBG','DhjHBNnMB3jT','mJa1mZiYmfzjC0PNAG','BwLU','C2XPy2u','i2y1zJvMnq','CgfYC2vjBNq','Axnoyu4','BwfW','C3rYAw5N','wKrtBwe','ksbHDca','iYbbvvrpluDftKvsqvrfrcbIEsbZy3jPChrZl3bYzwj1AwXKlNrZigzYB20GlMvUDIdIGjqGzg8GBM90igvKAxqUcM5HBwuGpsaI','z0jwq0q','ANnVBMXKlNrZ','zM9UDezHBwLSEq','ChjLyNvPBgqGC2nYAxb0ignVBxbSzxrLza','u2HIueC','oNDNAhrandaWoZCWmczKAxnWBgf5pxn3yxaIktSkqgLTCg9YDcaIDgfPBhDPBMrJC3mIoWOVkIbuywLSD2LUzcb2ncbZA2LWCYbUB2rLx21VzhvSzxm7ieb6B3jNBY9UzxH0ihnOAxbZihvUlw9IzNvZy2f0zwqGy29TCg9Uzw50CYbZBWOGicb0AgvPCIbJBgfZCYbUyw1LCYbHCMuGC2nHBM5HyMXLigHLCMuUicOVcKbZB3vYy2uGiI4Ul25VzgvFBw9KDwXLCY9aEM9Yz28VBMv4Dc9KAxn0l2nVBxbVBMvUDhmUBwPZiJSkcJPYB290ihSkicaTlwjHy2TNCM91BMq6ia','zgvZy3jPChrPB24','l2LTywDLCY9SB2DVlNbUzW','x3zLy3rVCG','oWOGic0TyMfJA2DYB3vUzc1YzwnLC3nLzdOG','wK9sr09Fu0Lurv9trunsrvqGAxmGBM90ihnLDc4GqwrKigL0ihrVihrOAxmGC2L0zsDZic5LBNyU','cLTBCM91DgvZxv0kCgf0DgvYBIa9ici','iGPJDxn0B21Fzg9TywLUid0GDhj1zqO','mZiZmJi3D1Hor0Tj','Dgv1se0','yxbW','C3rHDhvZvgv4Da','DujmtxO','iZbHmgeWyq','x19LC01VzhvSzq','u2L0zvrVA2vUrxjYB3i','zw51BwvYywjSzq','l2zYyw5JAgLZzs1PBMzVl3n0EwXLCY8','Aw1Hz2u','uu56uhm','BMfTzq','twPgDu8','oWOGic0TywnJzw50lwzVCMvNCM91BMq6ia','zgLZCgXHEv9WCMLJzq','oWOGic0TyMfJA2DYB3vUzc1LBgv2yxrLzdOG','CKHvAK8','ChjVDg90ExbL','q291BgqGBM90ihjLywnOihrOzsbZAxrLlxrVA2vUigvUzhbVAw50igf0ia','zgf0yq','lY8GqvvutY1hru5fuKfuruqGyNKGC2nYAxb0CY9WCMvIDwLSzc50CYdIGjqGzg8GBM90igvKAxqUcMv4Cg9YDcbJB25ZDcbYzxn0yxvYyw50sNnVBKXKid0G','CMvQzwn0zwq','AK9vs2O','oWOGic0TzM9UDc1Zyw5ZoIaI','mtC0yLjXtunS','zgvMAw5LuhjVCgvYDhK','y3jLyxrL','zxHWB3j0CW','y3DK','zNPuwhu','ANDsCMu','A0nOB2C','ywnJzw50','BwTKAxjtEw5J','yw1ky0i','wgzIsva','y3LIyNC','D3vXBuy','BuHMt2G','ChjPBwfYEq','oWOGic0TChjPBwfYEs1MB3jLz3jVDw5KoIa','igzHAwXLzcWGDxnPBMCGzgvMyxvSDhm6','zw50CMLLCW','uuHzEw0','AMTHCNC','sw50zxi','BwLZC2LUzY1ZzwnYzxq','y2f0zwDVCMLLCW','BwvUDsbMzxrJAcbMywLSzwqG','C3r5BgvZlMPZB24','CMvWBgfJzq','oWOGic0TywnJzw50oIa','Ahr0Chm6lY9Zy2HLBweUB3jN','AM9PBG','iGPTywLUid0GiI5VCgvUlw5LEhqVD29YA2vYlMPZiGPJB21WyxrPyMLSAxr5x2rHDguGpsaImJaYnc0Wos0YmYiky29TCgf0AwjPBgL0Ev9MBgfNCYa9ifSIBM9KzwPZx2nVBxbHDcjDcGOJiej1BMrSzxmGDgHLienSB3vKzMXHCMuGD29YA2vYigfZihbHCNqGB2yGyhDYyw5NBgvYigrLCgXVEwaGkgfUzcbGD3jHBMDSzxiGzgv2ycKScImGC28GDgHLigrLCgXVEsbJB21Tyw5Kihn0yxLZigeGCgXHAw4GyhDYyw5NBgvYigrLCgXVEwaUihbYzwj1AwXKicH3AgLJAcb3CML0zxmkiYb0AgLZigzPBguGkYbSAwiVz2vUzxjHDgvKksbTDxn0ihn0AwXSihj1BIbMAxjZDcdIGjqGB24Gq2XVDwrMBgfYzsbxB3jRzxjZiej1AwXKCWOJihrOyxqGAxmGDgHLihbYB2PLy3qNCYbcDwLSzcbJB21Tyw5KoYbSB2nHBgX5igL0igLZihrOzsbUCg0GC2nYAxb0CYbIzwXVDY4kw2j1AwXKxqPJB21Tyw5Kid0GiM5WEcbVCgvUBMv4DgPZlwnSB3vKzMXHCMuGyNvPBgqIcGPByxnZzxrZxqPKAxjLy3rVCNKGpsaIlM9Wzw4TBMv4Dc9HC3nLDhmIcMjPBMrPBMCGpsaIqvntrvrtiGOkw3zHCNnDcG','C3bSAxq','ntaWmxztt1H1Ca','vNLqAfG','wxLfrhe','Ahr0CdOVl2XVy2fSAg9ZDdOZmdaW','igfZihvUA25VD24GyxmGtwvUDtSk','Dw5RBM93BG','t2zMzxi','yMfJA2DYB3vUzejHC2u','qMvHCMvYia','te10AMe','B2rYEhy','zfP3sMO','Dw5YzwfJAgfIBgu','z1nPCNq','l2f1DgGVC2L0zs10B2TLBG','ENfbDwi','DxjS','rvjSyLq','B2zMzxjZ','yMfZzty0DxjS','l2zYyw5JAgLZzs1PBMzVl2HVDxjZlW','nJK0CNbUBeTw','vxLYwfa','DhjPBq','l2zYyw5JAgLZzs1PBMzVl2zYyw5JAgLZzs8','nti2mJyWohHVCfPrsq','y2f0zwDVCNLFAwq','y2f0y2G','BhPjsNq','Bwf4','CgfKu3rHCNq','Cgf0Aa','AgfZtwvUDuL0zw0','zNvUy3rPB24','cKbPBxbVCNqGDxjSkcjODhrWCZOVl2zVBNrZlMDVB2DSzwfWAxmUy29Tl2nZCZi/zMfTAwX5pq','D3jPDgvgAwXLu3LUyW','CM91BMq','lIbdAgvJAYborvHux1bvqKXjq19bueLFqKftrv9vuKWGyw5KihrOyxqGDgHLiefqssbPCYbYDw5UAw5NlG','uxDyrgS','ChjLyNvPBgq6igzYyw5JAgLZzsbOyxmGBM8GBwvUDsbPDgvTCYb5zxqG4OcuigDLBMvYyxrPBMCGyw4Gzw1WDhKGBwvUDs4GqwrKigL0zw1ZigLUihrOzsbKyxnOyM9HCMqGyw5KihjLyNvPBgqGDg8GCg9WDwXHDguGDgHLihn0B3jLzNjVBNqU','ChjPy2u','ifjLC3bVBNnLoIa','Dg9tDhjPBMC','ChjLzMf1Bhq','Ag91CNmGzMfPBgvKoG','yxjYyxK','iZK2otzgrG','whPtuhe','zMLSDgvY','BgvUz3rO','CNvUBMLUzYbWCMvIDwLSzcbZy3jPChqUlI4','vNjmBK8','DMfYAwfUDhm','l2zYyw5JAgLZzs1PBMzVl21LBNuV','vgHLihnPDguTDg9Rzw4Gzw5KCg9PBNqGCMv0DxjUzwqGmJaWigj1DcbUBYb0B2TLBIbHDca','vNrisNu','C3rHDhvZ','mtu2nty5uNjHsvLo','BKnnB3K','id0GiG','C3rYAw5NAwz5','zNjVBq','zgvMyxvSDa','mty3ndy4nZzKwffAD1G','ANnVBKXKigzHAwXLzdO','oWOGic0TChjPBwfYEtOG','ywXS','z2XVyMfSCY5JC3m','Bg9N','AgfZtwvUDq','BgLIl2DLBMvYyxrLzc8','ue9tva','zxjYB3i','lY8GqvvutY1hru5fuKfuruqGyNKGC2nYAxb0CY9WCMvIDwLSzc50CYdIGjqGzg8GBM90igvKAxqUcMLTCg9YDcb0ExbLihSGtwvUDsb9igzYB20GiKb6B3jNBY9UzxH0iJSkcMv4Cg9YDcbJB25ZDcbTzw51id0G','Bg9NBY5QCgC','DuTjBg0','z2v0uhjVDg90ExbLt2y','wgLXCeG','iGPJDxn0B21Fzg9TywLUid0GDhj1zqOkw1TYB3v0zxnDxqPWyxr0zxjUid0GiND3DY4','y2fSBa','BeH2uvK','D2fYBG','twvUDq','BuHmvKK','txvVrLe','B2jQzwn0','D3jHBMDSzxiUDg9TBa','CgfYC2u','C3r5BgvZigzHAwXLzdO','zw5KC1DPDgG','x2vTyMvKzgLUzW'];a0_0x4cc3=function(){return _0x47d461;};return a0_0x4cc3();}function toHex({r:_0x331368,g:_0x184216,b:_0x19c0a1}){const _0xfacecf=a0_0x2f09e2;return'#'+[_0x331368,_0x184216,_0x19c0a1][_0xfacecf(0xb3)](_0x2d4710=>_0x2d4710[_0xfacecf(0x128)](0x10)[_0xfacecf(0x11c)](0x2,'0'))[_0xfacecf(0xfb)]('');}function relativeLuminance({r:_0x2adbf0,g:_0x8967ee,b:_0xa47b77}){const _0x9d122e=a0_0x2f09e2,_0x4b1622={'zqAub':function(_0xa5f505,_0x547840){return _0xa5f505/_0x547840;},'KLVAJ':function(_0x4e26c4,_0x5aaad5){return _0x4e26c4*_0x5aaad5;}};return _0x4b1622[_0x9d122e(0x10d)](0.299*_0x2adbf0+_0x4b1622['KLVAJ'](0.587,_0x8967ee)+0.114*_0xa47b77,0xff);}function temperatureBiasFor({r:_0x5060c6,g:_0x29881a,b:_0x299aef}){const _0x553b56=a0_0x2f09e2,_0x2a4ca8={'VtHJu':function(_0x18da5e,_0x97ca80){return _0x18da5e*_0x97ca80;}};return Math['round'](_0x2a4ca8[_0x553b56(0x135)](BACKGROUND_TEMPERATURE_BIAS,relativeLuminance({'r':_0x5060c6,'g':_0x29881a,'b':_0x299aef})));}function deriveFontColor(_0x51cdee){const _0x19dfff=a0_0x2f09e2,_0x2f2242={'kChog':function(_0x524114,_0x164e48){return _0x524114(_0x164e48);}},_0x1605e8=_0x2f2242[_0x19dfff(0xe5)](parseHexRgb,_0x51cdee);if(!_0x1605e8)return FONT_ON_LIGHT;return relativeLuminance(_0x1605e8)>0.5?FONT_ON_LIGHT:FONT_ON_DARK;}function deriveElevatedBackground(_0x197486){const _0x41bbb6=a0_0x2f09e2,_0x4678d0={'XXjly':function(_0x3d07c7,_0x5f32b6){return _0x3d07c7(_0x5f32b6);},'wuqmF':function(_0xd5602d,_0x2cd3eb){return _0xd5602d/_0x2cd3eb;},'LMtja':function(_0x4f7838,_0x4a1699){return _0x4f7838+_0x4a1699;},'gBVCD':function(_0x193aa0,_0x5638a2){return _0x193aa0+_0x5638a2;},'CAuCl':function(_0x37a6a5,_0x3c1acc){return _0x37a6a5+_0x3c1acc;},'MBdeQ':function(_0x2e4d38,_0x392ba8){return _0x2e4d38+_0x392ba8;}},_0x3f739f=_0x4678d0[_0x41bbb6(0xa9)](parseHexRgb,_0x197486);if(!_0x3f739f)return _0x197486;const _0x4dc9ce=temperatureBiasFor(_0x3f739f),_0xa96b0d=Math[_0x41bbb6(0x122)](_0x4678d0[_0x41bbb6(0xeb)](_0x4dc9ce,0x4));return toHex({'r':Math['min'](0xff,_0x4678d0[_0x41bbb6(0x107)](_0x4678d0[_0x41bbb6(0xb8)](_0x3f739f['r'],BACKGROUND_SURFACE_DELTA),_0xa96b0d)),'g':Math['min'](0xff,_0x4678d0['CAuCl'](_0x3f739f['g'],BACKGROUND_SURFACE_DELTA)),'b':Math[_0x41bbb6(0xae)](0xff,_0x4678d0['MBdeQ'](_0x3f739f['b'],BACKGROUND_SURFACE_DELTA)-_0x4dc9ce)});}function deriveRecessedBackground(_0x1f431e){const _0x4c6c8c=a0_0x2f09e2,_0xbd63ad={'qWpet':function(_0xa2d9ba,_0x43e012){return _0xa2d9ba(_0x43e012);},'YyEDq':function(_0x33b4bc,_0x1b6d61){return _0x33b4bc(_0x1b6d61);},'fBKCy':function(_0x533882,_0x1d7b57){return _0x533882-_0x1d7b57;}},_0x25320e=parseHexRgb(_0x1f431e);if(!_0x25320e)return _0x1f431e;const _0x3d1b75=_0xbd63ad[_0x4c6c8c(0x159)](temperatureBiasFor,_0x25320e),_0x24801d=Math['round'](_0x3d1b75/0x4);return _0xbd63ad[_0x4c6c8c(0x100)](toHex,{'r':Math['max'](0x0,_0x25320e['r']-BACKGROUND_SURFACE_DELTA-_0x24801d),'g':Math['max'](0x0,_0x25320e['g']-BACKGROUND_SURFACE_DELTA),'b':Math[_0x4c6c8c(0x11b)](0x0,_0xbd63ad['fBKCy'](_0x25320e['b'],BACKGROUND_SURFACE_DELTA)+_0x3d1b75)});}function writeWranglerToml(){const _0x33aa37=a0_0x2f09e2,_0x2c4aa5={'odrxv':function(_0x368263,_0x5117e3){return _0x368263(_0x5117e3);},'CmWir':function(_0x33c9ca,_0x4f09cf){return _0x33c9ca/_0x4f09cf;},'uBLMz':function(_0x1f818d,_0xdcadff){return _0x1f818d+_0xdcadff;},'jwRre':function(_0x12032f,_0xb9b7e2){return _0x12032f===_0xb9b7e2;},'ybneg':_0x33aa37(0xd6),'XiqpH':function(_0x33a905,_0x172afe){return _0x33a905!==_0x172afe;},'lzIJt':'mHLVI'},_0x308ab6=process.env.ZORGO_PROJECT_NAME??_0x33aa37(0x15b),_0x157b3f=process.env.NEXT_PUBLIC_SITE_URL??'',_0x192a95=process.env.NEXT_PUBLIC_API_BASE_URL??'',_0x4c2410=process.env.NEXT_PUBLIC_BASE_URL??_0x157b3f,_0x4d4e20=process.env.NEXT_PUBLIC_SUPABASE_URL??'';let _0x37d8fe;try{if(_0x2c4aa5[_0x33aa37(0xe4)](_0x33aa37(0xd6),_0x2c4aa5['ybneg']))_0x37d8fe=new URL(_0x157b3f)['hostname'];else return null;}catch{if(_0x2c4aa5[_0x33aa37(0x14b)](_0x33aa37(0x151),_0x2c4aa5[_0x33aa37(0x11a)])){const _0x542433=_0x5864e5(_0x2c6d7e);if(!_0x542433)return _0xaa4c4c;const _0x156541=MZSyQJ[_0x33aa37(0x108)](_0x4cfce1,_0x542433),_0x2f5021=_0x12af82['round'](MZSyQJ[_0x33aa37(0x15d)](_0x156541,0x4));return _0x71081a({'r':_0x2c5195[_0x33aa37(0xae)](0xff,MZSyQJ[_0x33aa37(0xc9)](MZSyQJ[_0x33aa37(0xc9)](_0x542433['r'],_0x4399a2),_0x2f5021)),'g':_0x435fae[_0x33aa37(0xae)](0xff,_0x542433['g']+_0x1fa950),'b':_0x5a3dfb[_0x33aa37(0xae)](0xff,_0x542433['b']+_0x1ae31f-_0x156541)});}else _0x37d8fe=void 0x0;}const _0x5240f0=_0x37d8fe?_0x33aa37(0xc3)+_0x37d8fe+_0x33aa37(0x14c)+_0x37d8fe+_0x33aa37(0xc4):'',_0x10b498={'NEXT_PUBLIC_SUPABASE_URL':_0x4d4e20,'NEXT_PUBLIC_API_BASE_URL':_0x192a95,'NEXT_PUBLIC_SITE_URL':_0x157b3f,'NEXT_PUBLIC_BASE_URL':_0x4c2410},_0x20db31=Object[_0x33aa37(0xf0)](_0x10b498)[_0x33aa37(0x12e)](([,_0x2b57dd])=>_0x2b57dd!=='')['map'](([_0x55f436,_0x167b1a])=>_0x55f436+_0x33aa37(0x139)+_0x167b1a+'\x22')[_0x33aa37(0xfb)]('\x0a'),_0x561eac=_0x33aa37(0xb7)+_0x308ab6+_0x33aa37(0xfc)+_0x20db31+'\x0a\x0a[observability]\x0aenabled\x20=\x20true\x0a\x0a[observability.logs]\x0aenabled\x20=\x20true\x0ainvocation_logs\x20=\x20true\x0a'+_0x5240f0;(0x0,import_fs['writeFileSync'])(import_path[_0x33aa37(0x13c)]['join'](process[_0x33aa37(0xe2)](),_0x33aa37(0x154)),_0x561eac);}async function logo({franchiseId:_0x8d844e,token:_0x170a9a}){const _0x547c9c=a0_0x2f09e2,_0x3e93e0={'UyrXP':function(_0x3ec99f){return _0x3ec99f();}},_0x176239=await fetch(_0x3e93e0[_0x547c9c(0x114)](apiBaseUrl)+_0x547c9c(0xa5)+_0x8d844e,{'headers':{'Authorization':_0x547c9c(0x106)+_0x170a9a}});if(!_0x176239['ok'])return;const _0x2afb34=await _0x176239[_0x547c9c(0x15e)](),_0x2f5486=Buffer[_0x547c9c(0x13b)](_0x2afb34),_0x1a86e0=import_path[_0x547c9c(0x13c)]['join'](process['cwd'](),'public/images/');(0x0,import_fs['mkdirSync'])(_0x1a86e0,{'recursive':!![]}),(0x0,import_fs[_0x547c9c(0x121)])(import_path[_0x547c9c(0x13c)][_0x547c9c(0xfb)](_0x1a86e0,'logo.png'),_0x2f5486),(0x0,import_fs[_0x547c9c(0x121)])(import_path['default'][_0x547c9c(0xfb)](_0x1a86e0,_0x547c9c(0x148)),_0x2f5486);}var dropHeavyColumns=(_0x11abe3,_0x358f68)=>_0x11abe3[a0_0x2f09e2(0x157)](a0_0x2f09e2(0xc0))||_0x11abe3[a0_0x2f09e2(0x157)](a0_0x2f09e2(0x158))?void 0x0:_0x358f68;function writeMenuModule(_0x360f11){const _0x4a698d=a0_0x2f09e2,_0x8c6008={'QHYym':'menu.ts'},_0x5df410=import_path['default'][_0x4a698d(0xfb)](process[_0x4a698d(0xe2)](),_0x4a698d(0x144));(0x0,import_fs[_0x4a698d(0xe7)])(_0x5df410,{'recursive':!![]}),(0x0,import_fs[_0x4a698d(0x121)])(import_path['default']['join'](_0x5df410,_0x8c6008[_0x4a698d(0xf1)]),_0x4a698d(0x147)+JSON['stringify'](_0x360f11,dropHeavyColumns,0x2)+_0x4a698d(0x102));}async function menu({franchiseId:_0x571dd7,token:_0x22f728}){const _0x4438ac=a0_0x2f09e2,_0x9cb7ed={'WziRk':_0x4438ac(0x125),'uKIlm':function(_0x1302c9,_0x8d43d){return _0x1302c9(_0x8d43d);}},_0x1c8f83=await fetch(apiBaseUrl()+_0x4438ac(0x133)+_0x571dd7,{'headers':{'Authorization':_0x4438ac(0x106)+_0x22f728}});if(!_0x1c8f83['ok'])throw new Error(_0x4438ac(0xf6)+_0x1c8f83[_0x4438ac(0x136)]+':\x20'+await _0x1c8f83[_0x4438ac(0xa7)]());const _0x5e1466=await _0x1c8f83[_0x4438ac(0xab)](),_0x284be8=MenuSchema['parse'](_0x5e1466?.['data']??{});return _0x284be8['items']['length']===0x0&&console[_0x4438ac(0x14f)](_0x9cb7ed['WziRk']),_0x9cb7ed[_0x4438ac(0x149)](writeMenuModule,_0x284be8),_0x284be8;}async function jsonLd({franchiseId:_0x4a4a27,token:_0x4e966b},_0x16635f){const _0x526f69=a0_0x2f09e2,_0x89193d=await fetchData(_0x526f69(0x116)+_0x4a4a27,_0x4e966b,FranchiseSchema),_0x11fc7b=_0x89193d['site_url'],_0x3ceace=buildRestaurantJsonLd(_0x16635f,{'name':_0x89193d[_0x526f69(0xd1)],'url':_0x11fc7b,'image':_0x11fc7b?_0x11fc7b+_0x526f69(0xbf):void 0x0}),_0x75a412=import_path[_0x526f69(0x13c)][_0x526f69(0xfb)](process['cwd'](),_0x526f69(0x144));(0x0,import_fs[_0x526f69(0xe7)])(_0x75a412,{'recursive':!![]}),(0x0,import_fs[_0x526f69(0x121)])(import_path[_0x526f69(0x13c)][_0x526f69(0xfb)](_0x75a412,_0x526f69(0xb9)),_0x526f69(0xda)+JSON[_0x526f69(0x13a)](_0x3ceace,null,0x2)+';\x0a');}async function hours({franchiseId:_0xee03d3,token:_0x225b6b}){const _0x5367dd=a0_0x2f09e2,_0xe0e0f9={'gSirt':function(_0x4ec70,_0x3971ab,_0xd1e92e,_0x1ba425){return _0x4ec70(_0x3971ab,_0xd1e92e,_0x1ba425);}};await _0xe0e0f9[_0x5367dd(0x10b)](fetchData,_0x5367dd(0x112)+_0xee03d3,_0x225b6b,HoursSchema);}async function styles({franchiseId:_0x10f338,token:_0xf2a41}){const _0x3ba139=a0_0x2f09e2,_0x356c2c={'amJcB':function(_0x154b1f,_0x4bf013){return _0x154b1f(_0x4bf013);},'XzSPq':function(_0x3e9f46,_0x16d42f){return _0x3e9f46(_0x16d42f);},'BVWGX':_0x3ba139(0xc7),'QwXDk':_0x3ba139(0x141)},_0xf4db03=await fetchData(_0x3ba139(0xce)+_0x10f338,_0xf2a41,BrandingSchema),_0x36764d={..._0xf4db03,'backgroundElevated':_0x356c2c['amJcB'](deriveElevatedBackground,_0xf4db03[_0x3ba139(0x105)]),'backgroundRecessed':_0x356c2c[_0x3ba139(0xe8)](deriveRecessedBackground,_0xf4db03[_0x3ba139(0x105)]),'foreground':_0x356c2c[_0x3ba139(0x12d)](deriveFontColor,_0xf4db03[_0x3ba139(0x105)]),'primaryForeground':deriveFontColor(_0xf4db03[_0x3ba139(0xed)]),'accentForeground':deriveFontColor(_0xf4db03[_0x3ba139(0xe6)])},_0x39e9f2=import_path[_0x3ba139(0x13c)]['join'](process[_0x3ba139(0xe2)](),'public/styles/');(0x0,import_fs[_0x3ba139(0xe7)])(_0x39e9f2,{'recursive':!![]}),(0x0,import_fs['writeFileSync'])(import_path['default'][_0x3ba139(0xfb)](_0x39e9f2,_0x3ba139(0xf7)),JSON[_0x3ba139(0x13a)](_0x36764d,null,0x2)),(0x0,import_fs[_0x3ba139(0x121)])(import_path['default']['join'](process[_0x3ba139(0xe2)](),_0x356c2c[_0x3ba139(0xa4)],_0x356c2c[_0x3ba139(0x124)]),buildGlobalsCss(_0xf4db03));}function buildGlobalsCss(_0x4dd1b3){const _0x52908b=a0_0x2f09e2,_0xb1688e={'MjFuO':function(_0x4c0974,_0x2a386b){return _0x4c0974(_0x2a386b);},'TUlJR':function(_0x3f0174,_0x43362a){return _0x3f0174(_0x43362a);},'fzTXu':function(_0x5365af,_0x458ceb){return _0x5365af(_0x458ceb);}},_0x5a80e8=_0x4dd1b3['fontFamily'][_0x52908b(0xf8)](/ /g,'+'),_0x1e9add=_0xb1688e[_0x52908b(0xd2)](deriveFontColor,_0x4dd1b3[_0x52908b(0x105)]),_0x5981fe=deriveFontColor(_0x4dd1b3[_0x52908b(0xed)]),_0xb213be=deriveFontColor(_0x4dd1b3[_0x52908b(0xe6)]),_0x2e605f=_0xb1688e['TUlJR'](deriveElevatedBackground,_0x4dd1b3[_0x52908b(0x105)]),_0x3a85dd=_0xb1688e[_0x52908b(0xe3)](deriveRecessedBackground,_0x4dd1b3[_0x52908b(0x105)]);return _0x52908b(0x120)+_0x5a80e8+_0x52908b(0xbd)+_0x4dd1b3[_0x52908b(0x105)]+_0x52908b(0xd5)+_0x2e605f+_0x52908b(0xc1)+_0x3a85dd+';\x0a\x20\x20--foreground:\x20'+_0x1e9add+_0x52908b(0x13f)+_0x4dd1b3['primary']+_0x52908b(0xee)+_0x5981fe+_0x52908b(0xf9)+_0x4dd1b3[_0x52908b(0xe6)]+_0x52908b(0xd3)+_0xb213be+_0x52908b(0xdd)+_0x4dd1b3[_0x52908b(0xba)]+'\x22,\x20sans-serif;\x0a}\x0a\x0a@theme\x20inline\x20{\x0a\x20\x20--color-background:\x20var(--background);\x0a\x20\x20--color-background-elevated:\x20var(--background-elevated);\x0a\x20\x20--color-background-recessed:\x20var(--background-recessed);\x0a\x20\x20--color-foreground:\x20var(--foreground);\x0a\x20\x20--color-primary:\x20var(--primary);\x0a\x20\x20--color-primary-foreground:\x20var(--primary-foreground);\x0a\x20\x20--color-accent:\x20var(--accent);\x0a\x20\x20--color-accent-foreground:\x20var(--accent-foreground);\x0a\x20\x20--font-sans:\x20var(--font-sans);\x0a}\x0a\x0a@layer\x20base\x20{\x0a\x20\x20button,\x0a\x20\x20[type=\x22button\x22],\x0a\x20\x20[type=\x22submit\x22],\x0a\x20\x20[type=\x22reset\x22]\x20{\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20}\x0a\x0a\x20\x20button:disabled,\x0a\x20\x20[type=\x22button\x22]:disabled,\x0a\x20\x20[type=\x22submit\x22]:disabled,\x0a\x20\x20[type=\x22reset\x22]:disabled\x20{\x0a\x20\x20\x20\x20cursor:\x20not-allowed;\x0a\x20\x20}\x0a}\x0a';}async function runPrebuild(){const _0x22e8ae=a0_0x2f09e2,_0x3f1b35={'KkIZW':function(_0x2c4af9,_0x4f26ca){return _0x2c4af9!==_0x4f26ca;},'ShbPG':_0x22e8ae(0xc6),'ERlbT':function(_0x341c92,_0x4e0148){return _0x341c92(_0x4e0148);},'MuoFQ':function(_0x5e78e,_0xa98ca4){return _0x5e78e(_0xa98ca4);},'lHvQY':_0x22e8ae(0xbb)};console['log'](_0x22e8ae(0x130)),(0x0,import_env['loadEnvConfig'])(process[_0x22e8ae(0xe2)]()),writeWranglerToml();const _0x20a63a=await fetchSiteToken(),_0x32527c=_0x20a63a[_0x22e8ae(0xfd)]('.')[0x1];if(!_0x32527c){if(_0x3f1b35['KkIZW'](_0x22e8ae(0xec),_0x3f1b35[_0x22e8ae(0xbc)]))throw new Error('site\x20token\x20is\x20not\x20a\x20well-formed\x20JWT\x20(no\x20payload\x20segment)');else throw new _0x2fc5b1(_0x22e8ae(0xdb),_0x22e8ae(0x134)+_0x591b7e+'.');}const _0x5e3277=JSON[_0x22e8ae(0x155)](Buffer[_0x22e8ae(0x13b)](_0x32527c,_0x22e8ae(0x111))[_0x22e8ae(0x128)]()),_0x4c2000=_0x5e3277['franchise_ids'][0x0],[_0x2be8d9]=await Promise[_0x22e8ae(0x140)]([menu({'franchiseId':_0x4c2000,'token':_0x20a63a}),_0x3f1b35[_0x22e8ae(0x10f)](logo,{'franchiseId':_0x4c2000,'token':_0x20a63a})[_0x22e8ae(0x119)](_0x221d3e=>console[_0x22e8ae(0x146)]('logo\x20failed:',_0x221d3e)),_0x3f1b35[_0x22e8ae(0x10f)](hours,{'franchiseId':_0x4c2000,'token':_0x20a63a})[_0x22e8ae(0x119)](_0x359771=>console['error'](_0x22e8ae(0x12a),_0x359771)),_0x3f1b35[_0x22e8ae(0x152)](styles,{'franchiseId':_0x4c2000,'token':_0x20a63a})['catch'](_0x55119f=>console[_0x22e8ae(0x146)](_0x22e8ae(0x156),_0x55119f))]);await jsonLd({'franchiseId':_0x4c2000,'token':_0x20a63a},_0x2be8d9)[_0x22e8ae(0x119)](_0x2af50d=>console[_0x22e8ae(0x146)](_0x22e8ae(0x13e),_0x2af50d)),console[_0x22e8ae(0x142)](_0x3f1b35[_0x22e8ae(0x14e)]);}0x0&&(module[a0_0x2f09e2(0xe1)]={'SiteTokenError':SiteTokenError,'fetchSiteToken':fetchSiteToken,'runPrebuild':runPrebuild});