@nexushub/client 0.0.1

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/index.js ADDED
@@ -0,0 +1,4301 @@
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 __commonJS = (cb, mod) => function __require() {
9
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
+ };
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
31
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
+
33
+ // node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs
34
+ var require_interop_require_wildcard = __commonJS({
35
+ "node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs"(exports2) {
36
+ "use strict";
37
+ function _getRequireWildcardCache(nodeInterop) {
38
+ if (typeof WeakMap !== "function") return null;
39
+ var cacheBabelInterop = /* @__PURE__ */ new WeakMap();
40
+ var cacheNodeInterop = /* @__PURE__ */ new WeakMap();
41
+ return (_getRequireWildcardCache = function(nodeInterop2) {
42
+ return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop;
43
+ })(nodeInterop);
44
+ }
45
+ function _interop_require_wildcard(obj, nodeInterop) {
46
+ if (!nodeInterop && obj && obj.__esModule) return obj;
47
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") return { default: obj };
48
+ var cache = _getRequireWildcardCache(nodeInterop);
49
+ if (cache && cache.has(obj)) return cache.get(obj);
50
+ var newObj = { __proto__: null };
51
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
52
+ for (var key in obj) {
53
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
54
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
55
+ if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
56
+ else newObj[key] = obj[key];
57
+ }
58
+ }
59
+ newObj.default = obj;
60
+ if (cache) cache.set(obj, newObj);
61
+ return newObj;
62
+ }
63
+ exports2._ = _interop_require_wildcard;
64
+ }
65
+ });
66
+
67
+ // node_modules/@swc/helpers/cjs/_interop_require_default.cjs
68
+ var require_interop_require_default = __commonJS({
69
+ "node_modules/@swc/helpers/cjs/_interop_require_default.cjs"(exports2) {
70
+ "use strict";
71
+ function _interop_require_default(obj) {
72
+ return obj && obj.__esModule ? obj : { default: obj };
73
+ }
74
+ exports2._ = _interop_require_default;
75
+ }
76
+ });
77
+
78
+ // node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js
79
+ var require_app_router_context_shared_runtime = __commonJS({
80
+ "node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js"(exports2) {
81
+ "use strict";
82
+ "use client";
83
+ Object.defineProperty(exports2, "__esModule", {
84
+ value: true
85
+ });
86
+ function _export(target, all) {
87
+ for (var name in all) Object.defineProperty(target, name, {
88
+ enumerable: true,
89
+ get: all[name]
90
+ });
91
+ }
92
+ _export(exports2, {
93
+ AppRouterContext: function() {
94
+ return AppRouterContext;
95
+ },
96
+ GlobalLayoutRouterContext: function() {
97
+ return GlobalLayoutRouterContext;
98
+ },
99
+ LayoutRouterContext: function() {
100
+ return LayoutRouterContext;
101
+ },
102
+ MissingSlotContext: function() {
103
+ return MissingSlotContext;
104
+ },
105
+ TemplateContext: function() {
106
+ return TemplateContext;
107
+ }
108
+ });
109
+ var _interop_require_default = require_interop_require_default();
110
+ var _react = /* @__PURE__ */ _interop_require_default._(require("react"));
111
+ var AppRouterContext = _react.default.createContext(null);
112
+ var LayoutRouterContext = _react.default.createContext(null);
113
+ var GlobalLayoutRouterContext = _react.default.createContext(null);
114
+ var TemplateContext = _react.default.createContext(null);
115
+ if (process.env.NODE_ENV !== "production") {
116
+ AppRouterContext.displayName = "AppRouterContext";
117
+ LayoutRouterContext.displayName = "LayoutRouterContext";
118
+ GlobalLayoutRouterContext.displayName = "GlobalLayoutRouterContext";
119
+ TemplateContext.displayName = "TemplateContext";
120
+ }
121
+ var MissingSlotContext = _react.default.createContext(/* @__PURE__ */ new Set());
122
+ }
123
+ });
124
+
125
+ // node_modules/next/dist/client/components/readonly-url-search-params.js
126
+ var require_readonly_url_search_params = __commonJS({
127
+ "node_modules/next/dist/client/components/readonly-url-search-params.js"(exports2, module2) {
128
+ "use strict";
129
+ Object.defineProperty(exports2, "__esModule", {
130
+ value: true
131
+ });
132
+ Object.defineProperty(exports2, "ReadonlyURLSearchParams", {
133
+ enumerable: true,
134
+ get: function() {
135
+ return ReadonlyURLSearchParams;
136
+ }
137
+ });
138
+ var ReadonlyURLSearchParamsError = class extends Error {
139
+ constructor() {
140
+ super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams");
141
+ }
142
+ };
143
+ var ReadonlyURLSearchParams = class extends URLSearchParams {
144
+ /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */
145
+ append() {
146
+ throw new ReadonlyURLSearchParamsError();
147
+ }
148
+ /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */
149
+ delete() {
150
+ throw new ReadonlyURLSearchParamsError();
151
+ }
152
+ /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */
153
+ set() {
154
+ throw new ReadonlyURLSearchParamsError();
155
+ }
156
+ /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */
157
+ sort() {
158
+ throw new ReadonlyURLSearchParamsError();
159
+ }
160
+ };
161
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
162
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
163
+ Object.assign(exports2.default, exports2);
164
+ module2.exports = exports2.default;
165
+ }
166
+ }
167
+ });
168
+
169
+ // node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js
170
+ var require_hooks_client_context_shared_runtime = __commonJS({
171
+ "node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js"(exports2) {
172
+ "use strict";
173
+ "use client";
174
+ Object.defineProperty(exports2, "__esModule", {
175
+ value: true
176
+ });
177
+ function _export(target, all) {
178
+ for (var name in all) Object.defineProperty(target, name, {
179
+ enumerable: true,
180
+ get: all[name]
181
+ });
182
+ }
183
+ _export(exports2, {
184
+ NavigationPromisesContext: function() {
185
+ return NavigationPromisesContext;
186
+ },
187
+ PathParamsContext: function() {
188
+ return PathParamsContext;
189
+ },
190
+ PathnameContext: function() {
191
+ return PathnameContext;
192
+ },
193
+ ReadonlyURLSearchParams: function() {
194
+ return _readonlyurlsearchparams.ReadonlyURLSearchParams;
195
+ },
196
+ SearchParamsContext: function() {
197
+ return SearchParamsContext;
198
+ },
199
+ createDevToolsInstrumentedPromise: function() {
200
+ return createDevToolsInstrumentedPromise;
201
+ }
202
+ });
203
+ var _react = require("react");
204
+ var _readonlyurlsearchparams = require_readonly_url_search_params();
205
+ var SearchParamsContext = (0, _react.createContext)(null);
206
+ var PathnameContext = (0, _react.createContext)(null);
207
+ var PathParamsContext = (0, _react.createContext)(null);
208
+ var NavigationPromisesContext = (0, _react.createContext)(null);
209
+ function createDevToolsInstrumentedPromise(displayName, value) {
210
+ const promise = Promise.resolve(value);
211
+ promise.status = "fulfilled";
212
+ promise.value = value;
213
+ promise.displayName = `${displayName} (SSR)`;
214
+ return promise;
215
+ }
216
+ if (process.env.NODE_ENV !== "production") {
217
+ SearchParamsContext.displayName = "SearchParamsContext";
218
+ PathnameContext.displayName = "PathnameContext";
219
+ PathParamsContext.displayName = "PathParamsContext";
220
+ NavigationPromisesContext.displayName = "NavigationPromisesContext";
221
+ }
222
+ }
223
+ });
224
+
225
+ // node_modules/next/dist/shared/lib/segment.js
226
+ var require_segment = __commonJS({
227
+ "node_modules/next/dist/shared/lib/segment.js"(exports2) {
228
+ "use strict";
229
+ Object.defineProperty(exports2, "__esModule", {
230
+ value: true
231
+ });
232
+ function _export(target, all) {
233
+ for (var name in all) Object.defineProperty(target, name, {
234
+ enumerable: true,
235
+ get: all[name]
236
+ });
237
+ }
238
+ _export(exports2, {
239
+ DEFAULT_SEGMENT_KEY: function() {
240
+ return DEFAULT_SEGMENT_KEY;
241
+ },
242
+ NOT_FOUND_SEGMENT_KEY: function() {
243
+ return NOT_FOUND_SEGMENT_KEY;
244
+ },
245
+ PAGE_SEGMENT_KEY: function() {
246
+ return PAGE_SEGMENT_KEY;
247
+ },
248
+ addSearchParamsIfPageSegment: function() {
249
+ return addSearchParamsIfPageSegment;
250
+ },
251
+ computeSelectedLayoutSegment: function() {
252
+ return computeSelectedLayoutSegment;
253
+ },
254
+ getSegmentValue: function() {
255
+ return getSegmentValue;
256
+ },
257
+ getSelectedLayoutSegmentPath: function() {
258
+ return getSelectedLayoutSegmentPath;
259
+ },
260
+ isGroupSegment: function() {
261
+ return isGroupSegment;
262
+ },
263
+ isParallelRouteSegment: function() {
264
+ return isParallelRouteSegment;
265
+ }
266
+ });
267
+ function getSegmentValue(segment) {
268
+ return Array.isArray(segment) ? segment[1] : segment;
269
+ }
270
+ function isGroupSegment(segment) {
271
+ return segment[0] === "(" && segment.endsWith(")");
272
+ }
273
+ function isParallelRouteSegment(segment) {
274
+ return segment.startsWith("@") && segment !== "@children";
275
+ }
276
+ function addSearchParamsIfPageSegment(segment, searchParams) {
277
+ const isPageSegment = segment.includes(PAGE_SEGMENT_KEY);
278
+ if (isPageSegment) {
279
+ const stringifiedQuery = JSON.stringify(searchParams);
280
+ return stringifiedQuery !== "{}" ? PAGE_SEGMENT_KEY + "?" + stringifiedQuery : PAGE_SEGMENT_KEY;
281
+ }
282
+ return segment;
283
+ }
284
+ function computeSelectedLayoutSegment(segments, parallelRouteKey) {
285
+ if (!segments || segments.length === 0) {
286
+ return null;
287
+ }
288
+ const rawSegment = parallelRouteKey === "children" ? segments[0] : segments[segments.length - 1];
289
+ return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment;
290
+ }
291
+ function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) {
292
+ let node;
293
+ if (first) {
294
+ node = tree[1][parallelRouteKey];
295
+ } else {
296
+ const parallelRoutes = tree[1];
297
+ node = parallelRoutes.children ?? Object.values(parallelRoutes)[0];
298
+ }
299
+ if (!node) return segmentPath;
300
+ const segment = node[0];
301
+ let segmentValue = getSegmentValue(segment);
302
+ if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {
303
+ return segmentPath;
304
+ }
305
+ segmentPath.push(segmentValue);
306
+ return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath);
307
+ }
308
+ var PAGE_SEGMENT_KEY = "__PAGE__";
309
+ var DEFAULT_SEGMENT_KEY = "__DEFAULT__";
310
+ var NOT_FOUND_SEGMENT_KEY = "/_not-found";
311
+ }
312
+ });
313
+
314
+ // node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js
315
+ var require_server_inserted_html_shared_runtime = __commonJS({
316
+ "node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js"(exports2) {
317
+ "use strict";
318
+ "use client";
319
+ Object.defineProperty(exports2, "__esModule", {
320
+ value: true
321
+ });
322
+ function _export(target, all) {
323
+ for (var name in all) Object.defineProperty(target, name, {
324
+ enumerable: true,
325
+ get: all[name]
326
+ });
327
+ }
328
+ _export(exports2, {
329
+ ServerInsertedHTMLContext: function() {
330
+ return ServerInsertedHTMLContext;
331
+ },
332
+ useServerInsertedHTML: function() {
333
+ return useServerInsertedHTML;
334
+ }
335
+ });
336
+ var _interop_require_wildcard = require_interop_require_wildcard();
337
+ var _react = /* @__PURE__ */ _interop_require_wildcard._(require("react"));
338
+ var ServerInsertedHTMLContext = /* @__PURE__ */ _react.default.createContext(null);
339
+ function useServerInsertedHTML(callback) {
340
+ const addInsertedServerHTMLCallback = (0, _react.useContext)(ServerInsertedHTMLContext);
341
+ if (addInsertedServerHTMLCallback) {
342
+ addInsertedServerHTMLCallback(callback);
343
+ }
344
+ }
345
+ }
346
+ });
347
+
348
+ // node_modules/next/dist/client/components/unrecognized-action-error.js
349
+ var require_unrecognized_action_error = __commonJS({
350
+ "node_modules/next/dist/client/components/unrecognized-action-error.js"(exports2, module2) {
351
+ "use strict";
352
+ Object.defineProperty(exports2, "__esModule", {
353
+ value: true
354
+ });
355
+ function _export(target, all) {
356
+ for (var name in all) Object.defineProperty(target, name, {
357
+ enumerable: true,
358
+ get: all[name]
359
+ });
360
+ }
361
+ _export(exports2, {
362
+ UnrecognizedActionError: function() {
363
+ return UnrecognizedActionError;
364
+ },
365
+ unstable_isUnrecognizedActionError: function() {
366
+ return unstable_isUnrecognizedActionError;
367
+ }
368
+ });
369
+ var UnrecognizedActionError = class extends Error {
370
+ constructor(...args) {
371
+ super(...args);
372
+ this.name = "UnrecognizedActionError";
373
+ }
374
+ };
375
+ function unstable_isUnrecognizedActionError(error) {
376
+ return !!(error && typeof error === "object" && error instanceof UnrecognizedActionError);
377
+ }
378
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
379
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
380
+ Object.assign(exports2.default, exports2);
381
+ module2.exports = exports2.default;
382
+ }
383
+ }
384
+ });
385
+
386
+ // node_modules/next/dist/client/components/redirect-status-code.js
387
+ var require_redirect_status_code = __commonJS({
388
+ "node_modules/next/dist/client/components/redirect-status-code.js"(exports2, module2) {
389
+ "use strict";
390
+ Object.defineProperty(exports2, "__esModule", {
391
+ value: true
392
+ });
393
+ Object.defineProperty(exports2, "RedirectStatusCode", {
394
+ enumerable: true,
395
+ get: function() {
396
+ return RedirectStatusCode;
397
+ }
398
+ });
399
+ var RedirectStatusCode = /* @__PURE__ */ (function(RedirectStatusCode2) {
400
+ RedirectStatusCode2[RedirectStatusCode2["SeeOther"] = 303] = "SeeOther";
401
+ RedirectStatusCode2[RedirectStatusCode2["TemporaryRedirect"] = 307] = "TemporaryRedirect";
402
+ RedirectStatusCode2[RedirectStatusCode2["PermanentRedirect"] = 308] = "PermanentRedirect";
403
+ return RedirectStatusCode2;
404
+ })({});
405
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
406
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
407
+ Object.assign(exports2.default, exports2);
408
+ module2.exports = exports2.default;
409
+ }
410
+ }
411
+ });
412
+
413
+ // node_modules/next/dist/client/components/redirect-error.js
414
+ var require_redirect_error = __commonJS({
415
+ "node_modules/next/dist/client/components/redirect-error.js"(exports2, module2) {
416
+ "use strict";
417
+ Object.defineProperty(exports2, "__esModule", {
418
+ value: true
419
+ });
420
+ function _export(target, all) {
421
+ for (var name in all) Object.defineProperty(target, name, {
422
+ enumerable: true,
423
+ get: all[name]
424
+ });
425
+ }
426
+ _export(exports2, {
427
+ REDIRECT_ERROR_CODE: function() {
428
+ return REDIRECT_ERROR_CODE;
429
+ },
430
+ RedirectType: function() {
431
+ return RedirectType;
432
+ },
433
+ isRedirectError: function() {
434
+ return isRedirectError;
435
+ }
436
+ });
437
+ var _redirectstatuscode = require_redirect_status_code();
438
+ var REDIRECT_ERROR_CODE = "NEXT_REDIRECT";
439
+ var RedirectType = /* @__PURE__ */ (function(RedirectType2) {
440
+ RedirectType2["push"] = "push";
441
+ RedirectType2["replace"] = "replace";
442
+ return RedirectType2;
443
+ })({});
444
+ function isRedirectError(error) {
445
+ if (typeof error !== "object" || error === null || !("digest" in error) || typeof error.digest !== "string") {
446
+ return false;
447
+ }
448
+ const digest = error.digest.split(";");
449
+ const [errorCode, type] = digest;
450
+ const destination = digest.slice(2, -2).join(";");
451
+ const status = digest.at(-2);
452
+ const statusCode = Number(status);
453
+ return errorCode === REDIRECT_ERROR_CODE && (type === "replace" || type === "push") && typeof destination === "string" && !isNaN(statusCode) && statusCode in _redirectstatuscode.RedirectStatusCode;
454
+ }
455
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
456
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
457
+ Object.assign(exports2.default, exports2);
458
+ module2.exports = exports2.default;
459
+ }
460
+ }
461
+ });
462
+
463
+ // node_modules/next/dist/server/app-render/async-local-storage.js
464
+ var require_async_local_storage = __commonJS({
465
+ "node_modules/next/dist/server/app-render/async-local-storage.js"(exports2) {
466
+ "use strict";
467
+ Object.defineProperty(exports2, "__esModule", {
468
+ value: true
469
+ });
470
+ function _export(target, all) {
471
+ for (var name in all) Object.defineProperty(target, name, {
472
+ enumerable: true,
473
+ get: all[name]
474
+ });
475
+ }
476
+ _export(exports2, {
477
+ bindSnapshot: function() {
478
+ return bindSnapshot;
479
+ },
480
+ createAsyncLocalStorage: function() {
481
+ return createAsyncLocalStorage;
482
+ },
483
+ createSnapshot: function() {
484
+ return createSnapshot;
485
+ }
486
+ });
487
+ var sharedAsyncLocalStorageNotAvailableError = Object.defineProperty(new Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available"), "__NEXT_ERROR_CODE", {
488
+ value: "E504",
489
+ enumerable: false,
490
+ configurable: true
491
+ });
492
+ var FakeAsyncLocalStorage = class {
493
+ disable() {
494
+ throw sharedAsyncLocalStorageNotAvailableError;
495
+ }
496
+ getStore() {
497
+ return void 0;
498
+ }
499
+ run() {
500
+ throw sharedAsyncLocalStorageNotAvailableError;
501
+ }
502
+ exit() {
503
+ throw sharedAsyncLocalStorageNotAvailableError;
504
+ }
505
+ enterWith() {
506
+ throw sharedAsyncLocalStorageNotAvailableError;
507
+ }
508
+ static bind(fn) {
509
+ return fn;
510
+ }
511
+ };
512
+ var maybeGlobalAsyncLocalStorage = typeof globalThis !== "undefined" && globalThis.AsyncLocalStorage;
513
+ function createAsyncLocalStorage() {
514
+ if (maybeGlobalAsyncLocalStorage) {
515
+ return new maybeGlobalAsyncLocalStorage();
516
+ }
517
+ return new FakeAsyncLocalStorage();
518
+ }
519
+ function bindSnapshot(fn) {
520
+ if (maybeGlobalAsyncLocalStorage) {
521
+ return maybeGlobalAsyncLocalStorage.bind(fn);
522
+ }
523
+ return FakeAsyncLocalStorage.bind(fn);
524
+ }
525
+ function createSnapshot() {
526
+ if (maybeGlobalAsyncLocalStorage) {
527
+ return maybeGlobalAsyncLocalStorage.snapshot();
528
+ }
529
+ return function(fn, ...args) {
530
+ return fn(...args);
531
+ };
532
+ }
533
+ }
534
+ });
535
+
536
+ // node_modules/next/dist/server/app-render/action-async-storage-instance.js
537
+ var require_action_async_storage_instance = __commonJS({
538
+ "node_modules/next/dist/server/app-render/action-async-storage-instance.js"(exports2) {
539
+ "use strict";
540
+ Object.defineProperty(exports2, "__esModule", {
541
+ value: true
542
+ });
543
+ Object.defineProperty(exports2, "actionAsyncStorageInstance", {
544
+ enumerable: true,
545
+ get: function() {
546
+ return actionAsyncStorageInstance;
547
+ }
548
+ });
549
+ var _asynclocalstorage = require_async_local_storage();
550
+ var actionAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)();
551
+ }
552
+ });
553
+
554
+ // node_modules/next/dist/server/app-render/action-async-storage.external.js
555
+ var require_action_async_storage_external = __commonJS({
556
+ "node_modules/next/dist/server/app-render/action-async-storage.external.js"(exports2) {
557
+ "use strict";
558
+ Object.defineProperty(exports2, "__esModule", {
559
+ value: true
560
+ });
561
+ Object.defineProperty(exports2, "actionAsyncStorage", {
562
+ enumerable: true,
563
+ get: function() {
564
+ return _actionasyncstorageinstance.actionAsyncStorageInstance;
565
+ }
566
+ });
567
+ var _actionasyncstorageinstance = require_action_async_storage_instance();
568
+ }
569
+ });
570
+
571
+ // node_modules/next/dist/client/components/redirect.js
572
+ var require_redirect = __commonJS({
573
+ "node_modules/next/dist/client/components/redirect.js"(exports2, module2) {
574
+ "use strict";
575
+ Object.defineProperty(exports2, "__esModule", {
576
+ value: true
577
+ });
578
+ function _export(target, all) {
579
+ for (var name in all) Object.defineProperty(target, name, {
580
+ enumerable: true,
581
+ get: all[name]
582
+ });
583
+ }
584
+ _export(exports2, {
585
+ getRedirectError: function() {
586
+ return getRedirectError;
587
+ },
588
+ getRedirectStatusCodeFromError: function() {
589
+ return getRedirectStatusCodeFromError;
590
+ },
591
+ getRedirectTypeFromError: function() {
592
+ return getRedirectTypeFromError;
593
+ },
594
+ getURLFromRedirectError: function() {
595
+ return getURLFromRedirectError;
596
+ },
597
+ permanentRedirect: function() {
598
+ return permanentRedirect;
599
+ },
600
+ redirect: function() {
601
+ return redirect;
602
+ }
603
+ });
604
+ var _redirectstatuscode = require_redirect_status_code();
605
+ var _redirecterror = require_redirect_error();
606
+ var actionAsyncStorage = typeof window === "undefined" ? require_action_async_storage_external().actionAsyncStorage : void 0;
607
+ function getRedirectError(url, type, statusCode = _redirectstatuscode.RedirectStatusCode.TemporaryRedirect) {
608
+ const error = Object.defineProperty(new Error(_redirecterror.REDIRECT_ERROR_CODE), "__NEXT_ERROR_CODE", {
609
+ value: "E394",
610
+ enumerable: false,
611
+ configurable: true
612
+ });
613
+ error.digest = `${_redirecterror.REDIRECT_ERROR_CODE};${type};${url};${statusCode};`;
614
+ return error;
615
+ }
616
+ function redirect(url, type) {
617
+ type ?? (type = actionAsyncStorage?.getStore()?.isAction ? _redirecterror.RedirectType.push : _redirecterror.RedirectType.replace);
618
+ throw getRedirectError(url, type, _redirectstatuscode.RedirectStatusCode.TemporaryRedirect);
619
+ }
620
+ function permanentRedirect(url, type = _redirecterror.RedirectType.replace) {
621
+ throw getRedirectError(url, type, _redirectstatuscode.RedirectStatusCode.PermanentRedirect);
622
+ }
623
+ function getURLFromRedirectError(error) {
624
+ if (!(0, _redirecterror.isRedirectError)(error)) return null;
625
+ return error.digest.split(";").slice(2, -2).join(";");
626
+ }
627
+ function getRedirectTypeFromError(error) {
628
+ if (!(0, _redirecterror.isRedirectError)(error)) {
629
+ throw Object.defineProperty(new Error("Not a redirect error"), "__NEXT_ERROR_CODE", {
630
+ value: "E260",
631
+ enumerable: false,
632
+ configurable: true
633
+ });
634
+ }
635
+ return error.digest.split(";", 2)[1];
636
+ }
637
+ function getRedirectStatusCodeFromError(error) {
638
+ if (!(0, _redirecterror.isRedirectError)(error)) {
639
+ throw Object.defineProperty(new Error("Not a redirect error"), "__NEXT_ERROR_CODE", {
640
+ value: "E260",
641
+ enumerable: false,
642
+ configurable: true
643
+ });
644
+ }
645
+ return Number(error.digest.split(";").at(-2));
646
+ }
647
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
648
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
649
+ Object.assign(exports2.default, exports2);
650
+ module2.exports = exports2.default;
651
+ }
652
+ }
653
+ });
654
+
655
+ // node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js
656
+ var require_http_access_fallback = __commonJS({
657
+ "node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js"(exports2, module2) {
658
+ "use strict";
659
+ Object.defineProperty(exports2, "__esModule", {
660
+ value: true
661
+ });
662
+ function _export(target, all) {
663
+ for (var name in all) Object.defineProperty(target, name, {
664
+ enumerable: true,
665
+ get: all[name]
666
+ });
667
+ }
668
+ _export(exports2, {
669
+ HTTPAccessErrorStatus: function() {
670
+ return HTTPAccessErrorStatus;
671
+ },
672
+ HTTP_ERROR_FALLBACK_ERROR_CODE: function() {
673
+ return HTTP_ERROR_FALLBACK_ERROR_CODE;
674
+ },
675
+ getAccessFallbackErrorTypeByStatus: function() {
676
+ return getAccessFallbackErrorTypeByStatus;
677
+ },
678
+ getAccessFallbackHTTPStatus: function() {
679
+ return getAccessFallbackHTTPStatus;
680
+ },
681
+ isHTTPAccessFallbackError: function() {
682
+ return isHTTPAccessFallbackError;
683
+ }
684
+ });
685
+ var HTTPAccessErrorStatus = {
686
+ NOT_FOUND: 404,
687
+ FORBIDDEN: 403,
688
+ UNAUTHORIZED: 401
689
+ };
690
+ var ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus));
691
+ var HTTP_ERROR_FALLBACK_ERROR_CODE = "NEXT_HTTP_ERROR_FALLBACK";
692
+ function isHTTPAccessFallbackError(error) {
693
+ if (typeof error !== "object" || error === null || !("digest" in error) || typeof error.digest !== "string") {
694
+ return false;
695
+ }
696
+ const [prefix, httpStatus] = error.digest.split(";");
697
+ return prefix === HTTP_ERROR_FALLBACK_ERROR_CODE && ALLOWED_CODES.has(Number(httpStatus));
698
+ }
699
+ function getAccessFallbackHTTPStatus(error) {
700
+ const httpStatus = error.digest.split(";")[1];
701
+ return Number(httpStatus);
702
+ }
703
+ function getAccessFallbackErrorTypeByStatus(status) {
704
+ switch (status) {
705
+ case 401:
706
+ return "unauthorized";
707
+ case 403:
708
+ return "forbidden";
709
+ case 404:
710
+ return "not-found";
711
+ default:
712
+ return;
713
+ }
714
+ }
715
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
716
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
717
+ Object.assign(exports2.default, exports2);
718
+ module2.exports = exports2.default;
719
+ }
720
+ }
721
+ });
722
+
723
+ // node_modules/next/dist/client/components/not-found.js
724
+ var require_not_found = __commonJS({
725
+ "node_modules/next/dist/client/components/not-found.js"(exports2, module2) {
726
+ "use strict";
727
+ Object.defineProperty(exports2, "__esModule", {
728
+ value: true
729
+ });
730
+ Object.defineProperty(exports2, "notFound", {
731
+ enumerable: true,
732
+ get: function() {
733
+ return notFound;
734
+ }
735
+ });
736
+ var _httpaccessfallback = require_http_access_fallback();
737
+ var DIGEST = `${_httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;
738
+ function notFound() {
739
+ const error = Object.defineProperty(new Error(DIGEST), "__NEXT_ERROR_CODE", {
740
+ value: "E394",
741
+ enumerable: false,
742
+ configurable: true
743
+ });
744
+ error.digest = DIGEST;
745
+ throw error;
746
+ }
747
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
748
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
749
+ Object.assign(exports2.default, exports2);
750
+ module2.exports = exports2.default;
751
+ }
752
+ }
753
+ });
754
+
755
+ // node_modules/next/dist/client/components/forbidden.js
756
+ var require_forbidden = __commonJS({
757
+ "node_modules/next/dist/client/components/forbidden.js"(exports2, module2) {
758
+ "use strict";
759
+ Object.defineProperty(exports2, "__esModule", {
760
+ value: true
761
+ });
762
+ Object.defineProperty(exports2, "forbidden", {
763
+ enumerable: true,
764
+ get: function() {
765
+ return forbidden;
766
+ }
767
+ });
768
+ var _httpaccessfallback = require_http_access_fallback();
769
+ var DIGEST = `${_httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE};403`;
770
+ function forbidden() {
771
+ if (!process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS) {
772
+ throw Object.defineProperty(new Error(`\`forbidden()\` is experimental and only allowed to be enabled when \`experimental.authInterrupts\` is enabled.`), "__NEXT_ERROR_CODE", {
773
+ value: "E488",
774
+ enumerable: false,
775
+ configurable: true
776
+ });
777
+ }
778
+ const error = Object.defineProperty(new Error(DIGEST), "__NEXT_ERROR_CODE", {
779
+ value: "E394",
780
+ enumerable: false,
781
+ configurable: true
782
+ });
783
+ error.digest = DIGEST;
784
+ throw error;
785
+ }
786
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
787
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
788
+ Object.assign(exports2.default, exports2);
789
+ module2.exports = exports2.default;
790
+ }
791
+ }
792
+ });
793
+
794
+ // node_modules/next/dist/client/components/unauthorized.js
795
+ var require_unauthorized = __commonJS({
796
+ "node_modules/next/dist/client/components/unauthorized.js"(exports2, module2) {
797
+ "use strict";
798
+ Object.defineProperty(exports2, "__esModule", {
799
+ value: true
800
+ });
801
+ Object.defineProperty(exports2, "unauthorized", {
802
+ enumerable: true,
803
+ get: function() {
804
+ return unauthorized;
805
+ }
806
+ });
807
+ var _httpaccessfallback = require_http_access_fallback();
808
+ var DIGEST = `${_httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE};401`;
809
+ function unauthorized() {
810
+ if (!process.env.__NEXT_EXPERIMENTAL_AUTH_INTERRUPTS) {
811
+ throw Object.defineProperty(new Error(`\`unauthorized()\` is experimental and only allowed to be used when \`experimental.authInterrupts\` is enabled.`), "__NEXT_ERROR_CODE", {
812
+ value: "E411",
813
+ enumerable: false,
814
+ configurable: true
815
+ });
816
+ }
817
+ const error = Object.defineProperty(new Error(DIGEST), "__NEXT_ERROR_CODE", {
818
+ value: "E394",
819
+ enumerable: false,
820
+ configurable: true
821
+ });
822
+ error.digest = DIGEST;
823
+ throw error;
824
+ }
825
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
826
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
827
+ Object.assign(exports2.default, exports2);
828
+ module2.exports = exports2.default;
829
+ }
830
+ }
831
+ });
832
+
833
+ // node_modules/next/dist/server/dynamic-rendering-utils.js
834
+ var require_dynamic_rendering_utils = __commonJS({
835
+ "node_modules/next/dist/server/dynamic-rendering-utils.js"(exports2) {
836
+ "use strict";
837
+ Object.defineProperty(exports2, "__esModule", {
838
+ value: true
839
+ });
840
+ function _export(target, all) {
841
+ for (var name in all) Object.defineProperty(target, name, {
842
+ enumerable: true,
843
+ get: all[name]
844
+ });
845
+ }
846
+ _export(exports2, {
847
+ isHangingPromiseRejectionError: function() {
848
+ return isHangingPromiseRejectionError;
849
+ },
850
+ makeDevtoolsIOAwarePromise: function() {
851
+ return makeDevtoolsIOAwarePromise;
852
+ },
853
+ makeHangingPromise: function() {
854
+ return makeHangingPromise;
855
+ }
856
+ });
857
+ function isHangingPromiseRejectionError(err) {
858
+ if (typeof err !== "object" || err === null || !("digest" in err)) {
859
+ return false;
860
+ }
861
+ return err.digest === HANGING_PROMISE_REJECTION;
862
+ }
863
+ var HANGING_PROMISE_REJECTION = "HANGING_PROMISE_REJECTION";
864
+ var HangingPromiseRejectionError = class extends Error {
865
+ constructor(route, expression) {
866
+ super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION;
867
+ }
868
+ };
869
+ var abortListenersBySignal = /* @__PURE__ */ new WeakMap();
870
+ function makeHangingPromise(signal, route, expression) {
871
+ if (signal.aborted) {
872
+ return Promise.reject(new HangingPromiseRejectionError(route, expression));
873
+ } else {
874
+ const hangingPromise = new Promise((_, reject) => {
875
+ const boundRejection = reject.bind(null, new HangingPromiseRejectionError(route, expression));
876
+ let currentListeners = abortListenersBySignal.get(signal);
877
+ if (currentListeners) {
878
+ currentListeners.push(boundRejection);
879
+ } else {
880
+ const listeners = [
881
+ boundRejection
882
+ ];
883
+ abortListenersBySignal.set(signal, listeners);
884
+ signal.addEventListener("abort", () => {
885
+ for (let i = 0; i < listeners.length; i++) {
886
+ listeners[i]();
887
+ }
888
+ }, {
889
+ once: true
890
+ });
891
+ }
892
+ });
893
+ hangingPromise.catch(ignoreReject);
894
+ return hangingPromise;
895
+ }
896
+ }
897
+ function ignoreReject() {
898
+ }
899
+ function makeDevtoolsIOAwarePromise(underlying, requestStore, stage) {
900
+ if (requestStore.stagedRendering) {
901
+ return requestStore.stagedRendering.delayUntilStage(stage, void 0, underlying);
902
+ }
903
+ return new Promise((resolve) => {
904
+ setTimeout(() => {
905
+ resolve(underlying);
906
+ }, 0);
907
+ });
908
+ }
909
+ }
910
+ });
911
+
912
+ // node_modules/next/dist/server/lib/router-utils/is-postpone.js
913
+ var require_is_postpone = __commonJS({
914
+ "node_modules/next/dist/server/lib/router-utils/is-postpone.js"(exports2) {
915
+ "use strict";
916
+ Object.defineProperty(exports2, "__esModule", {
917
+ value: true
918
+ });
919
+ Object.defineProperty(exports2, "isPostpone", {
920
+ enumerable: true,
921
+ get: function() {
922
+ return isPostpone;
923
+ }
924
+ });
925
+ var REACT_POSTPONE_TYPE = /* @__PURE__ */ Symbol.for("react.postpone");
926
+ function isPostpone(error) {
927
+ return typeof error === "object" && error !== null && error.$$typeof === REACT_POSTPONE_TYPE;
928
+ }
929
+ }
930
+ });
931
+
932
+ // node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js
933
+ var require_bailout_to_csr = __commonJS({
934
+ "node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js"(exports2) {
935
+ "use strict";
936
+ Object.defineProperty(exports2, "__esModule", {
937
+ value: true
938
+ });
939
+ function _export(target, all) {
940
+ for (var name in all) Object.defineProperty(target, name, {
941
+ enumerable: true,
942
+ get: all[name]
943
+ });
944
+ }
945
+ _export(exports2, {
946
+ BailoutToCSRError: function() {
947
+ return BailoutToCSRError;
948
+ },
949
+ isBailoutToCSRError: function() {
950
+ return isBailoutToCSRError;
951
+ }
952
+ });
953
+ var BAILOUT_TO_CSR = "BAILOUT_TO_CLIENT_SIDE_RENDERING";
954
+ var BailoutToCSRError = class extends Error {
955
+ constructor(reason) {
956
+ super(`Bail out to client-side rendering: ${reason}`), this.reason = reason, this.digest = BAILOUT_TO_CSR;
957
+ }
958
+ };
959
+ function isBailoutToCSRError(err) {
960
+ if (typeof err !== "object" || err === null || !("digest" in err)) {
961
+ return false;
962
+ }
963
+ return err.digest === BAILOUT_TO_CSR;
964
+ }
965
+ }
966
+ });
967
+
968
+ // node_modules/next/dist/client/components/is-next-router-error.js
969
+ var require_is_next_router_error = __commonJS({
970
+ "node_modules/next/dist/client/components/is-next-router-error.js"(exports2, module2) {
971
+ "use strict";
972
+ Object.defineProperty(exports2, "__esModule", {
973
+ value: true
974
+ });
975
+ Object.defineProperty(exports2, "isNextRouterError", {
976
+ enumerable: true,
977
+ get: function() {
978
+ return isNextRouterError;
979
+ }
980
+ });
981
+ var _httpaccessfallback = require_http_access_fallback();
982
+ var _redirecterror = require_redirect_error();
983
+ function isNextRouterError(error) {
984
+ return (0, _redirecterror.isRedirectError)(error) || (0, _httpaccessfallback.isHTTPAccessFallbackError)(error);
985
+ }
986
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
987
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
988
+ Object.assign(exports2.default, exports2);
989
+ module2.exports = exports2.default;
990
+ }
991
+ }
992
+ });
993
+
994
+ // node_modules/next/dist/client/components/hooks-server-context.js
995
+ var require_hooks_server_context = __commonJS({
996
+ "node_modules/next/dist/client/components/hooks-server-context.js"(exports2, module2) {
997
+ "use strict";
998
+ Object.defineProperty(exports2, "__esModule", {
999
+ value: true
1000
+ });
1001
+ function _export(target, all) {
1002
+ for (var name in all) Object.defineProperty(target, name, {
1003
+ enumerable: true,
1004
+ get: all[name]
1005
+ });
1006
+ }
1007
+ _export(exports2, {
1008
+ DynamicServerError: function() {
1009
+ return DynamicServerError;
1010
+ },
1011
+ isDynamicServerError: function() {
1012
+ return isDynamicServerError;
1013
+ }
1014
+ });
1015
+ var DYNAMIC_ERROR_CODE = "DYNAMIC_SERVER_USAGE";
1016
+ var DynamicServerError = class extends Error {
1017
+ constructor(description) {
1018
+ super(`Dynamic server usage: ${description}`), this.description = description, this.digest = DYNAMIC_ERROR_CODE;
1019
+ }
1020
+ };
1021
+ function isDynamicServerError(err) {
1022
+ if (typeof err !== "object" || err === null || !("digest" in err) || typeof err.digest !== "string") {
1023
+ return false;
1024
+ }
1025
+ return err.digest === DYNAMIC_ERROR_CODE;
1026
+ }
1027
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
1028
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
1029
+ Object.assign(exports2.default, exports2);
1030
+ module2.exports = exports2.default;
1031
+ }
1032
+ }
1033
+ });
1034
+
1035
+ // node_modules/next/dist/client/components/static-generation-bailout.js
1036
+ var require_static_generation_bailout = __commonJS({
1037
+ "node_modules/next/dist/client/components/static-generation-bailout.js"(exports2, module2) {
1038
+ "use strict";
1039
+ Object.defineProperty(exports2, "__esModule", {
1040
+ value: true
1041
+ });
1042
+ function _export(target, all) {
1043
+ for (var name in all) Object.defineProperty(target, name, {
1044
+ enumerable: true,
1045
+ get: all[name]
1046
+ });
1047
+ }
1048
+ _export(exports2, {
1049
+ StaticGenBailoutError: function() {
1050
+ return StaticGenBailoutError;
1051
+ },
1052
+ isStaticGenBailoutError: function() {
1053
+ return isStaticGenBailoutError;
1054
+ }
1055
+ });
1056
+ var NEXT_STATIC_GEN_BAILOUT = "NEXT_STATIC_GEN_BAILOUT";
1057
+ var StaticGenBailoutError = class extends Error {
1058
+ constructor(...args) {
1059
+ super(...args), this.code = NEXT_STATIC_GEN_BAILOUT;
1060
+ }
1061
+ };
1062
+ function isStaticGenBailoutError(error) {
1063
+ if (typeof error !== "object" || error === null || !("code" in error)) {
1064
+ return false;
1065
+ }
1066
+ return error.code === NEXT_STATIC_GEN_BAILOUT;
1067
+ }
1068
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
1069
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
1070
+ Object.assign(exports2.default, exports2);
1071
+ module2.exports = exports2.default;
1072
+ }
1073
+ }
1074
+ });
1075
+
1076
+ // node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js
1077
+ var require_work_unit_async_storage_instance = __commonJS({
1078
+ "node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js"(exports2) {
1079
+ "use strict";
1080
+ Object.defineProperty(exports2, "__esModule", {
1081
+ value: true
1082
+ });
1083
+ Object.defineProperty(exports2, "workUnitAsyncStorageInstance", {
1084
+ enumerable: true,
1085
+ get: function() {
1086
+ return workUnitAsyncStorageInstance;
1087
+ }
1088
+ });
1089
+ var _asynclocalstorage = require_async_local_storage();
1090
+ var workUnitAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)();
1091
+ }
1092
+ });
1093
+
1094
+ // node_modules/next/dist/client/components/app-router-headers.js
1095
+ var require_app_router_headers = __commonJS({
1096
+ "node_modules/next/dist/client/components/app-router-headers.js"(exports2, module2) {
1097
+ "use strict";
1098
+ Object.defineProperty(exports2, "__esModule", {
1099
+ value: true
1100
+ });
1101
+ function _export(target, all) {
1102
+ for (var name in all) Object.defineProperty(target, name, {
1103
+ enumerable: true,
1104
+ get: all[name]
1105
+ });
1106
+ }
1107
+ _export(exports2, {
1108
+ ACTION_HEADER: function() {
1109
+ return ACTION_HEADER;
1110
+ },
1111
+ FLIGHT_HEADERS: function() {
1112
+ return FLIGHT_HEADERS;
1113
+ },
1114
+ NEXT_ACTION_NOT_FOUND_HEADER: function() {
1115
+ return NEXT_ACTION_NOT_FOUND_HEADER;
1116
+ },
1117
+ NEXT_ACTION_REVALIDATED_HEADER: function() {
1118
+ return NEXT_ACTION_REVALIDATED_HEADER;
1119
+ },
1120
+ NEXT_DID_POSTPONE_HEADER: function() {
1121
+ return NEXT_DID_POSTPONE_HEADER;
1122
+ },
1123
+ NEXT_HMR_REFRESH_HASH_COOKIE: function() {
1124
+ return NEXT_HMR_REFRESH_HASH_COOKIE;
1125
+ },
1126
+ NEXT_HMR_REFRESH_HEADER: function() {
1127
+ return NEXT_HMR_REFRESH_HEADER;
1128
+ },
1129
+ NEXT_HTML_REQUEST_ID_HEADER: function() {
1130
+ return NEXT_HTML_REQUEST_ID_HEADER;
1131
+ },
1132
+ NEXT_IS_PRERENDER_HEADER: function() {
1133
+ return NEXT_IS_PRERENDER_HEADER;
1134
+ },
1135
+ NEXT_REQUEST_ID_HEADER: function() {
1136
+ return NEXT_REQUEST_ID_HEADER;
1137
+ },
1138
+ NEXT_REWRITTEN_PATH_HEADER: function() {
1139
+ return NEXT_REWRITTEN_PATH_HEADER;
1140
+ },
1141
+ NEXT_REWRITTEN_QUERY_HEADER: function() {
1142
+ return NEXT_REWRITTEN_QUERY_HEADER;
1143
+ },
1144
+ NEXT_ROUTER_PREFETCH_HEADER: function() {
1145
+ return NEXT_ROUTER_PREFETCH_HEADER;
1146
+ },
1147
+ NEXT_ROUTER_SEGMENT_PREFETCH_HEADER: function() {
1148
+ return NEXT_ROUTER_SEGMENT_PREFETCH_HEADER;
1149
+ },
1150
+ NEXT_ROUTER_STALE_TIME_HEADER: function() {
1151
+ return NEXT_ROUTER_STALE_TIME_HEADER;
1152
+ },
1153
+ NEXT_ROUTER_STATE_TREE_HEADER: function() {
1154
+ return NEXT_ROUTER_STATE_TREE_HEADER;
1155
+ },
1156
+ NEXT_RSC_UNION_QUERY: function() {
1157
+ return NEXT_RSC_UNION_QUERY;
1158
+ },
1159
+ NEXT_URL: function() {
1160
+ return NEXT_URL;
1161
+ },
1162
+ RSC_CONTENT_TYPE_HEADER: function() {
1163
+ return RSC_CONTENT_TYPE_HEADER;
1164
+ },
1165
+ RSC_HEADER: function() {
1166
+ return RSC_HEADER;
1167
+ }
1168
+ });
1169
+ var RSC_HEADER = "rsc";
1170
+ var ACTION_HEADER = "next-action";
1171
+ var NEXT_ROUTER_STATE_TREE_HEADER = "next-router-state-tree";
1172
+ var NEXT_ROUTER_PREFETCH_HEADER = "next-router-prefetch";
1173
+ var NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = "next-router-segment-prefetch";
1174
+ var NEXT_HMR_REFRESH_HEADER = "next-hmr-refresh";
1175
+ var NEXT_HMR_REFRESH_HASH_COOKIE = "__next_hmr_refresh_hash__";
1176
+ var NEXT_URL = "next-url";
1177
+ var RSC_CONTENT_TYPE_HEADER = "text/x-component";
1178
+ var FLIGHT_HEADERS = [
1179
+ RSC_HEADER,
1180
+ NEXT_ROUTER_STATE_TREE_HEADER,
1181
+ NEXT_ROUTER_PREFETCH_HEADER,
1182
+ NEXT_HMR_REFRESH_HEADER,
1183
+ NEXT_ROUTER_SEGMENT_PREFETCH_HEADER
1184
+ ];
1185
+ var NEXT_RSC_UNION_QUERY = "_rsc";
1186
+ var NEXT_ROUTER_STALE_TIME_HEADER = "x-nextjs-stale-time";
1187
+ var NEXT_DID_POSTPONE_HEADER = "x-nextjs-postponed";
1188
+ var NEXT_REWRITTEN_PATH_HEADER = "x-nextjs-rewritten-path";
1189
+ var NEXT_REWRITTEN_QUERY_HEADER = "x-nextjs-rewritten-query";
1190
+ var NEXT_IS_PRERENDER_HEADER = "x-nextjs-prerender";
1191
+ var NEXT_ACTION_NOT_FOUND_HEADER = "x-nextjs-action-not-found";
1192
+ var NEXT_REQUEST_ID_HEADER = "x-nextjs-request-id";
1193
+ var NEXT_HTML_REQUEST_ID_HEADER = "x-nextjs-html-request-id";
1194
+ var NEXT_ACTION_REVALIDATED_HEADER = "x-action-revalidated";
1195
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
1196
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
1197
+ Object.assign(exports2.default, exports2);
1198
+ module2.exports = exports2.default;
1199
+ }
1200
+ }
1201
+ });
1202
+
1203
+ // node_modules/next/dist/shared/lib/invariant-error.js
1204
+ var require_invariant_error = __commonJS({
1205
+ "node_modules/next/dist/shared/lib/invariant-error.js"(exports2) {
1206
+ "use strict";
1207
+ Object.defineProperty(exports2, "__esModule", {
1208
+ value: true
1209
+ });
1210
+ Object.defineProperty(exports2, "InvariantError", {
1211
+ enumerable: true,
1212
+ get: function() {
1213
+ return InvariantError;
1214
+ }
1215
+ });
1216
+ var InvariantError = class extends Error {
1217
+ constructor(message, options) {
1218
+ super(`Invariant: ${message.endsWith(".") ? message : message + "."} This is a bug in Next.js.`, options);
1219
+ this.name = "InvariantError";
1220
+ }
1221
+ };
1222
+ }
1223
+ });
1224
+
1225
+ // node_modules/next/dist/server/app-render/work-unit-async-storage.external.js
1226
+ var require_work_unit_async_storage_external = __commonJS({
1227
+ "node_modules/next/dist/server/app-render/work-unit-async-storage.external.js"(exports2) {
1228
+ "use strict";
1229
+ Object.defineProperty(exports2, "__esModule", {
1230
+ value: true
1231
+ });
1232
+ function _export(target, all) {
1233
+ for (var name in all) Object.defineProperty(target, name, {
1234
+ enumerable: true,
1235
+ get: all[name]
1236
+ });
1237
+ }
1238
+ _export(exports2, {
1239
+ getCacheSignal: function() {
1240
+ return getCacheSignal;
1241
+ },
1242
+ getDraftModeProviderForCacheScope: function() {
1243
+ return getDraftModeProviderForCacheScope;
1244
+ },
1245
+ getHmrRefreshHash: function() {
1246
+ return getHmrRefreshHash;
1247
+ },
1248
+ getPrerenderResumeDataCache: function() {
1249
+ return getPrerenderResumeDataCache;
1250
+ },
1251
+ getRenderResumeDataCache: function() {
1252
+ return getRenderResumeDataCache;
1253
+ },
1254
+ getRuntimeStagePromise: function() {
1255
+ return getRuntimeStagePromise;
1256
+ },
1257
+ getServerComponentsHmrCache: function() {
1258
+ return getServerComponentsHmrCache;
1259
+ },
1260
+ isHmrRefresh: function() {
1261
+ return isHmrRefresh;
1262
+ },
1263
+ throwForMissingRequestStore: function() {
1264
+ return throwForMissingRequestStore;
1265
+ },
1266
+ throwInvariantForMissingStore: function() {
1267
+ return throwInvariantForMissingStore;
1268
+ },
1269
+ workUnitAsyncStorage: function() {
1270
+ return _workunitasyncstorageinstance.workUnitAsyncStorageInstance;
1271
+ }
1272
+ });
1273
+ var _workunitasyncstorageinstance = require_work_unit_async_storage_instance();
1274
+ var _approuterheaders = require_app_router_headers();
1275
+ var _invarianterror = require_invariant_error();
1276
+ function throwForMissingRequestStore(callingExpression) {
1277
+ throw Object.defineProperty(new Error(`\`${callingExpression}\` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`), "__NEXT_ERROR_CODE", {
1278
+ value: "E251",
1279
+ enumerable: false,
1280
+ configurable: true
1281
+ });
1282
+ }
1283
+ function throwInvariantForMissingStore() {
1284
+ throw Object.defineProperty(new _invarianterror.InvariantError("Expected workUnitAsyncStorage to have a store."), "__NEXT_ERROR_CODE", {
1285
+ value: "E696",
1286
+ enumerable: false,
1287
+ configurable: true
1288
+ });
1289
+ }
1290
+ function getPrerenderResumeDataCache(workUnitStore) {
1291
+ switch (workUnitStore.type) {
1292
+ case "prerender":
1293
+ case "prerender-runtime":
1294
+ case "prerender-ppr":
1295
+ return workUnitStore.prerenderResumeDataCache;
1296
+ case "prerender-client":
1297
+ return workUnitStore.prerenderResumeDataCache;
1298
+ case "request": {
1299
+ if (workUnitStore.prerenderResumeDataCache) {
1300
+ return workUnitStore.prerenderResumeDataCache;
1301
+ }
1302
+ }
1303
+ case "prerender-legacy":
1304
+ case "cache":
1305
+ case "private-cache":
1306
+ case "unstable-cache":
1307
+ return null;
1308
+ default:
1309
+ return workUnitStore;
1310
+ }
1311
+ }
1312
+ function getRenderResumeDataCache(workUnitStore) {
1313
+ switch (workUnitStore.type) {
1314
+ case "request":
1315
+ case "prerender":
1316
+ case "prerender-runtime":
1317
+ case "prerender-client":
1318
+ if (workUnitStore.renderResumeDataCache) {
1319
+ return workUnitStore.renderResumeDataCache;
1320
+ }
1321
+ // fallthrough
1322
+ case "prerender-ppr":
1323
+ return workUnitStore.prerenderResumeDataCache ?? null;
1324
+ case "cache":
1325
+ case "private-cache":
1326
+ case "unstable-cache":
1327
+ case "prerender-legacy":
1328
+ return null;
1329
+ default:
1330
+ return workUnitStore;
1331
+ }
1332
+ }
1333
+ function getHmrRefreshHash(workStore, workUnitStore) {
1334
+ if (workStore.dev) {
1335
+ switch (workUnitStore.type) {
1336
+ case "cache":
1337
+ case "private-cache":
1338
+ case "prerender":
1339
+ case "prerender-runtime":
1340
+ return workUnitStore.hmrRefreshHash;
1341
+ case "request":
1342
+ var _workUnitStore_cookies_get;
1343
+ return (_workUnitStore_cookies_get = workUnitStore.cookies.get(_approuterheaders.NEXT_HMR_REFRESH_HASH_COOKIE)) == null ? void 0 : _workUnitStore_cookies_get.value;
1344
+ case "prerender-client":
1345
+ case "prerender-ppr":
1346
+ case "prerender-legacy":
1347
+ case "unstable-cache":
1348
+ break;
1349
+ default:
1350
+ workUnitStore;
1351
+ }
1352
+ }
1353
+ return void 0;
1354
+ }
1355
+ function isHmrRefresh(workStore, workUnitStore) {
1356
+ if (workStore.dev) {
1357
+ switch (workUnitStore.type) {
1358
+ case "cache":
1359
+ case "private-cache":
1360
+ case "request":
1361
+ return workUnitStore.isHmrRefresh ?? false;
1362
+ case "prerender":
1363
+ case "prerender-client":
1364
+ case "prerender-runtime":
1365
+ case "prerender-ppr":
1366
+ case "prerender-legacy":
1367
+ case "unstable-cache":
1368
+ break;
1369
+ default:
1370
+ workUnitStore;
1371
+ }
1372
+ }
1373
+ return false;
1374
+ }
1375
+ function getServerComponentsHmrCache(workStore, workUnitStore) {
1376
+ if (workStore.dev) {
1377
+ switch (workUnitStore.type) {
1378
+ case "cache":
1379
+ case "private-cache":
1380
+ case "request":
1381
+ return workUnitStore.serverComponentsHmrCache;
1382
+ case "prerender":
1383
+ case "prerender-client":
1384
+ case "prerender-runtime":
1385
+ case "prerender-ppr":
1386
+ case "prerender-legacy":
1387
+ case "unstable-cache":
1388
+ break;
1389
+ default:
1390
+ workUnitStore;
1391
+ }
1392
+ }
1393
+ return void 0;
1394
+ }
1395
+ function getDraftModeProviderForCacheScope(workStore, workUnitStore) {
1396
+ if (workStore.isDraftMode) {
1397
+ switch (workUnitStore.type) {
1398
+ case "cache":
1399
+ case "private-cache":
1400
+ case "unstable-cache":
1401
+ case "prerender-runtime":
1402
+ case "request":
1403
+ return workUnitStore.draftMode;
1404
+ case "prerender":
1405
+ case "prerender-client":
1406
+ case "prerender-ppr":
1407
+ case "prerender-legacy":
1408
+ break;
1409
+ default:
1410
+ workUnitStore;
1411
+ }
1412
+ }
1413
+ return void 0;
1414
+ }
1415
+ function getCacheSignal(workUnitStore) {
1416
+ switch (workUnitStore.type) {
1417
+ case "prerender":
1418
+ case "prerender-client":
1419
+ case "prerender-runtime":
1420
+ return workUnitStore.cacheSignal;
1421
+ case "request": {
1422
+ if (workUnitStore.cacheSignal) {
1423
+ return workUnitStore.cacheSignal;
1424
+ }
1425
+ }
1426
+ case "prerender-ppr":
1427
+ case "prerender-legacy":
1428
+ case "cache":
1429
+ case "private-cache":
1430
+ case "unstable-cache":
1431
+ return null;
1432
+ default:
1433
+ return workUnitStore;
1434
+ }
1435
+ }
1436
+ function getRuntimeStagePromise(workUnitStore) {
1437
+ switch (workUnitStore.type) {
1438
+ case "prerender-runtime":
1439
+ case "private-cache":
1440
+ return workUnitStore.runtimeStagePromise;
1441
+ case "prerender":
1442
+ case "prerender-client":
1443
+ case "prerender-ppr":
1444
+ case "prerender-legacy":
1445
+ case "request":
1446
+ case "cache":
1447
+ case "unstable-cache":
1448
+ return null;
1449
+ default:
1450
+ return workUnitStore;
1451
+ }
1452
+ }
1453
+ }
1454
+ });
1455
+
1456
+ // node_modules/next/dist/server/app-render/work-async-storage-instance.js
1457
+ var require_work_async_storage_instance = __commonJS({
1458
+ "node_modules/next/dist/server/app-render/work-async-storage-instance.js"(exports2) {
1459
+ "use strict";
1460
+ Object.defineProperty(exports2, "__esModule", {
1461
+ value: true
1462
+ });
1463
+ Object.defineProperty(exports2, "workAsyncStorageInstance", {
1464
+ enumerable: true,
1465
+ get: function() {
1466
+ return workAsyncStorageInstance;
1467
+ }
1468
+ });
1469
+ var _asynclocalstorage = require_async_local_storage();
1470
+ var workAsyncStorageInstance = (0, _asynclocalstorage.createAsyncLocalStorage)();
1471
+ }
1472
+ });
1473
+
1474
+ // node_modules/next/dist/server/app-render/work-async-storage.external.js
1475
+ var require_work_async_storage_external = __commonJS({
1476
+ "node_modules/next/dist/server/app-render/work-async-storage.external.js"(exports2) {
1477
+ "use strict";
1478
+ Object.defineProperty(exports2, "__esModule", {
1479
+ value: true
1480
+ });
1481
+ Object.defineProperty(exports2, "workAsyncStorage", {
1482
+ enumerable: true,
1483
+ get: function() {
1484
+ return _workasyncstorageinstance.workAsyncStorageInstance;
1485
+ }
1486
+ });
1487
+ var _workasyncstorageinstance = require_work_async_storage_instance();
1488
+ }
1489
+ });
1490
+
1491
+ // node_modules/next/dist/lib/framework/boundary-constants.js
1492
+ var require_boundary_constants = __commonJS({
1493
+ "node_modules/next/dist/lib/framework/boundary-constants.js"(exports2) {
1494
+ "use strict";
1495
+ Object.defineProperty(exports2, "__esModule", {
1496
+ value: true
1497
+ });
1498
+ function _export(target, all) {
1499
+ for (var name in all) Object.defineProperty(target, name, {
1500
+ enumerable: true,
1501
+ get: all[name]
1502
+ });
1503
+ }
1504
+ _export(exports2, {
1505
+ METADATA_BOUNDARY_NAME: function() {
1506
+ return METADATA_BOUNDARY_NAME;
1507
+ },
1508
+ OUTLET_BOUNDARY_NAME: function() {
1509
+ return OUTLET_BOUNDARY_NAME;
1510
+ },
1511
+ ROOT_LAYOUT_BOUNDARY_NAME: function() {
1512
+ return ROOT_LAYOUT_BOUNDARY_NAME;
1513
+ },
1514
+ VIEWPORT_BOUNDARY_NAME: function() {
1515
+ return VIEWPORT_BOUNDARY_NAME;
1516
+ }
1517
+ });
1518
+ var METADATA_BOUNDARY_NAME = "__next_metadata_boundary__";
1519
+ var VIEWPORT_BOUNDARY_NAME = "__next_viewport_boundary__";
1520
+ var OUTLET_BOUNDARY_NAME = "__next_outlet_boundary__";
1521
+ var ROOT_LAYOUT_BOUNDARY_NAME = "__next_root_layout_boundary__";
1522
+ }
1523
+ });
1524
+
1525
+ // node_modules/next/dist/lib/scheduler.js
1526
+ var require_scheduler = __commonJS({
1527
+ "node_modules/next/dist/lib/scheduler.js"(exports2) {
1528
+ "use strict";
1529
+ Object.defineProperty(exports2, "__esModule", {
1530
+ value: true
1531
+ });
1532
+ function _export(target, all) {
1533
+ for (var name in all) Object.defineProperty(target, name, {
1534
+ enumerable: true,
1535
+ get: all[name]
1536
+ });
1537
+ }
1538
+ _export(exports2, {
1539
+ atLeastOneTask: function() {
1540
+ return atLeastOneTask;
1541
+ },
1542
+ scheduleImmediate: function() {
1543
+ return scheduleImmediate;
1544
+ },
1545
+ scheduleOnNextTick: function() {
1546
+ return scheduleOnNextTick;
1547
+ },
1548
+ waitAtLeastOneReactRenderTask: function() {
1549
+ return waitAtLeastOneReactRenderTask;
1550
+ }
1551
+ });
1552
+ var scheduleOnNextTick = (cb) => {
1553
+ Promise.resolve().then(() => {
1554
+ if (process.env.NEXT_RUNTIME === "edge") {
1555
+ setTimeout(cb, 0);
1556
+ } else {
1557
+ process.nextTick(cb);
1558
+ }
1559
+ });
1560
+ };
1561
+ var scheduleImmediate = (cb) => {
1562
+ if (process.env.NEXT_RUNTIME === "edge") {
1563
+ setTimeout(cb, 0);
1564
+ } else {
1565
+ setImmediate(cb);
1566
+ }
1567
+ };
1568
+ function atLeastOneTask() {
1569
+ return new Promise((resolve) => scheduleImmediate(resolve));
1570
+ }
1571
+ function waitAtLeastOneReactRenderTask() {
1572
+ if (process.env.NEXT_RUNTIME === "edge") {
1573
+ return new Promise((r) => setTimeout(r, 0));
1574
+ } else {
1575
+ return new Promise((r) => setImmediate(r));
1576
+ }
1577
+ }
1578
+ }
1579
+ });
1580
+
1581
+ // node_modules/next/dist/server/app-render/dynamic-rendering.js
1582
+ var require_dynamic_rendering = __commonJS({
1583
+ "node_modules/next/dist/server/app-render/dynamic-rendering.js"(exports2) {
1584
+ "use strict";
1585
+ Object.defineProperty(exports2, "__esModule", {
1586
+ value: true
1587
+ });
1588
+ function _export(target, all) {
1589
+ for (var name in all) Object.defineProperty(target, name, {
1590
+ enumerable: true,
1591
+ get: all[name]
1592
+ });
1593
+ }
1594
+ _export(exports2, {
1595
+ Postpone: function() {
1596
+ return Postpone;
1597
+ },
1598
+ PreludeState: function() {
1599
+ return PreludeState;
1600
+ },
1601
+ abortAndThrowOnSynchronousRequestDataAccess: function() {
1602
+ return abortAndThrowOnSynchronousRequestDataAccess;
1603
+ },
1604
+ abortOnSynchronousPlatformIOAccess: function() {
1605
+ return abortOnSynchronousPlatformIOAccess;
1606
+ },
1607
+ accessedDynamicData: function() {
1608
+ return accessedDynamicData;
1609
+ },
1610
+ annotateDynamicAccess: function() {
1611
+ return annotateDynamicAccess;
1612
+ },
1613
+ consumeDynamicAccess: function() {
1614
+ return consumeDynamicAccess;
1615
+ },
1616
+ createDynamicTrackingState: function() {
1617
+ return createDynamicTrackingState;
1618
+ },
1619
+ createDynamicValidationState: function() {
1620
+ return createDynamicValidationState;
1621
+ },
1622
+ createHangingInputAbortSignal: function() {
1623
+ return createHangingInputAbortSignal;
1624
+ },
1625
+ createRenderInBrowserAbortSignal: function() {
1626
+ return createRenderInBrowserAbortSignal;
1627
+ },
1628
+ delayUntilRuntimeStage: function() {
1629
+ return delayUntilRuntimeStage;
1630
+ },
1631
+ formatDynamicAPIAccesses: function() {
1632
+ return formatDynamicAPIAccesses;
1633
+ },
1634
+ getFirstDynamicReason: function() {
1635
+ return getFirstDynamicReason;
1636
+ },
1637
+ getStaticShellDisallowedDynamicReasons: function() {
1638
+ return getStaticShellDisallowedDynamicReasons;
1639
+ },
1640
+ isDynamicPostpone: function() {
1641
+ return isDynamicPostpone;
1642
+ },
1643
+ isPrerenderInterruptedError: function() {
1644
+ return isPrerenderInterruptedError;
1645
+ },
1646
+ logDisallowedDynamicError: function() {
1647
+ return logDisallowedDynamicError;
1648
+ },
1649
+ markCurrentScopeAsDynamic: function() {
1650
+ return markCurrentScopeAsDynamic;
1651
+ },
1652
+ postponeWithTracking: function() {
1653
+ return postponeWithTracking;
1654
+ },
1655
+ throwIfDisallowedDynamic: function() {
1656
+ return throwIfDisallowedDynamic;
1657
+ },
1658
+ throwToInterruptStaticGeneration: function() {
1659
+ return throwToInterruptStaticGeneration;
1660
+ },
1661
+ trackAllowedDynamicAccess: function() {
1662
+ return trackAllowedDynamicAccess;
1663
+ },
1664
+ trackDynamicDataInDynamicRender: function() {
1665
+ return trackDynamicDataInDynamicRender;
1666
+ },
1667
+ trackDynamicHoleInRuntimeShell: function() {
1668
+ return trackDynamicHoleInRuntimeShell;
1669
+ },
1670
+ trackDynamicHoleInStaticShell: function() {
1671
+ return trackDynamicHoleInStaticShell;
1672
+ },
1673
+ useDynamicRouteParams: function() {
1674
+ return useDynamicRouteParams;
1675
+ },
1676
+ useDynamicSearchParams: function() {
1677
+ return useDynamicSearchParams;
1678
+ }
1679
+ });
1680
+ var _react = /* @__PURE__ */ _interop_require_default(require("react"));
1681
+ var _hooksservercontext = require_hooks_server_context();
1682
+ var _staticgenerationbailout = require_static_generation_bailout();
1683
+ var _workunitasyncstorageexternal = require_work_unit_async_storage_external();
1684
+ var _workasyncstorageexternal = require_work_async_storage_external();
1685
+ var _dynamicrenderingutils = require_dynamic_rendering_utils();
1686
+ var _boundaryconstants = require_boundary_constants();
1687
+ var _scheduler = require_scheduler();
1688
+ var _bailouttocsr = require_bailout_to_csr();
1689
+ var _invarianterror = require_invariant_error();
1690
+ function _interop_require_default(obj) {
1691
+ return obj && obj.__esModule ? obj : {
1692
+ default: obj
1693
+ };
1694
+ }
1695
+ var hasPostpone = typeof _react.default.unstable_postpone === "function";
1696
+ function createDynamicTrackingState(isDebugDynamicAccesses) {
1697
+ return {
1698
+ isDebugDynamicAccesses,
1699
+ dynamicAccesses: [],
1700
+ syncDynamicErrorWithStack: null
1701
+ };
1702
+ }
1703
+ function createDynamicValidationState() {
1704
+ return {
1705
+ hasSuspenseAboveBody: false,
1706
+ hasDynamicMetadata: false,
1707
+ dynamicMetadata: null,
1708
+ hasDynamicViewport: false,
1709
+ hasAllowedDynamic: false,
1710
+ dynamicErrors: []
1711
+ };
1712
+ }
1713
+ function getFirstDynamicReason(trackingState) {
1714
+ var _trackingState_dynamicAccesses_;
1715
+ return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression;
1716
+ }
1717
+ function markCurrentScopeAsDynamic(store, workUnitStore, expression) {
1718
+ if (workUnitStore) {
1719
+ switch (workUnitStore.type) {
1720
+ case "cache":
1721
+ case "unstable-cache":
1722
+ return;
1723
+ case "private-cache":
1724
+ return;
1725
+ case "prerender-legacy":
1726
+ case "prerender-ppr":
1727
+ case "request":
1728
+ break;
1729
+ default:
1730
+ workUnitStore;
1731
+ }
1732
+ }
1733
+ if (store.forceDynamic || store.forceStatic) return;
1734
+ if (store.dynamicShouldError) {
1735
+ throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", {
1736
+ value: "E553",
1737
+ enumerable: false,
1738
+ configurable: true
1739
+ });
1740
+ }
1741
+ if (workUnitStore) {
1742
+ switch (workUnitStore.type) {
1743
+ case "prerender-ppr":
1744
+ return postponeWithTracking(store.route, expression, workUnitStore.dynamicTracking);
1745
+ case "prerender-legacy":
1746
+ workUnitStore.revalidate = 0;
1747
+ const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", {
1748
+ value: "E550",
1749
+ enumerable: false,
1750
+ configurable: true
1751
+ });
1752
+ store.dynamicUsageDescription = expression;
1753
+ store.dynamicUsageStack = err.stack;
1754
+ throw err;
1755
+ case "request":
1756
+ if (process.env.NODE_ENV !== "production") {
1757
+ workUnitStore.usedDynamic = true;
1758
+ }
1759
+ break;
1760
+ default:
1761
+ workUnitStore;
1762
+ }
1763
+ }
1764
+ }
1765
+ function throwToInterruptStaticGeneration(expression, store, prerenderStore) {
1766
+ const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", {
1767
+ value: "E558",
1768
+ enumerable: false,
1769
+ configurable: true
1770
+ });
1771
+ prerenderStore.revalidate = 0;
1772
+ store.dynamicUsageDescription = expression;
1773
+ store.dynamicUsageStack = err.stack;
1774
+ throw err;
1775
+ }
1776
+ function trackDynamicDataInDynamicRender(workUnitStore) {
1777
+ switch (workUnitStore.type) {
1778
+ case "cache":
1779
+ case "unstable-cache":
1780
+ return;
1781
+ case "private-cache":
1782
+ return;
1783
+ case "prerender":
1784
+ case "prerender-runtime":
1785
+ case "prerender-legacy":
1786
+ case "prerender-ppr":
1787
+ case "prerender-client":
1788
+ break;
1789
+ case "request":
1790
+ if (process.env.NODE_ENV !== "production") {
1791
+ workUnitStore.usedDynamic = true;
1792
+ }
1793
+ break;
1794
+ default:
1795
+ workUnitStore;
1796
+ }
1797
+ }
1798
+ function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) {
1799
+ const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`;
1800
+ const error = createPrerenderInterruptedError(reason);
1801
+ prerenderStore.controller.abort(error);
1802
+ const dynamicTracking = prerenderStore.dynamicTracking;
1803
+ if (dynamicTracking) {
1804
+ dynamicTracking.dynamicAccesses.push({
1805
+ // When we aren't debugging, we don't need to create another error for the
1806
+ // stack trace.
1807
+ stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : void 0,
1808
+ expression
1809
+ });
1810
+ }
1811
+ }
1812
+ function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) {
1813
+ const dynamicTracking = prerenderStore.dynamicTracking;
1814
+ abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore);
1815
+ if (dynamicTracking) {
1816
+ if (dynamicTracking.syncDynamicErrorWithStack === null) {
1817
+ dynamicTracking.syncDynamicErrorWithStack = errorWithStack;
1818
+ }
1819
+ }
1820
+ }
1821
+ function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) {
1822
+ const prerenderSignal = prerenderStore.controller.signal;
1823
+ if (prerenderSignal.aborted === false) {
1824
+ abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore);
1825
+ const dynamicTracking = prerenderStore.dynamicTracking;
1826
+ if (dynamicTracking) {
1827
+ if (dynamicTracking.syncDynamicErrorWithStack === null) {
1828
+ dynamicTracking.syncDynamicErrorWithStack = errorWithStack;
1829
+ }
1830
+ }
1831
+ }
1832
+ throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`);
1833
+ }
1834
+ function Postpone({ reason, route }) {
1835
+ const prerenderStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
1836
+ const dynamicTracking = prerenderStore && prerenderStore.type === "prerender-ppr" ? prerenderStore.dynamicTracking : null;
1837
+ postponeWithTracking(route, reason, dynamicTracking);
1838
+ }
1839
+ function postponeWithTracking(route, expression, dynamicTracking) {
1840
+ assertPostpone();
1841
+ if (dynamicTracking) {
1842
+ dynamicTracking.dynamicAccesses.push({
1843
+ // When we aren't debugging, we don't need to create another error for the
1844
+ // stack trace.
1845
+ stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : void 0,
1846
+ expression
1847
+ });
1848
+ }
1849
+ _react.default.unstable_postpone(createPostponeReason(route, expression));
1850
+ }
1851
+ function createPostponeReason(route, expression) {
1852
+ return `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. React throws this special object to indicate where. It should not be caught by your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`;
1853
+ }
1854
+ function isDynamicPostpone(err) {
1855
+ if (typeof err === "object" && err !== null && typeof err.message === "string") {
1856
+ return isDynamicPostponeReason(err.message);
1857
+ }
1858
+ return false;
1859
+ }
1860
+ function isDynamicPostponeReason(reason) {
1861
+ return reason.includes("needs to bail out of prerendering at this point because it used") && reason.includes("Learn more: https://nextjs.org/docs/messages/ppr-caught-error");
1862
+ }
1863
+ if (isDynamicPostponeReason(createPostponeReason("%%%", "^^^")) === false) {
1864
+ throw Object.defineProperty(new Error("Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js"), "__NEXT_ERROR_CODE", {
1865
+ value: "E296",
1866
+ enumerable: false,
1867
+ configurable: true
1868
+ });
1869
+ }
1870
+ var NEXT_PRERENDER_INTERRUPTED = "NEXT_PRERENDER_INTERRUPTED";
1871
+ function createPrerenderInterruptedError(message) {
1872
+ const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
1873
+ value: "E394",
1874
+ enumerable: false,
1875
+ configurable: true
1876
+ });
1877
+ error.digest = NEXT_PRERENDER_INTERRUPTED;
1878
+ return error;
1879
+ }
1880
+ function isPrerenderInterruptedError(error) {
1881
+ return typeof error === "object" && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && "name" in error && "message" in error && error instanceof Error;
1882
+ }
1883
+ function accessedDynamicData(dynamicAccesses) {
1884
+ return dynamicAccesses.length > 0;
1885
+ }
1886
+ function consumeDynamicAccess(serverDynamic, clientDynamic) {
1887
+ serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses);
1888
+ return serverDynamic.dynamicAccesses;
1889
+ }
1890
+ function formatDynamicAPIAccesses(dynamicAccesses) {
1891
+ return dynamicAccesses.filter((access) => typeof access.stack === "string" && access.stack.length > 0).map(({ expression, stack }) => {
1892
+ stack = stack.split("\n").slice(4).filter((line) => {
1893
+ if (line.includes("node_modules/next/")) {
1894
+ return false;
1895
+ }
1896
+ if (line.includes(" (<anonymous>)")) {
1897
+ return false;
1898
+ }
1899
+ if (line.includes(" (node:")) {
1900
+ return false;
1901
+ }
1902
+ return true;
1903
+ }).join("\n");
1904
+ return `Dynamic API Usage Debug - ${expression}:
1905
+ ${stack}`;
1906
+ });
1907
+ }
1908
+ function assertPostpone() {
1909
+ if (!hasPostpone) {
1910
+ throw Object.defineProperty(new Error(`Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`), "__NEXT_ERROR_CODE", {
1911
+ value: "E224",
1912
+ enumerable: false,
1913
+ configurable: true
1914
+ });
1915
+ }
1916
+ }
1917
+ function createRenderInBrowserAbortSignal() {
1918
+ const controller = new AbortController();
1919
+ controller.abort(Object.defineProperty(new _bailouttocsr.BailoutToCSRError("Render in Browser"), "__NEXT_ERROR_CODE", {
1920
+ value: "E721",
1921
+ enumerable: false,
1922
+ configurable: true
1923
+ }));
1924
+ return controller.signal;
1925
+ }
1926
+ function createHangingInputAbortSignal(workUnitStore) {
1927
+ switch (workUnitStore.type) {
1928
+ case "prerender":
1929
+ case "prerender-runtime":
1930
+ const controller = new AbortController();
1931
+ if (workUnitStore.cacheSignal) {
1932
+ workUnitStore.cacheSignal.inputReady().then(() => {
1933
+ controller.abort();
1934
+ });
1935
+ } else {
1936
+ const runtimeStagePromise = (0, _workunitasyncstorageexternal.getRuntimeStagePromise)(workUnitStore);
1937
+ if (runtimeStagePromise) {
1938
+ runtimeStagePromise.then(() => (0, _scheduler.scheduleOnNextTick)(() => controller.abort()));
1939
+ } else {
1940
+ (0, _scheduler.scheduleOnNextTick)(() => controller.abort());
1941
+ }
1942
+ }
1943
+ return controller.signal;
1944
+ case "prerender-client":
1945
+ case "prerender-ppr":
1946
+ case "prerender-legacy":
1947
+ case "request":
1948
+ case "cache":
1949
+ case "private-cache":
1950
+ case "unstable-cache":
1951
+ return void 0;
1952
+ default:
1953
+ workUnitStore;
1954
+ }
1955
+ }
1956
+ function annotateDynamicAccess(expression, prerenderStore) {
1957
+ const dynamicTracking = prerenderStore.dynamicTracking;
1958
+ if (dynamicTracking) {
1959
+ dynamicTracking.dynamicAccesses.push({
1960
+ stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : void 0,
1961
+ expression
1962
+ });
1963
+ }
1964
+ }
1965
+ function useDynamicRouteParams(expression) {
1966
+ const workStore = _workasyncstorageexternal.workAsyncStorage.getStore();
1967
+ const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
1968
+ if (workStore && workUnitStore) {
1969
+ switch (workUnitStore.type) {
1970
+ case "prerender-client":
1971
+ case "prerender": {
1972
+ const fallbackParams = workUnitStore.fallbackRouteParams;
1973
+ if (fallbackParams && fallbackParams.size > 0) {
1974
+ _react.default.use((0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, expression));
1975
+ }
1976
+ break;
1977
+ }
1978
+ case "prerender-ppr": {
1979
+ const fallbackParams = workUnitStore.fallbackRouteParams;
1980
+ if (fallbackParams && fallbackParams.size > 0) {
1981
+ return postponeWithTracking(workStore.route, expression, workUnitStore.dynamicTracking);
1982
+ }
1983
+ break;
1984
+ }
1985
+ case "prerender-runtime":
1986
+ throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called during a runtime prerender. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
1987
+ value: "E771",
1988
+ enumerable: false,
1989
+ configurable: true
1990
+ });
1991
+ case "cache":
1992
+ case "private-cache":
1993
+ throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
1994
+ value: "E745",
1995
+ enumerable: false,
1996
+ configurable: true
1997
+ });
1998
+ case "prerender-legacy":
1999
+ case "request":
2000
+ case "unstable-cache":
2001
+ break;
2002
+ default:
2003
+ workUnitStore;
2004
+ }
2005
+ }
2006
+ }
2007
+ function useDynamicSearchParams(expression) {
2008
+ const workStore = _workasyncstorageexternal.workAsyncStorage.getStore();
2009
+ const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
2010
+ if (!workStore) {
2011
+ return;
2012
+ }
2013
+ if (!workUnitStore) {
2014
+ (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(expression);
2015
+ }
2016
+ switch (workUnitStore.type) {
2017
+ case "prerender-client": {
2018
+ _react.default.use((0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, expression));
2019
+ break;
2020
+ }
2021
+ case "prerender-legacy":
2022
+ case "prerender-ppr": {
2023
+ if (workStore.forceStatic) {
2024
+ return;
2025
+ }
2026
+ throw Object.defineProperty(new _bailouttocsr.BailoutToCSRError(expression), "__NEXT_ERROR_CODE", {
2027
+ value: "E394",
2028
+ enumerable: false,
2029
+ configurable: true
2030
+ });
2031
+ }
2032
+ case "prerender":
2033
+ case "prerender-runtime":
2034
+ throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
2035
+ value: "E795",
2036
+ enumerable: false,
2037
+ configurable: true
2038
+ });
2039
+ case "cache":
2040
+ case "unstable-cache":
2041
+ case "private-cache":
2042
+ throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
2043
+ value: "E745",
2044
+ enumerable: false,
2045
+ configurable: true
2046
+ });
2047
+ case "request":
2048
+ return;
2049
+ default:
2050
+ workUnitStore;
2051
+ }
2052
+ }
2053
+ var hasSuspenseRegex = /\n\s+at Suspense \(<anonymous>\)/;
2054
+ var bodyAndImplicitTags = "body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6";
2055
+ var hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(`\\n\\s+at Suspense \\(<anonymous>\\)(?:(?!\\n\\s+at (?:${bodyAndImplicitTags}) \\(<anonymous>\\))[\\s\\S])*?\\n\\s+at ${_boundaryconstants.ROOT_LAYOUT_BOUNDARY_NAME} \\([^\\n]*\\)`);
2056
+ var hasMetadataRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.METADATA_BOUNDARY_NAME}[\\n\\s]`);
2057
+ var hasViewportRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`);
2058
+ var hasOutletRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.OUTLET_BOUNDARY_NAME}[\\n\\s]`);
2059
+ function trackAllowedDynamicAccess(workStore, componentStack, dynamicValidation, clientDynamic) {
2060
+ if (hasOutletRegex.test(componentStack)) {
2061
+ return;
2062
+ } else if (hasMetadataRegex.test(componentStack)) {
2063
+ dynamicValidation.hasDynamicMetadata = true;
2064
+ return;
2065
+ } else if (hasViewportRegex.test(componentStack)) {
2066
+ dynamicValidation.hasDynamicViewport = true;
2067
+ return;
2068
+ } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) {
2069
+ dynamicValidation.hasAllowedDynamic = true;
2070
+ dynamicValidation.hasSuspenseAboveBody = true;
2071
+ return;
2072
+ } else if (hasSuspenseRegex.test(componentStack)) {
2073
+ dynamicValidation.hasAllowedDynamic = true;
2074
+ return;
2075
+ } else if (clientDynamic.syncDynamicErrorWithStack) {
2076
+ dynamicValidation.dynamicErrors.push(clientDynamic.syncDynamicErrorWithStack);
2077
+ return;
2078
+ } else {
2079
+ const message = `Route "${workStore.route}": Uncached data was accessed outside of <Suspense>. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`;
2080
+ const error = createErrorWithComponentOrOwnerStack(message, componentStack);
2081
+ dynamicValidation.dynamicErrors.push(error);
2082
+ return;
2083
+ }
2084
+ }
2085
+ function trackDynamicHoleInRuntimeShell(workStore, componentStack, dynamicValidation, clientDynamic) {
2086
+ if (hasOutletRegex.test(componentStack)) {
2087
+ return;
2088
+ } else if (hasMetadataRegex.test(componentStack)) {
2089
+ const message = `Route "${workStore.route}": Uncached data or \`connection()\` was accessed inside \`generateMetadata\`. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`;
2090
+ const error = createErrorWithComponentOrOwnerStack(message, componentStack);
2091
+ dynamicValidation.dynamicMetadata = error;
2092
+ return;
2093
+ } else if (hasViewportRegex.test(componentStack)) {
2094
+ const message = `Route "${workStore.route}": Uncached data or \`connection()\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`;
2095
+ const error = createErrorWithComponentOrOwnerStack(message, componentStack);
2096
+ dynamicValidation.dynamicErrors.push(error);
2097
+ return;
2098
+ } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) {
2099
+ dynamicValidation.hasAllowedDynamic = true;
2100
+ dynamicValidation.hasSuspenseAboveBody = true;
2101
+ return;
2102
+ } else if (hasSuspenseRegex.test(componentStack)) {
2103
+ dynamicValidation.hasAllowedDynamic = true;
2104
+ return;
2105
+ } else if (clientDynamic.syncDynamicErrorWithStack) {
2106
+ dynamicValidation.dynamicErrors.push(clientDynamic.syncDynamicErrorWithStack);
2107
+ return;
2108
+ } else {
2109
+ const message = `Route "${workStore.route}": Uncached data or \`connection()\` was accessed outside of \`<Suspense>\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`;
2110
+ const error = createErrorWithComponentOrOwnerStack(message, componentStack);
2111
+ dynamicValidation.dynamicErrors.push(error);
2112
+ return;
2113
+ }
2114
+ }
2115
+ function trackDynamicHoleInStaticShell(workStore, componentStack, dynamicValidation, clientDynamic) {
2116
+ if (hasOutletRegex.test(componentStack)) {
2117
+ return;
2118
+ } else if (hasMetadataRegex.test(componentStack)) {
2119
+ const message = `Route "${workStore.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateMetadata\` or you have file-based metadata such as icons that depend on dynamic params segments. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`;
2120
+ const error = createErrorWithComponentOrOwnerStack(message, componentStack);
2121
+ dynamicValidation.dynamicMetadata = error;
2122
+ return;
2123
+ } else if (hasViewportRegex.test(componentStack)) {
2124
+ const message = `Route "${workStore.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed inside \`generateViewport\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`;
2125
+ const error = createErrorWithComponentOrOwnerStack(message, componentStack);
2126
+ dynamicValidation.dynamicErrors.push(error);
2127
+ return;
2128
+ } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) {
2129
+ dynamicValidation.hasAllowedDynamic = true;
2130
+ dynamicValidation.hasSuspenseAboveBody = true;
2131
+ return;
2132
+ } else if (hasSuspenseRegex.test(componentStack)) {
2133
+ dynamicValidation.hasAllowedDynamic = true;
2134
+ return;
2135
+ } else if (clientDynamic.syncDynamicErrorWithStack) {
2136
+ dynamicValidation.dynamicErrors.push(clientDynamic.syncDynamicErrorWithStack);
2137
+ return;
2138
+ } else {
2139
+ const message = `Route "${workStore.route}": Runtime data such as \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` was accessed outside of \`<Suspense>\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`;
2140
+ const error = createErrorWithComponentOrOwnerStack(message, componentStack);
2141
+ dynamicValidation.dynamicErrors.push(error);
2142
+ return;
2143
+ }
2144
+ }
2145
+ function createErrorWithComponentOrOwnerStack(message, componentStack) {
2146
+ const ownerStack = process.env.NODE_ENV !== "production" && _react.default.captureOwnerStack ? _react.default.captureOwnerStack() : null;
2147
+ const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
2148
+ value: "E394",
2149
+ enumerable: false,
2150
+ configurable: true
2151
+ });
2152
+ error.stack = error.name + ": " + message + (ownerStack || componentStack);
2153
+ return error;
2154
+ }
2155
+ var PreludeState = /* @__PURE__ */ (function(PreludeState2) {
2156
+ PreludeState2[PreludeState2["Full"] = 0] = "Full";
2157
+ PreludeState2[PreludeState2["Empty"] = 1] = "Empty";
2158
+ PreludeState2[PreludeState2["Errored"] = 2] = "Errored";
2159
+ return PreludeState2;
2160
+ })({});
2161
+ function logDisallowedDynamicError(workStore, error) {
2162
+ console.error(error);
2163
+ if (!workStore.dev) {
2164
+ if (workStore.hasReadableErrorStacks) {
2165
+ console.error(`To get a more detailed stack trace and pinpoint the issue, start the app in development mode by running \`next dev\`, then open "${workStore.route}" in your browser to investigate the error.`);
2166
+ } else {
2167
+ console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following:
2168
+ - Start the app in development mode by running \`next dev\`, then open "${workStore.route}" in your browser to investigate the error.
2169
+ - Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`);
2170
+ }
2171
+ }
2172
+ }
2173
+ function throwIfDisallowedDynamic(workStore, prelude, dynamicValidation, serverDynamic) {
2174
+ if (serverDynamic.syncDynamicErrorWithStack) {
2175
+ logDisallowedDynamicError(workStore, serverDynamic.syncDynamicErrorWithStack);
2176
+ throw new _staticgenerationbailout.StaticGenBailoutError();
2177
+ }
2178
+ if (prelude !== 0) {
2179
+ if (dynamicValidation.hasSuspenseAboveBody) {
2180
+ return;
2181
+ }
2182
+ const dynamicErrors = dynamicValidation.dynamicErrors;
2183
+ if (dynamicErrors.length > 0) {
2184
+ for (let i = 0; i < dynamicErrors.length; i++) {
2185
+ logDisallowedDynamicError(workStore, dynamicErrors[i]);
2186
+ }
2187
+ throw new _staticgenerationbailout.StaticGenBailoutError();
2188
+ }
2189
+ if (dynamicValidation.hasDynamicViewport) {
2190
+ console.error(`Route "${workStore.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`);
2191
+ throw new _staticgenerationbailout.StaticGenBailoutError();
2192
+ }
2193
+ if (prelude === 1) {
2194
+ console.error(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`);
2195
+ throw new _staticgenerationbailout.StaticGenBailoutError();
2196
+ }
2197
+ } else {
2198
+ if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.hasDynamicMetadata) {
2199
+ console.error(`Route "${workStore.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`);
2200
+ throw new _staticgenerationbailout.StaticGenBailoutError();
2201
+ }
2202
+ }
2203
+ }
2204
+ function getStaticShellDisallowedDynamicReasons(workStore, prelude, dynamicValidation) {
2205
+ if (dynamicValidation.hasSuspenseAboveBody) {
2206
+ return [];
2207
+ }
2208
+ if (prelude !== 0) {
2209
+ const dynamicErrors = dynamicValidation.dynamicErrors;
2210
+ if (dynamicErrors.length > 0) {
2211
+ return dynamicErrors;
2212
+ }
2213
+ if (prelude === 1) {
2214
+ return [
2215
+ Object.defineProperty(new _invarianterror.InvariantError(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`), "__NEXT_ERROR_CODE", {
2216
+ value: "E936",
2217
+ enumerable: false,
2218
+ configurable: true
2219
+ })
2220
+ ];
2221
+ }
2222
+ } else {
2223
+ if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicErrors.length === 0 && dynamicValidation.dynamicMetadata) {
2224
+ return [
2225
+ dynamicValidation.dynamicMetadata
2226
+ ];
2227
+ }
2228
+ }
2229
+ return [];
2230
+ }
2231
+ function delayUntilRuntimeStage(prerenderStore, result) {
2232
+ if (prerenderStore.runtimeStagePromise) {
2233
+ return prerenderStore.runtimeStagePromise.then(() => result);
2234
+ }
2235
+ return result;
2236
+ }
2237
+ }
2238
+ });
2239
+
2240
+ // node_modules/next/dist/client/components/unstable-rethrow.server.js
2241
+ var require_unstable_rethrow_server = __commonJS({
2242
+ "node_modules/next/dist/client/components/unstable-rethrow.server.js"(exports2, module2) {
2243
+ "use strict";
2244
+ Object.defineProperty(exports2, "__esModule", {
2245
+ value: true
2246
+ });
2247
+ Object.defineProperty(exports2, "unstable_rethrow", {
2248
+ enumerable: true,
2249
+ get: function() {
2250
+ return unstable_rethrow;
2251
+ }
2252
+ });
2253
+ var _dynamicrenderingutils = require_dynamic_rendering_utils();
2254
+ var _ispostpone = require_is_postpone();
2255
+ var _bailouttocsr = require_bailout_to_csr();
2256
+ var _isnextroutererror = require_is_next_router_error();
2257
+ var _dynamicrendering = require_dynamic_rendering();
2258
+ var _hooksservercontext = require_hooks_server_context();
2259
+ function unstable_rethrow(error) {
2260
+ if ((0, _isnextroutererror.isNextRouterError)(error) || (0, _bailouttocsr.isBailoutToCSRError)(error) || (0, _hooksservercontext.isDynamicServerError)(error) || (0, _dynamicrendering.isDynamicPostpone)(error) || (0, _ispostpone.isPostpone)(error) || (0, _dynamicrenderingutils.isHangingPromiseRejectionError)(error) || (0, _dynamicrendering.isPrerenderInterruptedError)(error)) {
2261
+ throw error;
2262
+ }
2263
+ if (error instanceof Error && "cause" in error) {
2264
+ unstable_rethrow(error.cause);
2265
+ }
2266
+ }
2267
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
2268
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
2269
+ Object.assign(exports2.default, exports2);
2270
+ module2.exports = exports2.default;
2271
+ }
2272
+ }
2273
+ });
2274
+
2275
+ // node_modules/next/dist/client/components/unstable-rethrow.browser.js
2276
+ var require_unstable_rethrow_browser = __commonJS({
2277
+ "node_modules/next/dist/client/components/unstable-rethrow.browser.js"(exports2, module2) {
2278
+ "use strict";
2279
+ Object.defineProperty(exports2, "__esModule", {
2280
+ value: true
2281
+ });
2282
+ Object.defineProperty(exports2, "unstable_rethrow", {
2283
+ enumerable: true,
2284
+ get: function() {
2285
+ return unstable_rethrow;
2286
+ }
2287
+ });
2288
+ var _bailouttocsr = require_bailout_to_csr();
2289
+ var _isnextroutererror = require_is_next_router_error();
2290
+ function unstable_rethrow(error) {
2291
+ if ((0, _isnextroutererror.isNextRouterError)(error) || (0, _bailouttocsr.isBailoutToCSRError)(error)) {
2292
+ throw error;
2293
+ }
2294
+ if (error instanceof Error && "cause" in error) {
2295
+ unstable_rethrow(error.cause);
2296
+ }
2297
+ }
2298
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
2299
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
2300
+ Object.assign(exports2.default, exports2);
2301
+ module2.exports = exports2.default;
2302
+ }
2303
+ }
2304
+ });
2305
+
2306
+ // node_modules/next/dist/client/components/unstable-rethrow.js
2307
+ var require_unstable_rethrow = __commonJS({
2308
+ "node_modules/next/dist/client/components/unstable-rethrow.js"(exports2, module2) {
2309
+ "use strict";
2310
+ Object.defineProperty(exports2, "__esModule", {
2311
+ value: true
2312
+ });
2313
+ Object.defineProperty(exports2, "unstable_rethrow", {
2314
+ enumerable: true,
2315
+ get: function() {
2316
+ return unstable_rethrow;
2317
+ }
2318
+ });
2319
+ var unstable_rethrow = typeof window === "undefined" ? require_unstable_rethrow_server().unstable_rethrow : require_unstable_rethrow_browser().unstable_rethrow;
2320
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
2321
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
2322
+ Object.assign(exports2.default, exports2);
2323
+ module2.exports = exports2.default;
2324
+ }
2325
+ }
2326
+ });
2327
+
2328
+ // node_modules/next/dist/client/components/navigation.react-server.js
2329
+ var require_navigation_react_server = __commonJS({
2330
+ "node_modules/next/dist/client/components/navigation.react-server.js"(exports2, module2) {
2331
+ "use strict";
2332
+ Object.defineProperty(exports2, "__esModule", {
2333
+ value: true
2334
+ });
2335
+ function _export(target, all) {
2336
+ for (var name in all) Object.defineProperty(target, name, {
2337
+ enumerable: true,
2338
+ get: all[name]
2339
+ });
2340
+ }
2341
+ _export(exports2, {
2342
+ ReadonlyURLSearchParams: function() {
2343
+ return _readonlyurlsearchparams.ReadonlyURLSearchParams;
2344
+ },
2345
+ RedirectType: function() {
2346
+ return _redirecterror.RedirectType;
2347
+ },
2348
+ forbidden: function() {
2349
+ return _forbidden.forbidden;
2350
+ },
2351
+ notFound: function() {
2352
+ return _notfound.notFound;
2353
+ },
2354
+ permanentRedirect: function() {
2355
+ return _redirect.permanentRedirect;
2356
+ },
2357
+ redirect: function() {
2358
+ return _redirect.redirect;
2359
+ },
2360
+ unauthorized: function() {
2361
+ return _unauthorized.unauthorized;
2362
+ },
2363
+ unstable_isUnrecognizedActionError: function() {
2364
+ return unstable_isUnrecognizedActionError;
2365
+ },
2366
+ unstable_rethrow: function() {
2367
+ return _unstablerethrow.unstable_rethrow;
2368
+ }
2369
+ });
2370
+ var _readonlyurlsearchparams = require_readonly_url_search_params();
2371
+ var _redirect = require_redirect();
2372
+ var _redirecterror = require_redirect_error();
2373
+ var _notfound = require_not_found();
2374
+ var _forbidden = require_forbidden();
2375
+ var _unauthorized = require_unauthorized();
2376
+ var _unstablerethrow = require_unstable_rethrow();
2377
+ function unstable_isUnrecognizedActionError() {
2378
+ throw Object.defineProperty(new Error("`unstable_isUnrecognizedActionError` can only be used on the client."), "__NEXT_ERROR_CODE", {
2379
+ value: "E776",
2380
+ enumerable: false,
2381
+ configurable: true
2382
+ });
2383
+ }
2384
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
2385
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
2386
+ Object.assign(exports2.default, exports2);
2387
+ module2.exports = exports2.default;
2388
+ }
2389
+ }
2390
+ });
2391
+
2392
+ // node_modules/next/dist/client/components/navigation.js
2393
+ var require_navigation = __commonJS({
2394
+ "node_modules/next/dist/client/components/navigation.js"(exports2, module2) {
2395
+ "use strict";
2396
+ Object.defineProperty(exports2, "__esModule", {
2397
+ value: true
2398
+ });
2399
+ function _export(target, all) {
2400
+ for (var name in all) Object.defineProperty(target, name, {
2401
+ enumerable: true,
2402
+ get: all[name]
2403
+ });
2404
+ }
2405
+ _export(exports2, {
2406
+ // We need the same class that was used to instantiate the context value
2407
+ // Otherwise instanceof checks will fail in usercode
2408
+ ReadonlyURLSearchParams: function() {
2409
+ return _hooksclientcontextsharedruntime.ReadonlyURLSearchParams;
2410
+ },
2411
+ RedirectType: function() {
2412
+ return _navigationreactserver.RedirectType;
2413
+ },
2414
+ ServerInsertedHTMLContext: function() {
2415
+ return _serverinsertedhtmlsharedruntime.ServerInsertedHTMLContext;
2416
+ },
2417
+ forbidden: function() {
2418
+ return _navigationreactserver.forbidden;
2419
+ },
2420
+ notFound: function() {
2421
+ return _navigationreactserver.notFound;
2422
+ },
2423
+ permanentRedirect: function() {
2424
+ return _navigationreactserver.permanentRedirect;
2425
+ },
2426
+ redirect: function() {
2427
+ return _navigationreactserver.redirect;
2428
+ },
2429
+ unauthorized: function() {
2430
+ return _navigationreactserver.unauthorized;
2431
+ },
2432
+ unstable_isUnrecognizedActionError: function() {
2433
+ return _unrecognizedactionerror.unstable_isUnrecognizedActionError;
2434
+ },
2435
+ unstable_rethrow: function() {
2436
+ return _navigationreactserver.unstable_rethrow;
2437
+ },
2438
+ useParams: function() {
2439
+ return useParams;
2440
+ },
2441
+ usePathname: function() {
2442
+ return usePathname2;
2443
+ },
2444
+ useRouter: function() {
2445
+ return useRouter;
2446
+ },
2447
+ useSearchParams: function() {
2448
+ return useSearchParams2;
2449
+ },
2450
+ useSelectedLayoutSegment: function() {
2451
+ return useSelectedLayoutSegment;
2452
+ },
2453
+ useSelectedLayoutSegments: function() {
2454
+ return useSelectedLayoutSegments;
2455
+ },
2456
+ useServerInsertedHTML: function() {
2457
+ return _serverinsertedhtmlsharedruntime.useServerInsertedHTML;
2458
+ }
2459
+ });
2460
+ var _interop_require_wildcard = require_interop_require_wildcard();
2461
+ var _react = /* @__PURE__ */ _interop_require_wildcard._(require("react"));
2462
+ var _approutercontextsharedruntime = require_app_router_context_shared_runtime();
2463
+ var _hooksclientcontextsharedruntime = require_hooks_client_context_shared_runtime();
2464
+ var _segment = require_segment();
2465
+ var _serverinsertedhtmlsharedruntime = require_server_inserted_html_shared_runtime();
2466
+ var _unrecognizedactionerror = require_unrecognized_action_error();
2467
+ var _navigationreactserver = require_navigation_react_server();
2468
+ var useDynamicRouteParams = typeof window === "undefined" ? require_dynamic_rendering().useDynamicRouteParams : void 0;
2469
+ var useDynamicSearchParams = typeof window === "undefined" ? require_dynamic_rendering().useDynamicSearchParams : void 0;
2470
+ function useSearchParams2() {
2471
+ useDynamicSearchParams?.("useSearchParams()");
2472
+ const searchParams = (0, _react.useContext)(_hooksclientcontextsharedruntime.SearchParamsContext);
2473
+ const readonlySearchParams = (0, _react.useMemo)(() => {
2474
+ if (!searchParams) {
2475
+ return null;
2476
+ }
2477
+ return new _hooksclientcontextsharedruntime.ReadonlyURLSearchParams(searchParams);
2478
+ }, [
2479
+ searchParams
2480
+ ]);
2481
+ if (process.env.NODE_ENV !== "production" && "use" in _react.default) {
2482
+ const navigationPromises = (0, _react.use)(_hooksclientcontextsharedruntime.NavigationPromisesContext);
2483
+ if (navigationPromises) {
2484
+ return (0, _react.use)(navigationPromises.searchParams);
2485
+ }
2486
+ }
2487
+ return readonlySearchParams;
2488
+ }
2489
+ function usePathname2() {
2490
+ useDynamicRouteParams?.("usePathname()");
2491
+ const pathname = (0, _react.useContext)(_hooksclientcontextsharedruntime.PathnameContext);
2492
+ if (process.env.NODE_ENV !== "production" && "use" in _react.default) {
2493
+ const navigationPromises = (0, _react.use)(_hooksclientcontextsharedruntime.NavigationPromisesContext);
2494
+ if (navigationPromises) {
2495
+ return (0, _react.use)(navigationPromises.pathname);
2496
+ }
2497
+ }
2498
+ return pathname;
2499
+ }
2500
+ function useRouter() {
2501
+ const router = (0, _react.useContext)(_approutercontextsharedruntime.AppRouterContext);
2502
+ if (router === null) {
2503
+ throw Object.defineProperty(new Error("invariant expected app router to be mounted"), "__NEXT_ERROR_CODE", {
2504
+ value: "E238",
2505
+ enumerable: false,
2506
+ configurable: true
2507
+ });
2508
+ }
2509
+ return router;
2510
+ }
2511
+ function useParams() {
2512
+ useDynamicRouteParams?.("useParams()");
2513
+ const params = (0, _react.useContext)(_hooksclientcontextsharedruntime.PathParamsContext);
2514
+ if (process.env.NODE_ENV !== "production" && "use" in _react.default) {
2515
+ const navigationPromises = (0, _react.use)(_hooksclientcontextsharedruntime.NavigationPromisesContext);
2516
+ if (navigationPromises) {
2517
+ return (0, _react.use)(navigationPromises.params);
2518
+ }
2519
+ }
2520
+ return params;
2521
+ }
2522
+ function useSelectedLayoutSegments(parallelRouteKey = "children") {
2523
+ useDynamicRouteParams?.("useSelectedLayoutSegments()");
2524
+ const context = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);
2525
+ if (!context) return null;
2526
+ if (process.env.NODE_ENV !== "production" && "use" in _react.default) {
2527
+ const navigationPromises = (0, _react.use)(_hooksclientcontextsharedruntime.NavigationPromisesContext);
2528
+ if (navigationPromises) {
2529
+ const promise = navigationPromises.selectedLayoutSegmentsPromises?.get(parallelRouteKey);
2530
+ if (promise) {
2531
+ return (0, _react.use)(promise);
2532
+ }
2533
+ }
2534
+ }
2535
+ return (0, _segment.getSelectedLayoutSegmentPath)(context.parentTree, parallelRouteKey);
2536
+ }
2537
+ function useSelectedLayoutSegment(parallelRouteKey = "children") {
2538
+ useDynamicRouteParams?.("useSelectedLayoutSegment()");
2539
+ const navigationPromises = (0, _react.useContext)(_hooksclientcontextsharedruntime.NavigationPromisesContext);
2540
+ const selectedLayoutSegments = useSelectedLayoutSegments(parallelRouteKey);
2541
+ if (process.env.NODE_ENV !== "production" && navigationPromises && "use" in _react.default) {
2542
+ const promise = navigationPromises.selectedLayoutSegmentPromises?.get(parallelRouteKey);
2543
+ if (promise) {
2544
+ return (0, _react.use)(promise);
2545
+ }
2546
+ }
2547
+ return (0, _segment.computeSelectedLayoutSegment)(selectedLayoutSegments, parallelRouteKey);
2548
+ }
2549
+ if ((typeof exports2.default === "function" || typeof exports2.default === "object" && exports2.default !== null) && typeof exports2.default.__esModule === "undefined") {
2550
+ Object.defineProperty(exports2.default, "__esModule", { value: true });
2551
+ Object.assign(exports2.default, exports2);
2552
+ module2.exports = exports2.default;
2553
+ }
2554
+ }
2555
+ });
2556
+
2557
+ // node_modules/next/navigation.js
2558
+ var require_navigation2 = __commonJS({
2559
+ "node_modules/next/navigation.js"(exports2, module2) {
2560
+ "use strict";
2561
+ module2.exports = require_navigation();
2562
+ }
2563
+ });
2564
+
2565
+ // src/index.ts
2566
+ var index_exports = {};
2567
+ __export(index_exports, {
2568
+ BrowserCache: () => BrowserCache,
2569
+ CacheTags: () => CacheTags,
2570
+ ContentEngine: () => ContentEngine,
2571
+ ExponentialBackoff: () => ExponentialBackoff,
2572
+ LocalCache: () => LocalCache,
2573
+ MemoryCache: () => MemoryCache,
2574
+ NexusClient: () => NexusClient,
2575
+ NexusProvider: () => NexusProvider,
2576
+ RateLimiter: () => RateLimiter,
2577
+ RequestBatcher: () => RequestBatcher,
2578
+ createNexusClient: () => createNexusClient,
2579
+ nexus: () => nexus,
2580
+ useNexusAuth: () => useNexusAuth
2581
+ });
2582
+ module.exports = __toCommonJS(index_exports);
2583
+
2584
+ // src/config.ts
2585
+ var DEFAULT_API_URL = "https://api.nexushub.com/v1";
2586
+ var hasEnv = () => {
2587
+ return typeof process !== "undefined" && typeof process.env !== "undefined" && Object.keys(process.env).length > 0;
2588
+ };
2589
+ var getEnvConfig = () => {
2590
+ if (!hasEnv()) {
2591
+ return {
2592
+ apiUrl: DEFAULT_API_URL
2593
+ };
2594
+ }
2595
+ const env = process.env;
2596
+ const projectId = env.NEXT_PUBLIC_NEXUS_ID ?? env.NEXUS_PROJECT_ID ?? env.NEXUS_PROJECT_ID;
2597
+ const apiKey = env.NEXT_PUBLIC_NEXUS_KEY ?? env.NEXUS_API_KEY ?? env.NEXUS_API_KEY;
2598
+ const apiUrl = env.NEXT_PUBLIC_NEXUS_API_URL ?? env.NEXUS_API_URL ?? DEFAULT_API_URL;
2599
+ return {
2600
+ projectId,
2601
+ apiKey,
2602
+ apiUrl
2603
+ };
2604
+ };
2605
+ var mergeConfigs = (base, override) => {
2606
+ return {
2607
+ ...base,
2608
+ ...override,
2609
+ apiUrl: override.apiUrl || base.apiUrl || DEFAULT_API_URL,
2610
+ projectId: override.projectId || base.projectId
2611
+ };
2612
+ };
2613
+ var getFullConfig = (partialConfig) => {
2614
+ const envConfig = getEnvConfig();
2615
+ const merged = mergeConfigs(envConfig, partialConfig || {});
2616
+ if (!merged.apiUrl) {
2617
+ merged.apiUrl = DEFAULT_API_URL;
2618
+ }
2619
+ return merged;
2620
+ };
2621
+ var validateConfig = (config) => {
2622
+ const errors = [];
2623
+ if (!config.projectId) {
2624
+ errors.push("Missing projectId");
2625
+ }
2626
+ if (!config.apiUrl) {
2627
+ errors.push("Missing apiUrl");
2628
+ }
2629
+ if (config.apiUrl && !config.apiUrl.startsWith("http")) {
2630
+ errors.push("apiUrl must be a valid URL starting with http:// or https://");
2631
+ }
2632
+ return errors;
2633
+ };
2634
+
2635
+ // src/content/cache.ts
2636
+ var CacheTags = {
2637
+ project: (projectId) => `nexus_project_${projectId}`,
2638
+ content: (slug) => `content_${slug}`,
2639
+ collection: (collectionId) => `collection_${collectionId}`,
2640
+ global: "nexus_global_config",
2641
+ user: (userId) => `user_${userId}`,
2642
+ media: (mediaId) => `media_${mediaId}`
2643
+ };
2644
+ var MemoryCache = class {
2645
+ constructor(options = {}) {
2646
+ this.cache = /* @__PURE__ */ new Map();
2647
+ this.tagIndex = /* @__PURE__ */ new Map();
2648
+ this.stats = {
2649
+ size: 0,
2650
+ hits: 0,
2651
+ misses: 0,
2652
+ hitRate: 0,
2653
+ evictions: 0
2654
+ };
2655
+ this.maxSize = options.maxSize || 1e3;
2656
+ this.defaultTTL = options.ttl || 5 * 60 * 1e3;
2657
+ }
2658
+ set(key, data, options = {}) {
2659
+ if (this.cache.size >= this.maxSize) {
2660
+ this.evictLRU();
2661
+ }
2662
+ const metadata = {
2663
+ timestamp: Date.now(),
2664
+ expiresAt: Date.now() + (options.ttl || this.defaultTTL),
2665
+ tags: options.tags || [],
2666
+ size: this.calculateSize(data)
2667
+ };
2668
+ this.cache.set(key, { data, metadata });
2669
+ this.stats.size = this.cache.size;
2670
+ metadata.tags.forEach((tag) => {
2671
+ if (!this.tagIndex.has(tag)) {
2672
+ this.tagIndex.set(tag, /* @__PURE__ */ new Set());
2673
+ }
2674
+ this.tagIndex.get(tag).add(key);
2675
+ });
2676
+ }
2677
+ get(key) {
2678
+ const entry = this.cache.get(key);
2679
+ if (!entry) {
2680
+ this.stats.misses++;
2681
+ this.updateHitRate();
2682
+ return null;
2683
+ }
2684
+ if (Date.now() > entry.metadata.expiresAt) {
2685
+ this.delete(key);
2686
+ this.stats.misses++;
2687
+ this.updateHitRate();
2688
+ return null;
2689
+ }
2690
+ entry.metadata.timestamp = Date.now();
2691
+ this.stats.hits++;
2692
+ this.updateHitRate();
2693
+ return entry;
2694
+ }
2695
+ delete(key) {
2696
+ const entry = this.cache.get(key);
2697
+ if (!entry) return false;
2698
+ entry.metadata.tags.forEach((tag) => {
2699
+ const keys = this.tagIndex.get(tag);
2700
+ if (keys) {
2701
+ keys.delete(key);
2702
+ if (keys.size === 0) {
2703
+ this.tagIndex.delete(tag);
2704
+ }
2705
+ }
2706
+ });
2707
+ this.cache.delete(key);
2708
+ this.stats.size = this.cache.size;
2709
+ return true;
2710
+ }
2711
+ invalidateByTags(tags) {
2712
+ const keysToDelete = /* @__PURE__ */ new Set();
2713
+ tags.forEach((tag) => {
2714
+ const keys = this.tagIndex.get(tag);
2715
+ if (keys) {
2716
+ keys.forEach((key) => keysToDelete.add(key));
2717
+ this.tagIndex.delete(tag);
2718
+ }
2719
+ });
2720
+ keysToDelete.forEach((key) => this.delete(key));
2721
+ if (process.env.NODE_ENV === "development") {
2722
+ console.log(`[MemoryCache] Invalidated ${keysToDelete.size} entries by tags: ${tags.join(", ")}`);
2723
+ }
2724
+ }
2725
+ clear() {
2726
+ this.cache.clear();
2727
+ this.tagIndex.clear();
2728
+ this.stats = {
2729
+ size: 0,
2730
+ hits: 0,
2731
+ misses: 0,
2732
+ hitRate: 0,
2733
+ evictions: 0
2734
+ };
2735
+ }
2736
+ getStats() {
2737
+ return { ...this.stats };
2738
+ }
2739
+ evictLRU() {
2740
+ let oldestKey = null;
2741
+ let oldestTime = Infinity;
2742
+ for (const [key, entry] of this.cache.entries()) {
2743
+ if (entry.metadata.timestamp < oldestTime) {
2744
+ oldestTime = entry.metadata.timestamp;
2745
+ oldestKey = key;
2746
+ }
2747
+ }
2748
+ if (oldestKey) {
2749
+ this.delete(oldestKey);
2750
+ this.stats.evictions++;
2751
+ }
2752
+ }
2753
+ calculateSize(data) {
2754
+ try {
2755
+ const jsonString = JSON.stringify(data);
2756
+ return new Blob([jsonString]).size;
2757
+ } catch {
2758
+ return 0;
2759
+ }
2760
+ }
2761
+ updateHitRate() {
2762
+ const total = this.stats.hits + this.stats.misses;
2763
+ this.stats.hitRate = total > 0 ? this.stats.hits / total : 0;
2764
+ }
2765
+ };
2766
+ var LocalCache = class {
2767
+ constructor(customPath) {
2768
+ this.data = null;
2769
+ this.hasLoaded = false;
2770
+ this.cachePath = customPath || ".nexus/cache.json";
2771
+ }
2772
+ isLoaded() {
2773
+ return this.hasLoaded;
2774
+ }
2775
+ load() {
2776
+ if (typeof window !== "undefined") return;
2777
+ if (process.env.NODE_ENV !== "development") return;
2778
+ if (this.hasLoaded) return;
2779
+ try {
2780
+ const fs = require("fs");
2781
+ const path = require("path");
2782
+ const fullPath = path.resolve(process.cwd(), this.cachePath);
2783
+ if (fs.existsSync(fullPath)) {
2784
+ const fileContent = fs.readFileSync(fullPath, "utf-8");
2785
+ this.data = JSON.parse(fileContent);
2786
+ this.hasLoaded = true;
2787
+ console.log(`\u26A1 NexusHub: Serving content from local cache (${this.cachePath})`);
2788
+ console.log(` - Pages: ${this.data.pages?.length || 0}`);
2789
+ console.log(` - Collections: ${Object.keys(this.data.collections || {}).length}`);
2790
+ console.log(` - Globals: ${this.data.globals ? "Loaded" : "Not found"}`);
2791
+ }
2792
+ } catch (error) {
2793
+ if (this.shouldWarnAboutMissingCache(error)) {
2794
+ console.warn(
2795
+ `\u26A0\uFE0F NexusHub: Local cache not found at ${this.cachePath}
2796
+ Run \`npx nexus pull\` to generate seed data or
2797
+ Use the Dashboard to create content first.`
2798
+ );
2799
+ }
2800
+ }
2801
+ }
2802
+ getPage(slug) {
2803
+ this.load();
2804
+ if (!this.data?.pages) return null;
2805
+ const page = this.data.pages.find((p) => p.slug === slug);
2806
+ if (!page) {
2807
+ console.warn(`\u26A0\uFE0F NexusHub: Page '${slug}' not found in local cache`);
2808
+ return null;
2809
+ }
2810
+ return page.data;
2811
+ }
2812
+ getCollection(collectionId) {
2813
+ this.load();
2814
+ if (!this.data?.collections) return null;
2815
+ const collection = this.data.collections[collectionId];
2816
+ if (!collection) {
2817
+ console.warn(`\u26A0\uFE0F NexusHub: Collection '${collectionId}' not found in local cache`);
2818
+ return null;
2819
+ }
2820
+ return collection;
2821
+ }
2822
+ getGlobals() {
2823
+ this.load();
2824
+ return this.data?.globals || null;
2825
+ }
2826
+ getAllData() {
2827
+ this.load();
2828
+ return this.data;
2829
+ }
2830
+ shouldWarnAboutMissingCache(error) {
2831
+ return error.code === "ENOENT" || error.message && error.message.includes("ENOENT");
2832
+ }
2833
+ };
2834
+ var BrowserCache = class {
2835
+ constructor(projectId) {
2836
+ this.projectId = projectId;
2837
+ this.prefix = "nexushub_";
2838
+ this.maxSize = 5 * 1024 * 1024;
2839
+ // 5MB
2840
+ this.currentSize = 0;
2841
+ this.calculateCurrentSize();
2842
+ }
2843
+ set(key, data, ttl = 5 * 60 * 1e3) {
2844
+ const storageKey = this.getStorageKey(key);
2845
+ const entry = {
2846
+ data,
2847
+ metadata: {
2848
+ timestamp: Date.now(),
2849
+ expiresAt: Date.now() + ttl,
2850
+ size: this.calculateStorageSize(data)
2851
+ }
2852
+ };
2853
+ const serialized = JSON.stringify(entry);
2854
+ const newSize = new Blob([serialized]).size;
2855
+ if (this.currentSize + newSize > this.maxSize) {
2856
+ this.evictOldest();
2857
+ }
2858
+ try {
2859
+ localStorage.setItem(storageKey, serialized);
2860
+ this.currentSize += newSize;
2861
+ } catch (error) {
2862
+ console.warn("[BrowserCache] Failed to save to localStorage:", error);
2863
+ this.evictOldest();
2864
+ this.set(key, data, ttl);
2865
+ }
2866
+ }
2867
+ get(key) {
2868
+ const storageKey = this.getStorageKey(key);
2869
+ const item = localStorage.getItem(storageKey);
2870
+ if (!item) return null;
2871
+ try {
2872
+ const entry = JSON.parse(item);
2873
+ if (Date.now() > entry.metadata.expiresAt) {
2874
+ this.delete(key);
2875
+ return null;
2876
+ }
2877
+ return entry.data;
2878
+ } catch {
2879
+ this.delete(key);
2880
+ return null;
2881
+ }
2882
+ }
2883
+ delete(key) {
2884
+ const storageKey = this.getStorageKey(key);
2885
+ const item = localStorage.getItem(storageKey);
2886
+ if (item) {
2887
+ this.currentSize -= new Blob([item]).size;
2888
+ }
2889
+ localStorage.removeItem(storageKey);
2890
+ }
2891
+ clear() {
2892
+ const keysToRemove = [];
2893
+ for (let i = 0; i < localStorage.length; i++) {
2894
+ const key = localStorage.key(i);
2895
+ if (key?.startsWith(this.prefix)) {
2896
+ keysToRemove.push(key);
2897
+ }
2898
+ }
2899
+ keysToRemove.forEach((key) => localStorage.removeItem(key));
2900
+ this.currentSize = 0;
2901
+ }
2902
+ getStorageKey(key) {
2903
+ return `${this.prefix}${this.projectId}_${key}`;
2904
+ }
2905
+ calculateCurrentSize() {
2906
+ this.currentSize = 0;
2907
+ for (let i = 0; i < localStorage.length; i++) {
2908
+ const key = localStorage.key(i);
2909
+ if (key?.startsWith(this.prefix)) {
2910
+ const item = localStorage.getItem(key);
2911
+ if (item) {
2912
+ this.currentSize += new Blob([item]).size;
2913
+ }
2914
+ }
2915
+ }
2916
+ }
2917
+ calculateStorageSize(data) {
2918
+ return new Blob([JSON.stringify(data)]).size;
2919
+ }
2920
+ evictOldest() {
2921
+ let oldestKey = null;
2922
+ let oldestTime = Infinity;
2923
+ for (let i = 0; i < localStorage.length; i++) {
2924
+ const key = localStorage.key(i);
2925
+ if (key?.startsWith(this.prefix)) {
2926
+ const item = localStorage.getItem(key);
2927
+ if (item) {
2928
+ try {
2929
+ const entry = JSON.parse(item);
2930
+ if (entry.metadata.timestamp < oldestTime) {
2931
+ oldestTime = entry.metadata.timestamp;
2932
+ oldestKey = key;
2933
+ }
2934
+ } catch {
2935
+ localStorage.removeItem(key);
2936
+ }
2937
+ }
2938
+ }
2939
+ }
2940
+ if (oldestKey) {
2941
+ const item = localStorage.getItem(oldestKey);
2942
+ if (item) {
2943
+ this.currentSize -= new Blob([item]).size;
2944
+ }
2945
+ localStorage.removeItem(oldestKey);
2946
+ }
2947
+ }
2948
+ };
2949
+
2950
+ // src/content/strategies.ts
2951
+ var RateLimiter = class {
2952
+ constructor(config) {
2953
+ this.requests = [];
2954
+ this.config = config;
2955
+ }
2956
+ async checkLimit() {
2957
+ const now = Date.now();
2958
+ const windowStart = now - this.config.timeWindow;
2959
+ this.requests = this.requests.filter((time) => time > windowStart);
2960
+ if (this.requests.length >= this.config.maxRequests) {
2961
+ const oldestRequest = this.requests[0];
2962
+ const waitTime = windowStart + this.config.timeWindow - now;
2963
+ if (waitTime > 0) {
2964
+ await new Promise((resolve) => setTimeout(resolve, waitTime));
2965
+ return this.checkLimit();
2966
+ }
2967
+ }
2968
+ this.requests.push(now);
2969
+ }
2970
+ getStats() {
2971
+ const now = Date.now();
2972
+ const windowStart = now - this.config.timeWindow;
2973
+ const currentRequests = this.requests.filter((time) => time > windowStart).length;
2974
+ return {
2975
+ currentRequests,
2976
+ limit: this.config.maxRequests
2977
+ };
2978
+ }
2979
+ };
2980
+ var ExponentialBackoff = class {
2981
+ constructor(config) {
2982
+ this.config = {
2983
+ jitter: true,
2984
+ ...config
2985
+ };
2986
+ }
2987
+ async execute(fn, onRetry) {
2988
+ let lastError;
2989
+ for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {
2990
+ try {
2991
+ return await fn();
2992
+ } catch (error) {
2993
+ lastError = error;
2994
+ if (this.isClientError(error) && !this.isRateLimitError(error)) {
2995
+ throw error;
2996
+ }
2997
+ if (attempt === this.config.maxRetries) {
2998
+ break;
2999
+ }
3000
+ const delay = this.calculateDelay(attempt);
3001
+ if (onRetry) {
3002
+ onRetry(attempt + 1, delay, error);
3003
+ }
3004
+ await new Promise((resolve) => setTimeout(resolve, delay));
3005
+ }
3006
+ }
3007
+ throw lastError;
3008
+ }
3009
+ calculateDelay(attempt) {
3010
+ let delay = this.config.baseDelay * Math.pow(2, attempt);
3011
+ delay = Math.min(delay, this.config.maxDelay);
3012
+ if (this.config.jitter) {
3013
+ delay = delay * (0.5 + Math.random());
3014
+ }
3015
+ return delay;
3016
+ }
3017
+ isClientError(error) {
3018
+ return error?.status >= 400 && error?.status < 500;
3019
+ }
3020
+ isRateLimitError(error) {
3021
+ return error?.status === 429;
3022
+ }
3023
+ };
3024
+ var RequestBatcher = class {
3025
+ constructor(batchWindow = 10, maxBatchSize = 20) {
3026
+ this.batchWindow = batchWindow;
3027
+ this.maxBatchSize = maxBatchSize;
3028
+ this.batch = [];
3029
+ this.processing = false;
3030
+ }
3031
+ async schedule(key, request) {
3032
+ return new Promise((resolve, reject) => {
3033
+ this.batch.push({ key, resolve, reject });
3034
+ if (this.batch.length >= this.maxBatchSize) {
3035
+ this.processBatch(request);
3036
+ } else if (!this.batchTimeout) {
3037
+ this.batchTimeout = setTimeout(
3038
+ () => this.processBatch(request),
3039
+ this.batchWindow
3040
+ );
3041
+ }
3042
+ });
3043
+ }
3044
+ async processBatch(request) {
3045
+ if (this.processing || this.batch.length === 0) return;
3046
+ this.processing = true;
3047
+ if (this.batchTimeout) {
3048
+ clearTimeout(this.batchTimeout);
3049
+ this.batchTimeout = void 0;
3050
+ }
3051
+ const currentBatch = [...this.batch];
3052
+ this.batch = [];
3053
+ try {
3054
+ const result = await request();
3055
+ currentBatch.forEach((item) => {
3056
+ item.resolve(result);
3057
+ });
3058
+ } catch (error) {
3059
+ currentBatch.forEach((item) => {
3060
+ item.reject(error);
3061
+ });
3062
+ } finally {
3063
+ this.processing = false;
3064
+ if (this.batch.length > 0) {
3065
+ setTimeout(() => this.processBatch(request), 0);
3066
+ }
3067
+ }
3068
+ }
3069
+ };
3070
+
3071
+ // src/content/utils.ts
3072
+ function validateSlug(slug) {
3073
+ if (!slug || typeof slug !== "string") {
3074
+ throw new Error("Slug must be a non-empty string");
3075
+ }
3076
+ if (!/^[a-z0-9-_]+$/.test(slug)) {
3077
+ throw new Error("Slug can only contain lowercase letters, numbers, hyphens, and underscores");
3078
+ }
3079
+ }
3080
+ function normalizeQuery(query) {
3081
+ const normalized = { ...query };
3082
+ normalized.page = Math.max(1, normalized.page || 1);
3083
+ normalized.limit = Math.min(100, Math.max(1, normalized.limit || 10));
3084
+ normalized.order = normalized.order || "desc";
3085
+ if (normalized.page < 1) {
3086
+ throw new Error("Page must be greater than 0");
3087
+ }
3088
+ if (normalized.limit < 1 || normalized.limit > 100) {
3089
+ throw new Error("Limit must be between 1 and 100");
3090
+ }
3091
+ return normalized;
3092
+ }
3093
+ function buildQueryString(query) {
3094
+ const params = new URLSearchParams();
3095
+ if (query.page) params.append("page", query.page.toString());
3096
+ if (query.limit) params.append("limit", query.limit.toString());
3097
+ if (query.sort) params.append("sort", query.sort);
3098
+ if (query.order) params.append("order", query.order);
3099
+ if (query.search) params.append("search", query.search);
3100
+ if (query.include?.length) {
3101
+ params.append("include", query.include.join(","));
3102
+ }
3103
+ if (query.fields?.length) {
3104
+ params.append("fields", query.fields.join(","));
3105
+ }
3106
+ if (query.filter) {
3107
+ params.append("filter", JSON.stringify(query.filter));
3108
+ }
3109
+ return params.toString();
3110
+ }
3111
+ function measurePerformance(name, fn) {
3112
+ const start = performance.now();
3113
+ const result = fn();
3114
+ const end = performance.now();
3115
+ if (process.env.NODE_ENV === "development") {
3116
+ console.log(`\u23F1\uFE0F ${name}: ${(end - start).toFixed(2)}ms`);
3117
+ }
3118
+ return { result, duration: end - start };
3119
+ }
3120
+
3121
+ // src/content/index.ts
3122
+ var ContentEngine = class {
3123
+ constructor(config) {
3124
+ this.config = config;
3125
+ this.localCache = new LocalCache();
3126
+ this.memoryCache = new MemoryCache({
3127
+ maxSize: 500,
3128
+ ttl: 5 * 60 * 1e3
3129
+ // 5 minutes
3130
+ });
3131
+ if (typeof window !== "undefined") {
3132
+ this.browserCache = new BrowserCache(config.projectId);
3133
+ }
3134
+ this.rateLimiter = new RateLimiter({
3135
+ maxRequests: config.debug ? 100 : 30,
3136
+ timeWindow: 6e4
3137
+ // 1 minute
3138
+ });
3139
+ this.backoff = new ExponentialBackoff({
3140
+ maxRetries: config.retries || 3,
3141
+ baseDelay: 100,
3142
+ maxDelay: 5e3,
3143
+ jitter: true
3144
+ });
3145
+ this.requestBatcher = new RequestBatcher(10, 20);
3146
+ this.defaultRevalidate = config.revalidateTime || 60;
3147
+ this.cacheStrategy = config.cacheStrategy || "memory";
3148
+ this.isServer = typeof window === "undefined";
3149
+ if (typeof window !== "undefined") {
3150
+ window.addEventListener("beforeunload", this.cleanup.bind(this));
3151
+ }
3152
+ }
3153
+ /**
3154
+ * Fetch a Singleton Page with enhanced caching
3155
+ */
3156
+ async getPage(slug, options = {}) {
3157
+ const { result, duration } = measurePerformance(
3158
+ `getPage("${slug}")`,
3159
+ () => this._getPage(slug, options)
3160
+ );
3161
+ if (this.config.debug && duration > 100) {
3162
+ console.warn(`[NexusHub] \u26A0\uFE0F getPage("${slug}") took ${duration.toFixed(2)}ms`);
3163
+ }
3164
+ return result;
3165
+ }
3166
+ async _getPage(slug, options = {}) {
3167
+ validateSlug(slug);
3168
+ const {
3169
+ revalidate = this.defaultRevalidate,
3170
+ tags = [],
3171
+ forceRefresh = false,
3172
+ includeMetadata = false
3173
+ } = options;
3174
+ const cacheKey = `page:${slug}`;
3175
+ if (!forceRefresh && this.cacheStrategy === "memory") {
3176
+ const cached = this.memoryCache.get(cacheKey);
3177
+ if (cached && this.isCacheValid(cached.metadata)) {
3178
+ if (this.config.debug) {
3179
+ console.log(`[NexusHub] \u26A1 Served '${slug}' from memory cache.`);
3180
+ }
3181
+ return includeMetadata ? cached : cached.data;
3182
+ }
3183
+ }
3184
+ if (!forceRefresh && !this.isServer && this.cacheStrategy === "localStorage" && this.browserCache) {
3185
+ const cached = this.browserCache.get(cacheKey);
3186
+ if (cached) {
3187
+ if (this.config.debug) {
3188
+ console.log(`[NexusHub] \u{1FAA3} Served '${slug}' from browser cache.`);
3189
+ }
3190
+ return cached;
3191
+ }
3192
+ }
3193
+ if (!forceRefresh && process.env.NODE_ENV === "development") {
3194
+ const localData = this.localCache.getPage(slug);
3195
+ if (localData) {
3196
+ if (this.config.debug) {
3197
+ console.log(`[NexusHub] \u{1F4C1} Served '${slug}' from local cache.`);
3198
+ }
3199
+ this.memoryCache.set(cacheKey, localData, {
3200
+ tags: [...tags, CacheTags.content(slug)],
3201
+ revalidate
3202
+ });
3203
+ return localData;
3204
+ }
3205
+ }
3206
+ try {
3207
+ await this.rateLimiter.checkLimit();
3208
+ const data = await this.backoff.execute(
3209
+ async () => {
3210
+ return this.fetchPage(slug, cacheKey, tags, revalidate, forceRefresh);
3211
+ },
3212
+ (attempt, delay, error) => {
3213
+ if (this.config.debug) {
3214
+ console.log(`[NexusHub] \u{1F504} Retry ${attempt} for '${slug}' after ${delay}ms: ${error.message}`);
3215
+ }
3216
+ }
3217
+ );
3218
+ return includeMetadata ? data : data.data;
3219
+ } catch (error) {
3220
+ const staleCache = this.memoryCache.get(cacheKey);
3221
+ if (staleCache && !forceRefresh) {
3222
+ console.warn(`[NexusHub] \u26A0\uFE0F Using stale cache for '${slug}' due to fetch error:`, error);
3223
+ return includeMetadata ? staleCache : staleCache.data;
3224
+ }
3225
+ throw this.normalizeError(error, `Failed to fetch page '${slug}'`);
3226
+ }
3227
+ }
3228
+ /**
3229
+ * Fetch a Collection with advanced query capabilities
3230
+ */
3231
+ async getCollection(collectionId, query = {}, options = {}) {
3232
+ const { result, duration } = measurePerformance(
3233
+ `getCollection("${collectionId}")`,
3234
+ () => this._getCollection(collectionId, query, options)
3235
+ );
3236
+ if (this.config.debug && duration > 100) {
3237
+ console.warn(`[NexusHub] \u26A0\uFE0F getCollection("${collectionId}") took ${duration.toFixed(2)}ms`);
3238
+ }
3239
+ return result;
3240
+ }
3241
+ async _getCollection(collectionId, query = {}, options = {}) {
3242
+ const normalizedQuery = normalizeQuery(query);
3243
+ const {
3244
+ revalidate = this.defaultRevalidate,
3245
+ tags = [],
3246
+ forceRefresh = false,
3247
+ includeMetadata = false
3248
+ } = options;
3249
+ const queryString = buildQueryString(normalizedQuery);
3250
+ const cacheKey = `collection:${collectionId}:${queryString}`;
3251
+ if (!forceRefresh && this.cacheStrategy === "memory") {
3252
+ const cached = this.memoryCache.get(cacheKey);
3253
+ if (cached && this.isCacheValid(cached.metadata)) {
3254
+ if (this.config.debug) {
3255
+ console.log(`[NexusHub] \u26A1 Served collection '${collectionId}' from memory cache.`);
3256
+ }
3257
+ return includeMetadata ? cached : cached.data;
3258
+ }
3259
+ }
3260
+ if (!forceRefresh && !this.isServer && this.cacheStrategy === "localStorage" && this.browserCache) {
3261
+ const cached = this.browserCache.get(cacheKey);
3262
+ if (cached) {
3263
+ return cached;
3264
+ }
3265
+ }
3266
+ if (!forceRefresh && process.env.NODE_ENV === "development") {
3267
+ const localCollection = this.localCache.getCollection(collectionId);
3268
+ if (localCollection) {
3269
+ const result = this.applyLocalQuery(localCollection, normalizedQuery);
3270
+ if (this.config.debug) {
3271
+ console.log(`[NexusHub] \u{1F4C1} Served collection '${collectionId}' from local cache.`);
3272
+ }
3273
+ this.memoryCache.set(cacheKey, result, {
3274
+ tags: [...tags, CacheTags.collection(collectionId)],
3275
+ revalidate
3276
+ });
3277
+ return result;
3278
+ }
3279
+ }
3280
+ try {
3281
+ await this.rateLimiter.checkLimit();
3282
+ const result = await this.backoff.execute(async () => {
3283
+ return this.fetchCollection(collectionId, normalizedQuery, cacheKey, tags, revalidate);
3284
+ });
3285
+ return includeMetadata ? result : result.data;
3286
+ } catch (error) {
3287
+ const staleCache = this.memoryCache.get(cacheKey);
3288
+ if (staleCache && !forceRefresh) {
3289
+ console.warn(`[NexusHub] \u26A0\uFE0F Using stale cache for collection '${collectionId}'`);
3290
+ return includeMetadata ? staleCache : staleCache.data;
3291
+ }
3292
+ throw this.normalizeError(error, `Failed to fetch collection '${collectionId}'`);
3293
+ }
3294
+ }
3295
+ /**
3296
+ * Fetch Global Settings with nested includes support
3297
+ */
3298
+ async getGlobals(options = {}) {
3299
+ const {
3300
+ include = [],
3301
+ revalidate = this.defaultRevalidate,
3302
+ forceRefresh = false
3303
+ } = options;
3304
+ const cacheKey = `globals:${include.join(",")}`;
3305
+ if (!forceRefresh && this.cacheStrategy === "memory") {
3306
+ const cached = this.memoryCache.get(cacheKey);
3307
+ if (cached && this.isCacheValid(cached.metadata)) {
3308
+ if (this.config.debug) console.log("[NexusHub] \u26A1 Served globals from memory cache.");
3309
+ return cached.data;
3310
+ }
3311
+ }
3312
+ if (!forceRefresh && !this.isServer && this.cacheStrategy === "localStorage" && this.browserCache) {
3313
+ const cached = this.browserCache.get(cacheKey);
3314
+ if (cached) {
3315
+ return cached;
3316
+ }
3317
+ }
3318
+ if (!forceRefresh && process.env.NODE_ENV === "development") {
3319
+ const localGlobals = this.localCache.getGlobals();
3320
+ if (localGlobals) {
3321
+ this.memoryCache.set(cacheKey, localGlobals, {
3322
+ tags: [CacheTags.global],
3323
+ revalidate
3324
+ });
3325
+ return localGlobals;
3326
+ }
3327
+ }
3328
+ try {
3329
+ await this.rateLimiter.checkLimit();
3330
+ const url = `${this.config.apiUrl}/content/${this.config.projectId}/globals`;
3331
+ const params = include.length > 0 ? `?include=${include.join(",")}` : "";
3332
+ const res = await this.fetchWithTimeout(
3333
+ `${url}${params}`,
3334
+ {
3335
+ method: "GET",
3336
+ headers: this.getHeaders(),
3337
+ next: {
3338
+ tags: [CacheTags.project(this.config.projectId), CacheTags.global],
3339
+ revalidate
3340
+ }
3341
+ }
3342
+ );
3343
+ if (!res.ok) {
3344
+ throw new Error(`API Error ${res.status}: ${res.statusText}`);
3345
+ }
3346
+ const json = await res.json();
3347
+ const data = json.data || json;
3348
+ this.memoryCache.set(cacheKey, data, {
3349
+ tags: [CacheTags.project(this.config.projectId), CacheTags.global],
3350
+ revalidate
3351
+ });
3352
+ if (!this.isServer && this.cacheStrategy === "localStorage" && this.browserCache) {
3353
+ this.browserCache.set(cacheKey, data, revalidate * 1e3);
3354
+ }
3355
+ return data;
3356
+ } catch (error) {
3357
+ const staleCache = this.memoryCache.get(cacheKey);
3358
+ if (staleCache && !forceRefresh) {
3359
+ console.warn("[NexusHub] \u26A0\uFE0F Using stale cache for globals");
3360
+ return staleCache.data;
3361
+ }
3362
+ throw this.normalizeError(error, "Failed to fetch globals");
3363
+ }
3364
+ }
3365
+ /**
3366
+ * Fetch a single item from a collection
3367
+ */
3368
+ async getItem(collectionId, itemId, options = {}) {
3369
+ const cacheKey = `item:${collectionId}:${itemId}`;
3370
+ if (this.cacheStrategy === "memory") {
3371
+ const cached = this.memoryCache.get(cacheKey);
3372
+ if (cached && this.isCacheValid(cached.metadata)) {
3373
+ if (this.config.debug) {
3374
+ console.log(`[NexusHub] \u26A1 Served item '${itemId}' from cache.`);
3375
+ }
3376
+ return cached.data;
3377
+ }
3378
+ }
3379
+ const params = new URLSearchParams();
3380
+ if (options.include?.length) {
3381
+ params.append("include", options.include.join(","));
3382
+ }
3383
+ const url = `${this.config.apiUrl}/content/${this.config.projectId}/collection/${collectionId}/${itemId}?${params}`;
3384
+ const res = await this.fetchWithTimeout(url, {
3385
+ method: "GET",
3386
+ headers: this.getHeaders(),
3387
+ next: {
3388
+ tags: [
3389
+ CacheTags.project(this.config.projectId),
3390
+ CacheTags.collection(collectionId),
3391
+ `item_${itemId}`,
3392
+ ...options.tags || []
3393
+ ],
3394
+ revalidate: options.revalidate || this.defaultRevalidate
3395
+ }
3396
+ });
3397
+ if (!res.ok) {
3398
+ throw new Error(`API Error ${res.status}: ${res.statusText}`);
3399
+ }
3400
+ const json = await res.json();
3401
+ const data = json.data || json;
3402
+ if (this.cacheStrategy === "memory") {
3403
+ this.memoryCache.set(cacheKey, data, {
3404
+ tags: [
3405
+ CacheTags.project(this.config.projectId),
3406
+ CacheTags.collection(collectionId),
3407
+ `item_${itemId}`
3408
+ ],
3409
+ revalidate: options.revalidate || this.defaultRevalidate
3410
+ });
3411
+ }
3412
+ return data;
3413
+ }
3414
+ /**
3415
+ * Search across collections
3416
+ */
3417
+ async search(query, options = {}) {
3418
+ const params = new URLSearchParams({
3419
+ q: query,
3420
+ limit: (options.limit || 20).toString()
3421
+ });
3422
+ if (options.collections?.length) {
3423
+ params.append("collections", options.collections.join(","));
3424
+ }
3425
+ if (options.fields?.length) {
3426
+ params.append("fields", options.fields.join(","));
3427
+ }
3428
+ const url = `${this.config.apiUrl}/content/${this.config.projectId}/search?${params}`;
3429
+ const res = await this.fetchWithTimeout(url, {
3430
+ method: "GET",
3431
+ headers: this.getHeaders(),
3432
+ next: {
3433
+ tags: [CacheTags.project(this.config.projectId), "search"],
3434
+ revalidate: options.revalidate || 60
3435
+ }
3436
+ });
3437
+ if (!res.ok) {
3438
+ throw new Error(`API Error ${res.status}: ${res.statusText}`);
3439
+ }
3440
+ return await res.json();
3441
+ }
3442
+ /**
3443
+ * Prefetch content for better performance
3444
+ */
3445
+ async prefetch(urls) {
3446
+ if (typeof window !== "undefined" && "requestIdleCallback" in window) {
3447
+ requestIdleCallback(async () => {
3448
+ await Promise.allSettled(
3449
+ urls.map((url) => fetch(url, { priority: "low" }))
3450
+ );
3451
+ });
3452
+ }
3453
+ }
3454
+ /**
3455
+ * Invalidate cache by tags
3456
+ */
3457
+ invalidateCache(tags) {
3458
+ this.memoryCache.invalidateByTags(tags);
3459
+ if (this.config.debug) {
3460
+ console.log(`[NexusHub] \u267B\uFE0F Invalidated cache for tags: ${tags.join(", ")}`);
3461
+ }
3462
+ }
3463
+ /**
3464
+ * Clear all caches
3465
+ */
3466
+ clearCache() {
3467
+ this.memoryCache.clear();
3468
+ if (this.browserCache) {
3469
+ this.browserCache.clear();
3470
+ }
3471
+ if (this.config.debug) {
3472
+ console.log("[NexusHub] \u{1F9F9} Cleared all caches");
3473
+ }
3474
+ }
3475
+ /**
3476
+ * Get cache statistics
3477
+ */
3478
+ getCacheStats() {
3479
+ const stats = {
3480
+ memory: this.memoryCache.getStats(),
3481
+ local: { loaded: this.localCache.isLoaded() }
3482
+ };
3483
+ if (this.browserCache) {
3484
+ stats.browser = { size: 0 };
3485
+ }
3486
+ return stats;
3487
+ }
3488
+ /**
3489
+ * Cancel ongoing requests
3490
+ */
3491
+ cancelRequests() {
3492
+ if (this.abortController) {
3493
+ this.abortController.abort();
3494
+ this.abortController = new AbortController();
3495
+ }
3496
+ }
3497
+ /**
3498
+ * Subscribe to content updates (SSE)
3499
+ */
3500
+ subscribeToUpdates(callback) {
3501
+ if (typeof EventSource === "undefined") {
3502
+ console.warn("[NexusHub] EventSource not supported in this environment");
3503
+ return () => {
3504
+ };
3505
+ }
3506
+ const eventSource = new EventSource(
3507
+ `${this.config.apiUrl}/content/${this.config.projectId}/updates`
3508
+ );
3509
+ eventSource.onmessage = (event) => {
3510
+ try {
3511
+ const data = JSON.parse(event.data);
3512
+ callback(data);
3513
+ if (data.type === "content.updated" && data.slug) {
3514
+ this.invalidateCache([CacheTags.content(data.slug)]);
3515
+ }
3516
+ } catch (error) {
3517
+ console.error("[NexusHub] Failed to parse update event:", error);
3518
+ }
3519
+ };
3520
+ eventSource.onerror = (error) => {
3521
+ console.error("[NexusHub] EventSource error:", error);
3522
+ eventSource.close();
3523
+ };
3524
+ return () => {
3525
+ eventSource.close();
3526
+ };
3527
+ }
3528
+ // Private helper methods
3529
+ async fetchPage(slug, cacheKey, tags, revalidate, forceRefresh) {
3530
+ const url = `${this.config.apiUrl}/content/${this.config.projectId}/page/${slug}`;
3531
+ if (this.config.debug) {
3532
+ console.log(`[NexusHub] \u{1F310} Fetching: ${url}`);
3533
+ }
3534
+ const res = await this.fetchWithTimeout(url, {
3535
+ method: "GET",
3536
+ headers: this.getHeaders(),
3537
+ next: {
3538
+ tags: [
3539
+ CacheTags.project(this.config.projectId),
3540
+ CacheTags.content(slug),
3541
+ ...tags
3542
+ ],
3543
+ revalidate
3544
+ }
3545
+ });
3546
+ if (!res.ok) {
3547
+ if (res.status === 404) {
3548
+ throw new Error(`Page '${slug}' not found. Check your Dashboard or Seed data.`);
3549
+ }
3550
+ throw new Error(`API Error ${res.status}: ${res.statusText}`);
3551
+ }
3552
+ const json = await res.json();
3553
+ const etag = res.headers.get("etag");
3554
+ const cacheEntry = {
3555
+ data: json.data,
3556
+ metadata: {
3557
+ timestamp: Date.now(),
3558
+ etag: etag || void 0,
3559
+ expiresAt: Date.now() + revalidate * 1e3,
3560
+ tags: [...tags, CacheTags.content(slug)]
3561
+ }
3562
+ };
3563
+ if (this.cacheStrategy === "memory") {
3564
+ this.memoryCache.set(cacheKey, cacheEntry.data, {
3565
+ tags: cacheEntry.metadata.tags,
3566
+ revalidate
3567
+ });
3568
+ }
3569
+ if (!this.isServer && this.cacheStrategy === "localStorage" && this.browserCache) {
3570
+ this.browserCache.set(cacheKey, cacheEntry.data, revalidate * 1e3);
3571
+ }
3572
+ return cacheEntry;
3573
+ }
3574
+ async fetchCollection(collectionId, query, cacheKey, tags, revalidate) {
3575
+ const params = buildQueryString(query);
3576
+ const url = `${this.config.apiUrl}/content/${this.config.projectId}/collection/${collectionId}?${params}`;
3577
+ if (this.config.debug) {
3578
+ console.log(`[NexusHub] \u{1F310} Fetching Collection: ${url}`);
3579
+ }
3580
+ const res = await this.fetchWithTimeout(url, {
3581
+ method: "GET",
3582
+ headers: this.getHeaders(),
3583
+ next: {
3584
+ tags: [
3585
+ CacheTags.project(this.config.projectId),
3586
+ CacheTags.collection(collectionId),
3587
+ ...tags
3588
+ ],
3589
+ revalidate
3590
+ }
3591
+ });
3592
+ if (!res.ok) {
3593
+ throw new Error(`API Error ${res.status}: ${res.statusText}`);
3594
+ }
3595
+ const json = await res.json();
3596
+ const etag = res.headers.get("etag");
3597
+ const cacheEntry = {
3598
+ data: json,
3599
+ metadata: {
3600
+ timestamp: Date.now(),
3601
+ etag: etag || void 0,
3602
+ expiresAt: Date.now() + revalidate * 1e3,
3603
+ tags: [...tags, CacheTags.collection(collectionId)]
3604
+ }
3605
+ };
3606
+ if (this.cacheStrategy === "memory") {
3607
+ this.memoryCache.set(cacheKey, cacheEntry.data, {
3608
+ tags: cacheEntry.metadata.tags,
3609
+ revalidate
3610
+ });
3611
+ }
3612
+ if (!this.isServer && this.cacheStrategy === "localStorage" && this.browserCache) {
3613
+ this.browserCache.set(cacheKey, cacheEntry.data, revalidate * 1e3);
3614
+ }
3615
+ return cacheEntry;
3616
+ }
3617
+ async fetchWithTimeout(url, options = {}) {
3618
+ const { timeout = this.config.timeout || 1e4, next, ...fetchOptions } = options;
3619
+ this.abortController = new AbortController();
3620
+ const timeoutId = setTimeout(() => {
3621
+ this.abortController.abort();
3622
+ }, timeout);
3623
+ try {
3624
+ const response = await fetch(url, {
3625
+ ...fetchOptions,
3626
+ signal: this.abortController.signal
3627
+ });
3628
+ clearTimeout(timeoutId);
3629
+ return response;
3630
+ } catch (error) {
3631
+ clearTimeout(timeoutId);
3632
+ throw error;
3633
+ }
3634
+ }
3635
+ applyLocalQuery(items, query) {
3636
+ let filtered = [...items];
3637
+ if (query.search) {
3638
+ const searchLower = query.search.toLowerCase();
3639
+ filtered = filtered.filter(
3640
+ (item) => JSON.stringify(item).toLowerCase().includes(searchLower)
3641
+ );
3642
+ }
3643
+ if (query.filter) {
3644
+ filtered = filtered.filter((item) => {
3645
+ return Object.entries(query.filter).every(([key, value]) => {
3646
+ const itemValue = item[key];
3647
+ if (itemValue === void 0) return false;
3648
+ if (Array.isArray(value)) {
3649
+ return value.includes(itemValue);
3650
+ }
3651
+ return itemValue === value;
3652
+ });
3653
+ });
3654
+ }
3655
+ if (query.sort) {
3656
+ filtered.sort((a, b) => {
3657
+ const aVal = a[query.sort];
3658
+ const bVal = b[query.sort];
3659
+ const order = query.order === "asc" ? 1 : -1;
3660
+ if (aVal < bVal) return -1 * order;
3661
+ if (aVal > bVal) return 1 * order;
3662
+ return 0;
3663
+ });
3664
+ }
3665
+ const page = query.page || 1;
3666
+ const limit = query.limit || 10;
3667
+ const start = (page - 1) * limit;
3668
+ const end = start + limit;
3669
+ const total = filtered.length;
3670
+ return {
3671
+ items: filtered.slice(start, end),
3672
+ total,
3673
+ page,
3674
+ limit,
3675
+ totalPages: Math.ceil(total / limit),
3676
+ hasNext: end < total,
3677
+ hasPrev: start > 0
3678
+ };
3679
+ }
3680
+ isCacheValid(metadata) {
3681
+ return Date.now() < metadata.expiresAt;
3682
+ }
3683
+ getHeaders() {
3684
+ const headers = {
3685
+ "Content-Type": "application/json",
3686
+ "X-Nexus-Client": "client-sdk/1.0.0",
3687
+ "X-Nexus-Project": this.config.projectId
3688
+ };
3689
+ if (this.config.apiKey) {
3690
+ headers["Authorization"] = `Bearer ${this.config.apiKey}`;
3691
+ }
3692
+ return headers;
3693
+ }
3694
+ normalizeError(error, context) {
3695
+ if (error instanceof Error) {
3696
+ if (error.name === "AbortError") {
3697
+ return new Error(`${context}: Request timeout`);
3698
+ }
3699
+ return error;
3700
+ }
3701
+ return new Error(`${context}: ${String(error)}`);
3702
+ }
3703
+ /**
3704
+ * Cleanup resources
3705
+ */
3706
+ cleanup() {
3707
+ this.cancelRequests();
3708
+ if (typeof window !== "undefined") {
3709
+ window.removeEventListener("beforeunload", this.cleanup.bind(this));
3710
+ }
3711
+ }
3712
+ };
3713
+
3714
+ // src/client.ts
3715
+ var NexusClient = class {
3716
+ constructor(config) {
3717
+ const fullConfig = getFullConfig(config);
3718
+ this.config = {
3719
+ debug: config?.debug || false,
3720
+ cacheStrategy: config?.cacheStrategy || "memory",
3721
+ revalidateTime: config?.revalidateTime || 60,
3722
+ timeout: config?.timeout || 1e4,
3723
+ retries: config?.retries || 3,
3724
+ ...fullConfig
3725
+ };
3726
+ const errors = validateConfig(this.config);
3727
+ if (errors.length > 0) {
3728
+ console.warn("\u26A0\uFE0F NexusHub: Configuration issues:", errors.join(", "));
3729
+ if (!this.config.projectId) {
3730
+ console.warn("\u26A0\uFE0F NexusHub: No Project ID found. Content fetching will fail.");
3731
+ }
3732
+ }
3733
+ this.content = new ContentEngine(this.config);
3734
+ }
3735
+ // Helper alias for cleaner code
3736
+ getPage(slug, options) {
3737
+ return this.content.getPage(slug, options);
3738
+ }
3739
+ // Get current config (readonly)
3740
+ getConfig() {
3741
+ return { ...this.config };
3742
+ }
3743
+ };
3744
+ var nexus = new NexusClient();
3745
+ var createNexusClient = (config) => new NexusClient(config);
3746
+
3747
+ // src/components/NexusProvider.tsx
3748
+ var import_react2 = require("react");
3749
+ var import_navigation = __toESM(require_navigation2());
3750
+
3751
+ // src/analytics/tracker.ts
3752
+ var Tracker = class {
3753
+ constructor(config) {
3754
+ this.queue = [];
3755
+ this.isFlushing = false;
3756
+ this.SDK_VERSION = "1.0.0";
3757
+ this.config = config;
3758
+ this.sessionId = this.getSessionId();
3759
+ this.sessionStart = Date.now();
3760
+ this.endpoint = `${this.config.apiUrl.replace("/v1", "")}:3002/collect`;
3761
+ if (typeof window !== "undefined") {
3762
+ this.startFlushing();
3763
+ }
3764
+ }
3765
+ /**
3766
+ * Generates or retrieves a persistent Session ID
3767
+ */
3768
+ getSessionId() {
3769
+ if (typeof window === "undefined") return "server-session";
3770
+ let sid = localStorage.getItem("nexus_sid");
3771
+ let sessionStart = localStorage.getItem("nexus_session_start");
3772
+ const now = Date.now();
3773
+ const THIRTY_MINUTES = 30 * 60 * 1e3;
3774
+ if (!sid || !sessionStart || now - parseInt(sessionStart) > THIRTY_MINUTES) {
3775
+ sid = `sess_${Math.random().toString(36).substring(2, 11)}_${now}`;
3776
+ localStorage.setItem("nexus_sid", sid);
3777
+ localStorage.setItem("nexus_session_start", now.toString());
3778
+ localStorage.removeItem("nexus_last_event");
3779
+ }
3780
+ return sid;
3781
+ }
3782
+ /**
3783
+ * Start periodic flushing of analytics queue
3784
+ */
3785
+ startFlushing() {
3786
+ this.flushInterval = setInterval(() => {
3787
+ this.flushQueue();
3788
+ }, 1e4);
3789
+ window.addEventListener("beforeunload", () => {
3790
+ this.flushQueue(true);
3791
+ });
3792
+ }
3793
+ /**
3794
+ * Send data to Rust Engine via Beacon or Fetch
3795
+ */
3796
+ send(eventType, payload = {}) {
3797
+ if (typeof window === "undefined") return;
3798
+ const eventData = {
3799
+ project_id: this.config.projectId,
3800
+ session_id: this.sessionId,
3801
+ url: window.location.href,
3802
+ referrer: document.referrer,
3803
+ user_agent: window.navigator.userAgent,
3804
+ screen_width: window.screen.width,
3805
+ screen_height: window.screen.height,
3806
+ language: window.navigator.language,
3807
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
3808
+ event_type: eventType,
3809
+ event_data: payload,
3810
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
3811
+ version: this.SDK_VERSION
3812
+ };
3813
+ this.queue.push(eventData);
3814
+ localStorage.setItem("nexus_last_event", JSON.stringify({
3815
+ type: eventType,
3816
+ timestamp: eventData.timestamp
3817
+ }));
3818
+ if (this.queue.length >= 20) {
3819
+ this.flushQueue();
3820
+ }
3821
+ }
3822
+ /**
3823
+ * Get session ID
3824
+ */
3825
+ getSession() {
3826
+ return this.sessionId;
3827
+ }
3828
+ /**
3829
+ * Get session duration
3830
+ */
3831
+ getSessionDuration() {
3832
+ return Date.now() - this.sessionStart;
3833
+ }
3834
+ /**
3835
+ * Get session information
3836
+ */
3837
+ getSessionInfo() {
3838
+ return {
3839
+ id: this.sessionId,
3840
+ start: this.sessionStart,
3841
+ duration: this.getSessionDuration(),
3842
+ eventsCount: this.queue.length
3843
+ };
3844
+ }
3845
+ /**
3846
+ * Flush the queue to the analytics endpoint
3847
+ */
3848
+ async flushQueue(forceSync = false) {
3849
+ if (this.isFlushing || this.queue.length === 0) return;
3850
+ this.isFlushing = true;
3851
+ const events = [...this.queue];
3852
+ this.queue = [];
3853
+ try {
3854
+ const payload = {
3855
+ project_id: this.config.projectId,
3856
+ events,
3857
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
3858
+ };
3859
+ if (forceSync && "navigator" in window && navigator.sendBeacon) {
3860
+ const blob = new Blob([JSON.stringify(payload)], { type: "application/json" });
3861
+ const success = navigator.sendBeacon(this.endpoint, blob);
3862
+ if (!success) {
3863
+ await fetch(this.endpoint, {
3864
+ method: "POST",
3865
+ body: JSON.stringify(payload),
3866
+ headers: { "Content-Type": "application/json" },
3867
+ keepalive: true
3868
+ });
3869
+ }
3870
+ } else {
3871
+ await fetch(this.endpoint, {
3872
+ method: "POST",
3873
+ body: JSON.stringify(payload),
3874
+ headers: { "Content-Type": "application/json" }
3875
+ });
3876
+ }
3877
+ } catch (error) {
3878
+ console.error("NexusHub Analytics Error:", error);
3879
+ const fiveMinutesAgo = Date.now() - 5 * 60 * 1e3;
3880
+ const recentEvents = events.filter(
3881
+ (event) => new Date(event.timestamp).getTime() > fiveMinutesAgo
3882
+ );
3883
+ this.queue.unshift(...recentEvents);
3884
+ } finally {
3885
+ this.isFlushing = false;
3886
+ }
3887
+ }
3888
+ /**
3889
+ * Manually flush events
3890
+ */
3891
+ async flush() {
3892
+ await this.flushQueue();
3893
+ }
3894
+ /**
3895
+ * Stop tracking and cleanup
3896
+ */
3897
+ stop() {
3898
+ if (this.flushInterval) {
3899
+ clearInterval(this.flushInterval);
3900
+ }
3901
+ this.flushQueue(true);
3902
+ }
3903
+ };
3904
+
3905
+ // src/analytics/vitals.ts
3906
+ var import_web_vitals = require("web-vitals");
3907
+ var initVitals = (tracker) => {
3908
+ if (typeof window === "undefined") return;
3909
+ const sendMetric = (metric) => {
3910
+ tracker.send("web_vital", {
3911
+ metric_name: metric.name,
3912
+ value: Math.round(metric.value * 100) / 100,
3913
+ // Round to 2 decimal places
3914
+ rating: metric.rating,
3915
+ // 'good', 'needs-improvement', 'poor'
3916
+ delta: Math.round(metric.delta * 100) / 100,
3917
+ id: metric.id,
3918
+ navigation_type: metric.navigationType
3919
+ });
3920
+ if (process.env.NODE_ENV === "development") {
3921
+ console.log(`\u{1F4CA} ${metric.name}: ${metric.value} (${metric.rating})`);
3922
+ }
3923
+ };
3924
+ (0, import_web_vitals.onCLS)(sendMetric);
3925
+ (0, import_web_vitals.onLCP)(sendMetric);
3926
+ (0, import_web_vitals.onTTFB)(sendMetric);
3927
+ (0, import_web_vitals.onINP)(sendMetric);
3928
+ if ("PerformanceObserver" in window) {
3929
+ const lcpObserver = new PerformanceObserver((entryList) => {
3930
+ for (const entry of entryList.getEntries()) {
3931
+ const lcpEntry = entry;
3932
+ tracker.send("performance_entry", {
3933
+ type: entry.entryType,
3934
+ name: entry.name,
3935
+ startTime: Math.round(entry.startTime),
3936
+ duration: Math.round(entry.duration),
3937
+ renderTime: Math.round(lcpEntry.renderTime || 0),
3938
+ loadTime: Math.round(lcpEntry.loadTime || 0),
3939
+ size: lcpEntry.size
3940
+ });
3941
+ }
3942
+ });
3943
+ lcpObserver.observe({ type: "largest-contentful-paint", buffered: true });
3944
+ const fcpObserver = new PerformanceObserver((entryList) => {
3945
+ for (const entry of entryList.getEntries()) {
3946
+ tracker.send("performance_entry", {
3947
+ type: entry.entryType,
3948
+ name: entry.name,
3949
+ startTime: Math.round(entry.startTime)
3950
+ });
3951
+ }
3952
+ });
3953
+ fcpObserver.observe({ type: "paint", buffered: true });
3954
+ const longTaskObserver = new PerformanceObserver((entryList) => {
3955
+ for (const entry of entryList.getEntries()) {
3956
+ if (entry.duration > 50) {
3957
+ const taskEntry = entry;
3958
+ tracker.send("long_task", {
3959
+ duration: Math.round(entry.duration),
3960
+ startTime: Math.round(entry.startTime),
3961
+ attribution: taskEntry.attribution
3962
+ });
3963
+ }
3964
+ }
3965
+ });
3966
+ longTaskObserver.observe({ type: "longtask", buffered: true });
3967
+ }
3968
+ if ("memory" in performance) {
3969
+ const memory = performance.memory;
3970
+ tracker.send("memory_usage", {
3971
+ usedJSHeapSize: memory.usedJSHeapSize,
3972
+ totalJSHeapSize: memory.totalJSHeapSize,
3973
+ jsHeapSizeLimit: memory.jsHeapSizeLimit
3974
+ });
3975
+ }
3976
+ if ("connection" in navigator && navigator.connection) {
3977
+ const connection = navigator.connection;
3978
+ tracker.send("network_info", {
3979
+ effectiveType: connection.effectiveType,
3980
+ downlink: connection.downlink,
3981
+ rtt: connection.rtt,
3982
+ saveData: connection.saveData
3983
+ });
3984
+ }
3985
+ };
3986
+
3987
+ // src/analytics/index.ts
3988
+ var AnalyticsEngine = class {
3989
+ constructor(config) {
3990
+ this.tracker = new Tracker(config);
3991
+ }
3992
+ start() {
3993
+ this.pageView();
3994
+ initVitals(this.tracker);
3995
+ if (typeof window !== "undefined") {
3996
+ window.addEventListener("click", (e) => {
3997
+ const target = e.target;
3998
+ const link = target.closest("a");
3999
+ if (link) {
4000
+ this.tracker.send("click", {
4001
+ href: link.href,
4002
+ text: link.innerText.substring(0, 100),
4003
+ // Limit text length
4004
+ id: link.id,
4005
+ className: link.className,
4006
+ dataset: link.dataset
4007
+ });
4008
+ }
4009
+ const button = target.closest("button");
4010
+ if (button) {
4011
+ this.tracker.send("button_click", {
4012
+ text: button.innerText.substring(0, 100),
4013
+ id: button.id,
4014
+ className: button.className,
4015
+ type: button.type
4016
+ });
4017
+ }
4018
+ });
4019
+ document.addEventListener("submit", (e) => {
4020
+ const form = e.target;
4021
+ if (form) {
4022
+ this.tracker.send("form_submit", {
4023
+ formId: form.id,
4024
+ action: form.action,
4025
+ method: form.method,
4026
+ fieldsCount: form.elements.length
4027
+ });
4028
+ }
4029
+ });
4030
+ if (typeof window.history !== "undefined") {
4031
+ const originalPushState = history.pushState;
4032
+ const originalReplaceState = history.replaceState;
4033
+ history.pushState = function(...args) {
4034
+ originalPushState.apply(this, args);
4035
+ window.dispatchEvent(new Event("pushstate"));
4036
+ window.dispatchEvent(new Event("locationchange"));
4037
+ };
4038
+ history.replaceState = function(...args) {
4039
+ originalReplaceState.apply(this, args);
4040
+ window.dispatchEvent(new Event("replacestate"));
4041
+ window.dispatchEvent(new Event("locationchange"));
4042
+ };
4043
+ window.addEventListener("popstate", () => {
4044
+ window.dispatchEvent(new Event("locationchange"));
4045
+ });
4046
+ window.addEventListener("locationchange", () => {
4047
+ this.pageView();
4048
+ });
4049
+ }
4050
+ }
4051
+ }
4052
+ pageView() {
4053
+ if (typeof window !== "undefined") {
4054
+ const pageData = {
4055
+ path: window.location.pathname,
4056
+ search: window.location.search,
4057
+ hash: window.location.hash,
4058
+ referrer: document.referrer,
4059
+ title: document.title
4060
+ };
4061
+ this.tracker.send("page_view", pageData);
4062
+ }
4063
+ }
4064
+ /**
4065
+ * The "Handshake" - Linking Anonymous to Known User
4066
+ */
4067
+ async identify(userId, traits = {}) {
4068
+ try {
4069
+ const endpoint = `${this.tracker["config"].apiUrl.replace("/v1", "")}:3002/identify`;
4070
+ const response = await fetch(endpoint, {
4071
+ method: "POST",
4072
+ headers: { "Content-Type": "application/json" },
4073
+ body: JSON.stringify({
4074
+ project_id: this.tracker["config"].projectId,
4075
+ session_id: this.tracker.getSession(),
4076
+ user_id: userId,
4077
+ traits,
4078
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
4079
+ })
4080
+ });
4081
+ return response.ok;
4082
+ } catch (error) {
4083
+ console.error("NexusHub Analytics Identify Error:", error);
4084
+ return false;
4085
+ }
4086
+ }
4087
+ /**
4088
+ * Track custom events
4089
+ */
4090
+ track(eventName, properties = {}) {
4091
+ this.tracker.send("custom_event", {
4092
+ event_name: eventName,
4093
+ ...properties
4094
+ });
4095
+ }
4096
+ /**
4097
+ * Set user properties
4098
+ */
4099
+ setUserProperties(properties) {
4100
+ this.tracker.send("user_properties", properties);
4101
+ }
4102
+ /**
4103
+ * Track e-commerce events
4104
+ */
4105
+ trackPurchase(orderData) {
4106
+ this.tracker.send("purchase", {
4107
+ ...orderData,
4108
+ currency: orderData.currency || "USD",
4109
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
4110
+ });
4111
+ }
4112
+ /**
4113
+ * Track errors
4114
+ */
4115
+ trackError(error, context) {
4116
+ this.tracker.send("error", {
4117
+ message: error.message,
4118
+ stack: error.stack,
4119
+ context,
4120
+ url: typeof window !== "undefined" ? window.location.href : "",
4121
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
4122
+ });
4123
+ }
4124
+ /**
4125
+ * Get session ID
4126
+ */
4127
+ getSessionId() {
4128
+ return this.tracker.getSession();
4129
+ }
4130
+ /**
4131
+ * Stop analytics tracking
4132
+ */
4133
+ stop() {
4134
+ this.tracker.send("session_end", {
4135
+ session_id: this.tracker.getSession(),
4136
+ duration: this.tracker.getSessionDuration()
4137
+ });
4138
+ }
4139
+ };
4140
+
4141
+ // src/auth/context.tsx
4142
+ var import_react = require("react");
4143
+ var import_jsx_runtime = require("react/jsx-runtime");
4144
+ var AuthContext = (0, import_react.createContext)(null);
4145
+ var AuthProvider = ({
4146
+ children,
4147
+ config
4148
+ }) => {
4149
+ const [user, setUser] = (0, import_react.useState)(null);
4150
+ const [isLoading, setIsLoading] = (0, import_react.useState)(true);
4151
+ const [error, setError] = (0, import_react.useState)(null);
4152
+ const API_URL = `${config.apiUrl}/project-auth`;
4153
+ (0, import_react.useEffect)(() => {
4154
+ checkSession();
4155
+ }, []);
4156
+ const checkSession = async () => {
4157
+ try {
4158
+ const res = await fetch(`${API_URL}/me`, {
4159
+ headers: { "x-project-id": config.projectId }
4160
+ });
4161
+ if (res.ok) {
4162
+ const data = await res.json();
4163
+ setUser(data);
4164
+ }
4165
+ } catch (err) {
4166
+ setUser(null);
4167
+ } finally {
4168
+ setIsLoading(false);
4169
+ }
4170
+ };
4171
+ const login = async (creds) => {
4172
+ setIsLoading(true);
4173
+ setError(null);
4174
+ try {
4175
+ const res = await fetch(`${API_URL}/login`, {
4176
+ method: "POST",
4177
+ headers: {
4178
+ "Content-Type": "application/json",
4179
+ "x-project-id": config.projectId
4180
+ },
4181
+ body: JSON.stringify(creds)
4182
+ });
4183
+ if (!res.ok) throw new Error(await res.text());
4184
+ const data = await res.json();
4185
+ setUser(data.user);
4186
+ } catch (err) {
4187
+ setError(err);
4188
+ throw err;
4189
+ } finally {
4190
+ setIsLoading(false);
4191
+ }
4192
+ };
4193
+ const register = async (creds) => {
4194
+ setIsLoading(true);
4195
+ setError(null);
4196
+ try {
4197
+ const res = await fetch(`${API_URL}/register`, {
4198
+ method: "POST",
4199
+ headers: {
4200
+ "Content-Type": "application/json",
4201
+ "x-project-id": config.projectId
4202
+ },
4203
+ body: JSON.stringify(creds)
4204
+ });
4205
+ if (!res.ok) throw new Error(await res.text());
4206
+ const data = await res.json();
4207
+ setUser(data.user);
4208
+ } catch (err) {
4209
+ setError(err);
4210
+ throw err;
4211
+ } finally {
4212
+ setIsLoading(false);
4213
+ }
4214
+ };
4215
+ const logout = async () => {
4216
+ try {
4217
+ await fetch(`${API_URL}/logout`, { method: "POST" });
4218
+ setUser(null);
4219
+ } catch (err) {
4220
+ console.error("Logout failed", err);
4221
+ }
4222
+ };
4223
+ const loginWithGoogle = () => {
4224
+ window.location.href = `${API_URL}/google?projectId=${config.projectId}`;
4225
+ };
4226
+ const updateProfile = async (data) => {
4227
+ const res = await fetch(`${API_URL}/me`, {
4228
+ method: "PATCH",
4229
+ headers: {
4230
+ "Content-Type": "application/json",
4231
+ "x-project-id": config.projectId
4232
+ },
4233
+ body: JSON.stringify(data)
4234
+ });
4235
+ if (res.ok) {
4236
+ const updated = await res.json();
4237
+ setUser(updated);
4238
+ }
4239
+ };
4240
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuthContext.Provider, { value: {
4241
+ user,
4242
+ isLoading,
4243
+ error,
4244
+ isAuthenticated: !!user,
4245
+ login,
4246
+ register,
4247
+ logout,
4248
+ loginWithGoogle,
4249
+ updateProfile
4250
+ }, children });
4251
+ };
4252
+ var useNexusAuth = () => {
4253
+ const context = (0, import_react.useContext)(AuthContext);
4254
+ if (!context) {
4255
+ throw new Error("useNexusAuth must be used within a NexusProvider");
4256
+ }
4257
+ return context;
4258
+ };
4259
+
4260
+ // src/components/NexusProvider.tsx
4261
+ var import_jsx_runtime2 = require("react/jsx-runtime");
4262
+ var NexusContext = (0, import_react2.createContext)(null);
4263
+ var NexusProvider = ({
4264
+ children,
4265
+ projectId
4266
+ }) => {
4267
+ const pathname = (0, import_navigation.usePathname)();
4268
+ const searchParams = (0, import_navigation.useSearchParams)();
4269
+ const analyticsRef = (0, import_react2.useRef)(null);
4270
+ (0, import_react2.useEffect)(() => {
4271
+ if (!analyticsRef.current) {
4272
+ if (projectId) {
4273
+ nexus["config"].projectId = projectId;
4274
+ }
4275
+ analyticsRef.current = new AnalyticsEngine(nexus["config"]);
4276
+ analyticsRef.current.start();
4277
+ }
4278
+ }, [projectId]);
4279
+ (0, import_react2.useEffect)(() => {
4280
+ if (analyticsRef.current) {
4281
+ analyticsRef.current.pageView();
4282
+ }
4283
+ }, [pathname, searchParams]);
4284
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(NexusContext.Provider, { value: nexus, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(AuthProvider, { config: nexus["config"], children }) });
4285
+ };
4286
+ // Annotate the CommonJS export names for ESM import in node:
4287
+ 0 && (module.exports = {
4288
+ BrowserCache,
4289
+ CacheTags,
4290
+ ContentEngine,
4291
+ ExponentialBackoff,
4292
+ LocalCache,
4293
+ MemoryCache,
4294
+ NexusClient,
4295
+ NexusProvider,
4296
+ RateLimiter,
4297
+ RequestBatcher,
4298
+ createNexusClient,
4299
+ nexus,
4300
+ useNexusAuth
4301
+ });