@kozou/svelte-ui 0.2.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +28 -8
  2. package/build/client/_app/immutable/assets/0._vgqT-Ja.css +2 -0
  3. package/build/client/_app/immutable/assets/0._vgqT-Ja.css.br +0 -0
  4. package/build/client/_app/immutable/assets/{0.B45CfnXC.css.gz → 0._vgqT-Ja.css.gz} +0 -0
  5. package/build/client/_app/immutable/chunks/BgT5WiOF.js +2 -0
  6. package/build/client/_app/immutable/chunks/BgT5WiOF.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/BgT5WiOF.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/CCUVvlTa.js +214 -0
  9. package/build/client/_app/immutable/chunks/CCUVvlTa.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/CCUVvlTa.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/D5sfkRNZ.js +1 -0
  12. package/build/client/_app/immutable/chunks/D5sfkRNZ.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/D5sfkRNZ.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{nlrTAAdT.js → DdJtfEcD.js} +3 -3
  15. package/build/client/_app/immutable/chunks/DdJtfEcD.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/DdJtfEcD.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{CNJ9qNKc.js → De8foa1z.js} +1 -1
  18. package/build/client/_app/immutable/chunks/De8foa1z.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/De8foa1z.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/DxikiVqj.js +1 -0
  21. package/build/client/_app/immutable/chunks/DxikiVqj.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/DxikiVqj.js.gz +0 -0
  23. package/build/client/_app/immutable/entry/app.BkKlOvdn.js +2 -0
  24. package/build/client/_app/immutable/entry/app.BkKlOvdn.js.br +0 -0
  25. package/build/client/_app/immutable/entry/app.BkKlOvdn.js.gz +0 -0
  26. package/build/client/_app/immutable/entry/start.Cjh4JaF7.js +1 -0
  27. package/build/client/_app/immutable/entry/start.Cjh4JaF7.js.br +0 -0
  28. package/build/client/_app/immutable/entry/start.Cjh4JaF7.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/0.BTi1ueXu.js +1 -0
  30. package/build/client/_app/immutable/nodes/0.BTi1ueXu.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/0.BTi1ueXu.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/1.CrygsmaA.js +1 -0
  33. package/build/client/_app/immutable/nodes/1.CrygsmaA.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/1.CrygsmaA.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/2.CWOXCYvQ.js +1 -0
  36. package/build/client/_app/immutable/nodes/2.CWOXCYvQ.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/2.CWOXCYvQ.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/3.BfuWEZdX.js +1 -0
  39. package/build/client/_app/immutable/nodes/3.BfuWEZdX.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/3.BfuWEZdX.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/4.TqsoTNiI.js +1 -0
  42. package/build/client/_app/immutable/nodes/4.TqsoTNiI.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/4.TqsoTNiI.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/5.6savDm4D.js +1 -0
  45. package/build/client/_app/immutable/nodes/5.6savDm4D.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/5.6savDm4D.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/6.B6xlqPuj.js +1 -0
  48. package/build/client/_app/immutable/nodes/6.B6xlqPuj.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/6.B6xlqPuj.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/{7.zir-jrfl.js → 7.CjEmXoAF.js} +1 -1
  51. package/build/client/_app/immutable/nodes/7.CjEmXoAF.js.br +1 -0
  52. package/build/client/_app/immutable/nodes/7.CjEmXoAF.js.gz +0 -0
  53. package/build/client/_app/version.json +1 -1
  54. package/build/client/_app/version.json.br +0 -0
  55. package/build/client/_app/version.json.gz +0 -0
  56. package/build/server/chunks/{0-D3i8OEah.js → 0-C4CgvBlc.js} +3 -3
  57. package/build/server/chunks/{0-D3i8OEah.js.map → 0-C4CgvBlc.js.map} +1 -1
  58. package/build/server/chunks/{1-BYbo_Ryk.js → 1-B5tolhxt.js} +3 -3
  59. package/build/server/chunks/{1-BYbo_Ryk.js.map → 1-B5tolhxt.js.map} +1 -1
  60. package/build/server/chunks/{2-CE6m9qid.js → 2-D9il_3ty.js} +2 -2
  61. package/build/server/chunks/{2-CE6m9qid.js.map → 2-D9il_3ty.js.map} +1 -1
  62. package/build/server/chunks/{3-C50aWcyD.js → 3-DfrqlU53.js} +5 -5
  63. package/build/server/chunks/3-DfrqlU53.js.map +1 -0
  64. package/build/server/chunks/{4-C8kXW-9J.js → 4-D6Y076hP.js} +53 -8
  65. package/build/server/chunks/4-D6Y076hP.js.map +1 -0
  66. package/build/server/chunks/5-DOvvx6kj.js +85 -0
  67. package/build/server/chunks/5-DOvvx6kj.js.map +1 -0
  68. package/build/server/chunks/6-BJn_aKxy.js +79 -0
  69. package/build/server/chunks/6-BJn_aKxy.js.map +1 -0
  70. package/build/server/chunks/{7-BAhFrC8Z.js → 7-CKkRKfs8.js} +5 -5
  71. package/build/server/chunks/7-CKkRKfs8.js.map +1 -0
  72. package/build/server/chunks/{ListTable-BxIw_RVF.js → ListTable-CkfkQNdN.js} +3 -7
  73. package/build/server/chunks/ListTable-CkfkQNdN.js.map +1 -0
  74. package/build/server/chunks/{_page.svelte-hNlfE_-R.js → _page.svelte-BWAo_bI_.js} +3 -3
  75. package/build/server/chunks/{_page.svelte-hNlfE_-R.js.map → _page.svelte-BWAo_bI_.js.map} +1 -1
  76. package/build/server/chunks/_page.svelte-D_706hfC.js +167 -0
  77. package/build/server/chunks/_page.svelte-D_706hfC.js.map +1 -0
  78. package/build/server/chunks/{_page.svelte-CUhqt56V.js → _page.svelte-Dabtpyl9.js} +3 -2
  79. package/build/server/chunks/{_page.svelte-CUhqt56V.js.map → _page.svelte-Dabtpyl9.js.map} +1 -1
  80. package/build/server/chunks/_page.svelte-DpoimUgp.js +167 -0
  81. package/build/server/chunks/_page.svelte-DpoimUgp.js.map +1 -0
  82. package/build/server/chunks/{_page.svelte-CRH5Ib1y.js → _page.svelte-j2Tqrjlb.js} +3 -2
  83. package/build/server/chunks/{_page.svelte-CRH5Ib1y.js.map → _page.svelte-j2Tqrjlb.js.map} +1 -1
  84. package/build/server/chunks/_server.ts-C-Wy675T.js +19 -0
  85. package/build/server/chunks/_server.ts-C-Wy675T.js.map +1 -0
  86. package/build/server/chunks/{adapter-BGid8Q1v.js → adapter-CXNsjV1V.js} +97 -14
  87. package/build/server/chunks/adapter-CXNsjV1V.js.map +1 -0
  88. package/build/server/chunks/{client-PK7K0DFj.js → client-_87vxA9R.js} +2 -2
  89. package/build/server/chunks/{client-PK7K0DFj.js.map → client-_87vxA9R.js.map} +1 -1
  90. package/build/server/chunks/{zod-from-table-CCy3rZQi.js → composite-form-C6ci57iZ.js} +248 -6
  91. package/build/server/chunks/composite-form-C6ci57iZ.js.map +1 -0
  92. package/build/server/chunks/{error.svelte-CKswtdNj.js → error.svelte-CsN316oS.js} +3 -3
  93. package/build/server/chunks/{error.svelte-CKswtdNj.js.map → error.svelte-CsN316oS.js.map} +1 -1
  94. package/build/server/chunks/{hooks.server-_7e7MfY9.js → hooks.server-O5zJccZI.js} +36 -14
  95. package/build/server/chunks/hooks.server-O5zJccZI.js.map +1 -0
  96. package/build/server/chunks/{internal-BERZdLJL.js → internal-Cuea68jL.js} +3 -3
  97. package/build/server/chunks/{internal-BERZdLJL.js.map → internal-Cuea68jL.js.map} +1 -1
  98. package/build/server/chunks/relation-options-Dzy9DaQG.js +87 -0
  99. package/build/server/chunks/relation-options-Dzy9DaQG.js.map +1 -0
  100. package/build/server/chunks/resource-id-PDcQeAnc.js +41 -0
  101. package/build/server/chunks/resource-id-PDcQeAnc.js.map +1 -0
  102. package/build/server/chunks/{widget-registry-CYJ6dCZP.js → widget-registry-CohQ23di.js} +282 -42
  103. package/build/server/chunks/widget-registry-CohQ23di.js.map +1 -0
  104. package/build/server/index.js +1 -1
  105. package/build/server/manifest.js +16 -9
  106. package/build/server/manifest.js.map +1 -1
  107. package/package.json +5 -5
  108. package/build/client/_app/immutable/assets/0.B45CfnXC.css +0 -2
  109. package/build/client/_app/immutable/assets/0.B45CfnXC.css.br +0 -0
  110. package/build/client/_app/immutable/chunks/1PNfJiP5.js +0 -2
  111. package/build/client/_app/immutable/chunks/1PNfJiP5.js.br +0 -0
  112. package/build/client/_app/immutable/chunks/1PNfJiP5.js.gz +0 -0
  113. package/build/client/_app/immutable/chunks/CLOztVuN.js +0 -214
  114. package/build/client/_app/immutable/chunks/CLOztVuN.js.br +0 -0
  115. package/build/client/_app/immutable/chunks/CLOztVuN.js.gz +0 -0
  116. package/build/client/_app/immutable/chunks/CNJ9qNKc.js.br +0 -0
  117. package/build/client/_app/immutable/chunks/CNJ9qNKc.js.gz +0 -0
  118. package/build/client/_app/immutable/chunks/Cj8LiudX.js +0 -1
  119. package/build/client/_app/immutable/chunks/Cj8LiudX.js.br +0 -0
  120. package/build/client/_app/immutable/chunks/Cj8LiudX.js.gz +0 -0
  121. package/build/client/_app/immutable/chunks/nlrTAAdT.js.br +0 -0
  122. package/build/client/_app/immutable/chunks/nlrTAAdT.js.gz +0 -0
  123. package/build/client/_app/immutable/entry/app.Bv8sjgxu.js +0 -2
  124. package/build/client/_app/immutable/entry/app.Bv8sjgxu.js.br +0 -0
  125. package/build/client/_app/immutable/entry/app.Bv8sjgxu.js.gz +0 -0
  126. package/build/client/_app/immutable/entry/start.mcTncYkV.js +0 -1
  127. package/build/client/_app/immutable/entry/start.mcTncYkV.js.br +0 -0
  128. package/build/client/_app/immutable/entry/start.mcTncYkV.js.gz +0 -0
  129. package/build/client/_app/immutable/nodes/0.DAriStmJ.js +0 -1
  130. package/build/client/_app/immutable/nodes/0.DAriStmJ.js.br +0 -0
  131. package/build/client/_app/immutable/nodes/0.DAriStmJ.js.gz +0 -0
  132. package/build/client/_app/immutable/nodes/1.B_iETXYV.js +0 -1
  133. package/build/client/_app/immutable/nodes/1.B_iETXYV.js.br +0 -2
  134. package/build/client/_app/immutable/nodes/1.B_iETXYV.js.gz +0 -0
  135. package/build/client/_app/immutable/nodes/2.C3ChRVrO.js +0 -1
  136. package/build/client/_app/immutable/nodes/2.C3ChRVrO.js.br +0 -0
  137. package/build/client/_app/immutable/nodes/2.C3ChRVrO.js.gz +0 -0
  138. package/build/client/_app/immutable/nodes/3.CL9ksnmY.js +0 -1
  139. package/build/client/_app/immutable/nodes/3.CL9ksnmY.js.br +0 -0
  140. package/build/client/_app/immutable/nodes/3.CL9ksnmY.js.gz +0 -0
  141. package/build/client/_app/immutable/nodes/4.wRTS68Ip.js +0 -1
  142. package/build/client/_app/immutable/nodes/4.wRTS68Ip.js.br +0 -0
  143. package/build/client/_app/immutable/nodes/4.wRTS68Ip.js.gz +0 -0
  144. package/build/client/_app/immutable/nodes/5.sOvoAy14.js +0 -1
  145. package/build/client/_app/immutable/nodes/5.sOvoAy14.js.br +0 -0
  146. package/build/client/_app/immutable/nodes/5.sOvoAy14.js.gz +0 -0
  147. package/build/client/_app/immutable/nodes/6.QhxyVDh4.js +0 -1
  148. package/build/client/_app/immutable/nodes/6.QhxyVDh4.js.br +0 -0
  149. package/build/client/_app/immutable/nodes/6.QhxyVDh4.js.gz +0 -0
  150. package/build/client/_app/immutable/nodes/7.zir-jrfl.js.br +0 -4
  151. package/build/client/_app/immutable/nodes/7.zir-jrfl.js.gz +0 -0
  152. package/build/server/chunks/3-C50aWcyD.js.map +0 -1
  153. package/build/server/chunks/4-C8kXW-9J.js.map +0 -1
  154. package/build/server/chunks/5-D-0L-X8y.js +0 -69
  155. package/build/server/chunks/5-D-0L-X8y.js.map +0 -1
  156. package/build/server/chunks/6-D-SbXeTH.js +0 -70
  157. package/build/server/chunks/6-D-SbXeTH.js.map +0 -1
  158. package/build/server/chunks/7-BAhFrC8Z.js.map +0 -1
  159. package/build/server/chunks/ListTable-BxIw_RVF.js.map +0 -1
  160. package/build/server/chunks/_page.svelte-6neDahmr.js +0 -70
  161. package/build/server/chunks/_page.svelte-6neDahmr.js.map +0 -1
  162. package/build/server/chunks/_page.svelte-rW7yzEet.js +0 -70
  163. package/build/server/chunks/_page.svelte-rW7yzEet.js.map +0 -1
  164. package/build/server/chunks/adapter-BGid8Q1v.js.map +0 -1
  165. package/build/server/chunks/hooks.server-_7e7MfY9.js.map +0 -1
  166. package/build/server/chunks/widget-registry-CYJ6dCZP.js.map +0 -1
  167. package/build/server/chunks/zod-from-table-CCy3rZQi.js.map +0 -1
@@ -20,6 +20,18 @@ var DEFAULT_SCHEMA = "public";
20
20
  var DEFAULT_PRIMARY_KEY = "id";
21
21
  var DEFAULT_RELATION_LIMIT$1 = 20;
22
22
  var OR_FILTER_KEY$1 = "__or";
23
+ var FILTER_OPERATORS = new Set([
24
+ "eq",
25
+ "neq",
26
+ "gt",
27
+ "gte",
28
+ "lt",
29
+ "lte",
30
+ "like",
31
+ "ilike",
32
+ "in",
33
+ "is"
34
+ ]);
23
35
  var PostgrestAdapterError = class extends AdapterError {
24
36
  constructor(init) {
25
37
  super(init);
@@ -73,9 +85,8 @@ var PostgrestDataAdapter = class {
73
85
  }
74
86
  async get(resource, id) {
75
87
  const { schema, table } = splitResource(resource, this.defaultSchema);
76
- const primaryKey = this.resolvePrimaryKey(resource);
77
88
  const query = new URLSearchParams();
78
- query.set(primaryKey, `eq.${id}`);
89
+ this.appendKeyEquals(query, resource, id);
79
90
  query.set("limit", "1");
80
91
  const url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;
81
92
  const headers = {
@@ -97,9 +108,8 @@ var PostgrestDataAdapter = class {
97
108
  }
98
109
  async update(resource, id, data) {
99
110
  const { schema, table } = splitResource(resource, this.defaultSchema);
100
- const primaryKey = this.resolvePrimaryKey(resource);
101
111
  const query = new URLSearchParams();
102
- query.set(primaryKey, `eq.${id}`);
112
+ this.appendKeyEquals(query, resource, id);
103
113
  const url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;
104
114
  const headers = this.mutationHeaders(schema);
105
115
  const response = await this.send("PATCH", url, headers, JSON.stringify(data));
@@ -108,9 +118,8 @@ var PostgrestDataAdapter = class {
108
118
  }
109
119
  async delete(resource, id) {
110
120
  const { schema, table } = splitResource(resource, this.defaultSchema);
111
- const primaryKey = this.resolvePrimaryKey(resource);
112
121
  const query = new URLSearchParams();
113
- query.set(primaryKey, `eq.${id}`);
122
+ this.appendKeyEquals(query, resource, id);
114
123
  const url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;
115
124
  const headers = { ...this.staticHeaders };
116
125
  addProfileHeader(headers, schema, this.defaultSchema, "write");
@@ -118,10 +127,11 @@ var PostgrestDataAdapter = class {
118
127
  }
119
128
  async searchRelation(resource, params) {
120
129
  const { schema, table } = splitResource(resource, this.defaultSchema);
121
- const primaryKey = this.resolvePrimaryKey(resource);
130
+ const primaryKey = keyColumns(this.resolvePrimaryKey(resource));
122
131
  const limit = params.limit ?? DEFAULT_RELATION_LIMIT$1;
123
132
  const query = new URLSearchParams();
124
- query.set("select", `${primaryKey},${params.labelField}`);
133
+ const selectFields = primaryKey.includes(params.labelField) ? primaryKey : [...primaryKey, params.labelField];
134
+ query.set("select", selectFields.join(","));
125
135
  if (params.query.length > 0 && params.searchFields.length > 0) {
126
136
  const orExpr = params.searchFields.map((field) => `${field}.ilike.*${params.query}*`).join(",");
127
137
  query.set("or", `(${orExpr})`);
@@ -136,10 +146,25 @@ var PostgrestDataAdapter = class {
136
146
  const response = await this.send("GET", url, headers, void 0);
137
147
  await assertOk$1(response, url);
138
148
  return (await readJson$1(response, url)).map((row) => ({
139
- id: row[primaryKey],
149
+ id: primaryKey.length === 1 ? row[primaryKey[0]] : primaryKey.map((column) => row[column]),
140
150
  label: String(row[params.labelField] ?? "")
141
151
  }));
142
152
  }
153
+ /**
154
+ * Append the per-column equality filters that address a row by id. A
155
+ * composite key expands to `?col0=eq.v0&col1=eq.v1` in `primaryKey`
156
+ * declaration order (Kozou v1.0 dev spec §3.7); a single-column key keeps
157
+ * the `?col=eq.value` form. The id component count must match the key
158
+ * arity (else a config error, surfacing a wiring mismatch).
159
+ */
160
+ appendKeyEquals(query, resource, id) {
161
+ const columns = keyColumns(this.resolvePrimaryKey(resource));
162
+ const values = asResourceIdArray(id);
163
+ if (columns.length !== values.length) throw adapterConfigError(`PostgrestDataAdapter: resource "${resource}" has a ${columns.length}-column primary key (${columns.join(", ")}) but ${values.length} id component(s) were supplied.`);
164
+ columns.forEach((column, i) => {
165
+ query.set(column, `eq.${serializeFilterValue(values[i])}`);
166
+ });
167
+ }
143
168
  mutationHeaders(schema) {
144
169
  const headers = {
145
170
  ...this.staticHeaders,
@@ -176,6 +201,19 @@ function makePrimaryKeyResolver(pk) {
176
201
  if (typeof pk === "function") return pk;
177
202
  return () => pk;
178
203
  }
204
+ /** Normalize a resolver result to the ordered list of key columns. An empty
205
+ * list is rejected loudly: a key-less resource cannot be addressed by id —
206
+ * silently accepting it would, e.g., let a zero-column key match a
207
+ * zero-component id and emit an unfiltered (table-wide) mutation. */
208
+ function keyColumns(pk) {
209
+ const columns = Array.isArray(pk) ? pk : [pk];
210
+ if (columns.length === 0) throw adapterConfigError("PostgrestDataAdapter: the primaryKey resolver returned no key columns.");
211
+ return columns;
212
+ }
213
+ /** Normalize a ResourceId to the ordered list of key values. */
214
+ function asResourceIdArray(id) {
215
+ return Array.isArray(id) ? id : [id];
216
+ }
179
217
  function splitResource(resource, defaultSchema) {
180
218
  const idx = resource.indexOf(".");
181
219
  if (idx === -1) return {
@@ -195,9 +233,19 @@ function appendFilters$1(query, filters) {
195
233
  query.set("or", `(${serializeOrExpression(value)})`);
196
234
  continue;
197
235
  }
236
+ if (typeof value === "string" && hasOperatorPrefix(value)) {
237
+ query.set(key, value);
238
+ continue;
239
+ }
198
240
  query.set(key, `eq.${serializeFilterValue(value)}`);
199
241
  }
200
242
  }
243
+ /** Whether a filter value begins with a `<op>.` prefix from the known
244
+ * operator set. Split on the first `.` via indexOf (no regex, ReDoS-safe). */
245
+ function hasOperatorPrefix(value) {
246
+ const dot = value.indexOf(".");
247
+ return dot > 0 && FILTER_OPERATORS.has(value.slice(0, dot));
248
+ }
201
249
  function serializeOrExpression(value) {
202
250
  if (typeof value === "string") return value;
203
251
  if (Array.isArray(value)) return value.map(String).join(",");
@@ -334,7 +382,8 @@ var KozouApiDataAdapter = class {
334
382
  return Array.isArray(body.options) ? body.options : [];
335
383
  }
336
384
  itemUrl(resource, id) {
337
- return `${this.baseUrl}/${encodeResource(resource)}/${encodeURIComponent(String(id))}`;
385
+ const segment = Array.isArray(id) ? id.map((part) => encodeURIComponent(String(part))).join(",") : encodeURIComponent(String(id));
386
+ return `${this.baseUrl}/${encodeResource(resource)}/${segment}`;
338
387
  }
339
388
  async getJson(url) {
340
389
  const headers = {
@@ -433,17 +482,51 @@ function configError(message) {
433
482
  var DEFAULT_POSTGREST_URL = "http://localhost:3000";
434
483
  var DEFAULT_API_URL = "http://localhost:3335";
435
484
  var cached = null;
436
- function getAdapter() {
437
- if (cached === null) if ((process.env.KOZOU_ADAPTER_KIND ?? "postgrest") === "api") {
485
+ var cachedSchema = null;
486
+ /**
487
+ * Resolve the configured DataAdapter.
488
+ *
489
+ * The in-house API adapter resolves primary keys server-side, so it ignores
490
+ * `schema`. The REST adapter must address rows by their actual key columns
491
+ * (a composite key expands to per-column filters), so it is wired with a
492
+ * resolver derived from the live SchemaContext. The singleton is rebuilt when
493
+ * the schema identity changes — the schema cache hands out a new object on its
494
+ * TTL refresh — so the resolver tracks DDL changes.
495
+ */
496
+ function getAdapter(schema) {
497
+ const nextSchema = schema ?? null;
498
+ if (cached !== null && cachedSchema === nextSchema) return cached;
499
+ cachedSchema = nextSchema;
500
+ if ((process.env.KOZOU_ADAPTER_KIND ?? "postgrest") === "api") {
438
501
  const baseUrl = process.env.KOZOU_ADAPTER_URL ?? DEFAULT_API_URL;
439
502
  const token = process.env.KOZOU_ADAPTER_TOKEN;
440
503
  cached = new KozouApiDataAdapter({
441
504
  baseUrl,
442
505
  headers: token !== void 0 && token.length > 0 ? { Authorization: `Bearer ${token}` } : void 0
443
506
  });
444
- } else cached = new PostgrestDataAdapter({ baseUrl: process.env.KOZOU_ADAPTER_URL ?? DEFAULT_POSTGREST_URL });
507
+ } else cached = new PostgrestDataAdapter({
508
+ baseUrl: process.env.KOZOU_ADAPTER_URL ?? DEFAULT_POSTGREST_URL,
509
+ primaryKey: primaryKeyResolver(schema)
510
+ });
445
511
  return cached;
446
512
  }
513
+ var DEFAULT_RESOLVER_SCHEMA = "public";
514
+ /** Build a primary-key resolver from the schema: each resource maps to its
515
+ * ordered key columns. A bare (schema-less) resource name is matched
516
+ * against the default schema, the same normalization the adapter applies.
517
+ * A known key-less table keeps its empty key list so the adapter rejects
518
+ * by-id operations loudly instead of filtering on a possibly non-unique
519
+ * 'id' column (wrong-row reads / mutations). The 'id' fallback applies
520
+ * only to unknown resources or when no schema is available. */
521
+ function primaryKeyResolver(schema) {
522
+ if (schema === void 0) return void 0;
523
+ return (resource) => {
524
+ const qualified = resource.includes(".") ? resource : `${DEFAULT_RESOLVER_SCHEMA}.${resource}`;
525
+ const table = schema.tables.find((t) => t.qualifiedName === qualified);
526
+ if (table !== void 0) return table.primaryKey;
527
+ return "id";
528
+ };
529
+ }
447
530
 
448
531
  export { getAdapter as g };
449
- //# sourceMappingURL=adapter-BGid8Q1v.js.map
532
+ //# sourceMappingURL=adapter-CXNsjV1V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-CXNsjV1V.js","sources":["../../../.svelte-kit/adapter-node/chunks/adapter.js"],"sourcesContent":["//#region src/lib/adapter/errors.ts\nvar AdapterError = class extends Error {\n\tstatus;\n\turl;\n\tresponseBody;\n\tcode;\n\tconstructor(init) {\n\t\tsuper(init.message);\n\t\tthis.name = \"AdapterError\";\n\t\tthis.status = init.status;\n\t\tthis.url = init.url;\n\t\tthis.responseBody = init.responseBody;\n\t\tthis.code = init.code;\n\t}\n};\n//#endregion\n//#region src/lib/adapter/postgrest.ts\nvar DEFAULT_PAGE_SIZE$1 = 50;\nvar DEFAULT_SCHEMA = \"public\";\nvar DEFAULT_PRIMARY_KEY = \"id\";\nvar DEFAULT_RELATION_LIMIT$1 = 20;\nvar OR_FILTER_KEY$1 = \"__or\";\nvar FILTER_OPERATORS = new Set([\n\t\"eq\",\n\t\"neq\",\n\t\"gt\",\n\t\"gte\",\n\t\"lt\",\n\t\"lte\",\n\t\"like\",\n\t\"ilike\",\n\t\"in\",\n\t\"is\"\n]);\nvar PostgrestAdapterError = class extends AdapterError {\n\tconstructor(init) {\n\t\tsuper(init);\n\t\tthis.name = \"PostgrestAdapterError\";\n\t}\n};\nvar PostgrestDataAdapter = class {\n\tbaseUrl;\n\tdefaultSchema;\n\tresolvePrimaryKey;\n\tstaticHeaders;\n\tfetchImpl;\n\tdefaultPageSize;\n\tconstructor(opts) {\n\t\tif (typeof opts.baseUrl !== \"string\" || opts.baseUrl.length === 0) throw adapterConfigError(\"PostgrestDataAdapter: `baseUrl` is required.\");\n\t\tthis.baseUrl = stripTrailingSlash$1(opts.baseUrl);\n\t\tthis.defaultSchema = opts.defaultSchema ?? DEFAULT_SCHEMA;\n\t\tthis.resolvePrimaryKey = makePrimaryKeyResolver(opts.primaryKey);\n\t\tthis.staticHeaders = { ...opts.headers ?? {} };\n\t\tthis.defaultPageSize = opts.defaultPageSize ?? DEFAULT_PAGE_SIZE$1;\n\t\tconst resolvedFetch = opts.fetch ?? globalThis.fetch;\n\t\tif (typeof resolvedFetch !== \"function\") throw adapterConfigError(\"PostgrestDataAdapter: a `fetch` implementation is required (none injected, none on globalThis).\");\n\t\tthis.fetchImpl = resolvedFetch;\n\t}\n\tasync list(resource, params) {\n\t\tconst { schema, table } = splitResource(resource, this.defaultSchema);\n\t\tconst pageSize = params.pageSize ?? this.defaultPageSize;\n\t\tconst page = params.page ?? 1;\n\t\tconst offset = (page - 1) * pageSize;\n\t\tconst query = new URLSearchParams();\n\t\tappendFilters$1(query, params.filters);\n\t\tappendOrder(query, params.sort);\n\t\tquery.set(\"limit\", String(pageSize));\n\t\tquery.set(\"offset\", String(offset));\n\t\tconst url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;\n\t\tconst headers = {\n\t\t\t...this.staticHeaders,\n\t\t\tAccept: \"application/json\",\n\t\t\tPrefer: \"count=exact\"\n\t\t};\n\t\taddProfileHeader(headers, schema, this.defaultSchema, \"read\");\n\t\tconst response = await this.send(\"GET\", url, headers, void 0);\n\t\tawait assertOk$1(response, url);\n\t\tconst rows = await readJson$1(response, url);\n\t\treturn {\n\t\t\trows,\n\t\t\ttotal: parseContentRangeTotal(response.headers.get(\"content-range\"), rows.length),\n\t\t\tpage,\n\t\t\tpageSize\n\t\t};\n\t}\n\tasync get(resource, id) {\n\t\tconst { schema, table } = splitResource(resource, this.defaultSchema);\n\t\tconst query = new URLSearchParams();\n\t\tthis.appendKeyEquals(query, resource, id);\n\t\tquery.set(\"limit\", \"1\");\n\t\tconst url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;\n\t\tconst headers = {\n\t\t\t...this.staticHeaders,\n\t\t\tAccept: \"application/vnd.pgrst.object+json\"\n\t\t};\n\t\taddProfileHeader(headers, schema, this.defaultSchema, \"read\");\n\t\tconst response = await this.send(\"GET\", url, headers, void 0);\n\t\tawait assertOk$1(response, url);\n\t\treturn await readJson$1(response, url);\n\t}\n\tasync create(resource, data) {\n\t\tconst { schema, table } = splitResource(resource, this.defaultSchema);\n\t\tconst url = `${this.baseUrl}/${encodeURIComponent(table)}`;\n\t\tconst headers = this.mutationHeaders(schema);\n\t\tconst response = await this.send(\"POST\", url, headers, JSON.stringify(data));\n\t\tawait assertOk$1(response, url);\n\t\treturn await readJson$1(response, url);\n\t}\n\tasync update(resource, id, data) {\n\t\tconst { schema, table } = splitResource(resource, this.defaultSchema);\n\t\tconst query = new URLSearchParams();\n\t\tthis.appendKeyEquals(query, resource, id);\n\t\tconst url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;\n\t\tconst headers = this.mutationHeaders(schema);\n\t\tconst response = await this.send(\"PATCH\", url, headers, JSON.stringify(data));\n\t\tawait assertOk$1(response, url);\n\t\treturn await readJson$1(response, url);\n\t}\n\tasync delete(resource, id) {\n\t\tconst { schema, table } = splitResource(resource, this.defaultSchema);\n\t\tconst query = new URLSearchParams();\n\t\tthis.appendKeyEquals(query, resource, id);\n\t\tconst url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;\n\t\tconst headers = { ...this.staticHeaders };\n\t\taddProfileHeader(headers, schema, this.defaultSchema, \"write\");\n\t\tawait assertOk$1(await this.send(\"DELETE\", url, headers, void 0), url);\n\t}\n\tasync searchRelation(resource, params) {\n\t\tconst { schema, table } = splitResource(resource, this.defaultSchema);\n\t\tconst primaryKey = keyColumns(this.resolvePrimaryKey(resource));\n\t\tconst limit = params.limit ?? DEFAULT_RELATION_LIMIT$1;\n\t\tconst query = new URLSearchParams();\n\t\tconst selectFields = primaryKey.includes(params.labelField) ? primaryKey : [...primaryKey, params.labelField];\n\t\tquery.set(\"select\", selectFields.join(\",\"));\n\t\tif (params.query.length > 0 && params.searchFields.length > 0) {\n\t\t\tconst orExpr = params.searchFields.map((field) => `${field}.ilike.*${params.query}*`).join(\",\");\n\t\t\tquery.set(\"or\", `(${orExpr})`);\n\t\t}\n\t\tquery.set(\"limit\", String(limit));\n\t\tconst url = `${this.baseUrl}/${encodeURIComponent(table)}?${query.toString()}`;\n\t\tconst headers = {\n\t\t\t...this.staticHeaders,\n\t\t\tAccept: \"application/json\"\n\t\t};\n\t\taddProfileHeader(headers, schema, this.defaultSchema, \"read\");\n\t\tconst response = await this.send(\"GET\", url, headers, void 0);\n\t\tawait assertOk$1(response, url);\n\t\treturn (await readJson$1(response, url)).map((row) => ({\n\t\t\tid: primaryKey.length === 1 ? row[primaryKey[0]] : primaryKey.map((column) => row[column]),\n\t\t\tlabel: String(row[params.labelField] ?? \"\")\n\t\t}));\n\t}\n\t/**\n\t* Append the per-column equality filters that address a row by id. A\n\t* composite key expands to `?col0=eq.v0&col1=eq.v1` in `primaryKey`\n\t* declaration order (Kozou v1.0 dev spec §3.7); a single-column key keeps\n\t* the `?col=eq.value` form. The id component count must match the key\n\t* arity (else a config error, surfacing a wiring mismatch).\n\t*/\n\tappendKeyEquals(query, resource, id) {\n\t\tconst columns = keyColumns(this.resolvePrimaryKey(resource));\n\t\tconst values = asResourceIdArray(id);\n\t\tif (columns.length !== values.length) throw adapterConfigError(`PostgrestDataAdapter: resource \"${resource}\" has a ${columns.length}-column primary key (${columns.join(\", \")}) but ${values.length} id component(s) were supplied.`);\n\t\tcolumns.forEach((column, i) => {\n\t\t\tquery.set(column, `eq.${serializeFilterValue(values[i])}`);\n\t\t});\n\t}\n\tmutationHeaders(schema) {\n\t\tconst headers = {\n\t\t\t...this.staticHeaders,\n\t\t\tAccept: \"application/vnd.pgrst.object+json\",\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\tPrefer: \"return=representation\"\n\t\t};\n\t\taddProfileHeader(headers, schema, this.defaultSchema, \"write\");\n\t\treturn headers;\n\t}\n\tasync send(method, url, headers, body) {\n\t\ttry {\n\t\t\treturn await this.fetchImpl(url, {\n\t\t\t\tmethod,\n\t\t\t\theaders,\n\t\t\t\tbody\n\t\t\t});\n\t\t} catch (cause) {\n\t\t\tthrow new PostgrestAdapterError({\n\t\t\t\tmessage: `PostgrestDataAdapter: ${method} ${url} failed before reaching the server: ${cause.message}`,\n\t\t\t\tstatus: 0,\n\t\t\t\turl,\n\t\t\t\tresponseBody: null,\n\t\t\t\tcode: \"network\"\n\t\t\t});\n\t\t}\n\t}\n};\nfunction stripTrailingSlash$1(url) {\n\treturn url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\nfunction makePrimaryKeyResolver(pk) {\n\tif (pk === void 0) return () => DEFAULT_PRIMARY_KEY;\n\tif (typeof pk === \"function\") return pk;\n\treturn () => pk;\n}\n/** Normalize a resolver result to the ordered list of key columns. An empty\n* list is rejected loudly: a key-less resource cannot be addressed by id —\n* silently accepting it would, e.g., let a zero-column key match a\n* zero-component id and emit an unfiltered (table-wide) mutation. */\nfunction keyColumns(pk) {\n\tconst columns = Array.isArray(pk) ? pk : [pk];\n\tif (columns.length === 0) throw adapterConfigError(\"PostgrestDataAdapter: the primaryKey resolver returned no key columns.\");\n\treturn columns;\n}\n/** Normalize a ResourceId to the ordered list of key values. */\nfunction asResourceIdArray(id) {\n\treturn Array.isArray(id) ? id : [id];\n}\nfunction splitResource(resource, defaultSchema) {\n\tconst idx = resource.indexOf(\".\");\n\tif (idx === -1) return {\n\t\tschema: defaultSchema,\n\t\ttable: resource\n\t};\n\treturn {\n\t\tschema: resource.slice(0, idx),\n\t\ttable: resource.slice(idx + 1)\n\t};\n}\nfunction appendFilters$1(query, filters) {\n\tif (!filters) return;\n\tfor (const [key, value] of Object.entries(filters)) {\n\t\tif (value === void 0) continue;\n\t\tif (key === OR_FILTER_KEY$1) {\n\t\t\tquery.set(\"or\", `(${serializeOrExpression(value)})`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"string\" && hasOperatorPrefix(value)) {\n\t\t\tquery.set(key, value);\n\t\t\tcontinue;\n\t\t}\n\t\tquery.set(key, `eq.${serializeFilterValue(value)}`);\n\t}\n}\n/** Whether a filter value begins with a `<op>.` prefix from the known\n* operator set. Split on the first `.` via indexOf (no regex, ReDoS-safe). */\nfunction hasOperatorPrefix(value) {\n\tconst dot = value.indexOf(\".\");\n\treturn dot > 0 && FILTER_OPERATORS.has(value.slice(0, dot));\n}\nfunction serializeOrExpression(value) {\n\tif (typeof value === \"string\") return value;\n\tif (Array.isArray(value)) return value.map(String).join(\",\");\n\treturn String(value);\n}\nfunction serializeFilterValue(value) {\n\tif (value === null) return \"null\";\n\tif (typeof value === \"string\") return value;\n\treturn String(value);\n}\nfunction appendOrder(query, sort) {\n\tif (!sort || sort.length === 0) return;\n\tquery.set(\"order\", sort.map((s) => `${s.field}.${s.order}`).join(\",\"));\n}\nfunction addProfileHeader(headers, schema, defaultSchema, direction) {\n\tif (schema === defaultSchema) return;\n\theaders[direction === \"read\" ? \"Accept-Profile\" : \"Content-Profile\"] = schema;\n}\nfunction parseContentRangeTotal(header, fallback) {\n\tif (!header) return fallback;\n\tconst match = header.match(/\\/(\\d+)$/);\n\tif (!match) return fallback;\n\treturn Number(match[1]);\n}\nasync function readJson$1(response, url) {\n\ttry {\n\t\treturn await response.json();\n\t} catch (cause) {\n\t\tthrow new PostgrestAdapterError({\n\t\t\tmessage: `PostgrestDataAdapter: failed to parse JSON response from ${url}: ${cause.message}`,\n\t\t\tstatus: response.status,\n\t\t\turl,\n\t\t\tresponseBody: null,\n\t\t\tcode: \"parse\"\n\t\t});\n\t}\n}\nasync function assertOk$1(response, url) {\n\tif (response.ok) return;\n\tlet body = null;\n\ttry {\n\t\tbody = await response.text();\n\t} catch {\n\t\tbody = null;\n\t}\n\tthrow new PostgrestAdapterError({\n\t\tmessage: `PostgrestDataAdapter: request to ${url} failed with status ${response.status}`,\n\t\tstatus: response.status,\n\t\turl,\n\t\tresponseBody: body,\n\t\tcode: \"http\"\n\t});\n}\nfunction adapterConfigError(message) {\n\treturn new PostgrestAdapterError({\n\t\tmessage,\n\t\tstatus: 0,\n\t\turl: \"\",\n\t\tresponseBody: null,\n\t\tcode: \"config\"\n\t});\n}\n//#endregion\n//#region src/lib/adapter/kozou-api.ts\nvar DEFAULT_PAGE_SIZE = 50;\nvar DEFAULT_RELATION_LIMIT = 20;\nvar OR_FILTER_KEY = \"__or\";\nvar KozouApiAdapterError = class extends AdapterError {\n\tconstructor(init) {\n\t\tsuper(init);\n\t\tthis.name = \"KozouApiAdapterError\";\n\t}\n};\nvar KozouApiDataAdapter = class {\n\tbaseUrl;\n\tstaticHeaders;\n\tfetchImpl;\n\tdefaultPageSize;\n\tconstructor(opts) {\n\t\tif (typeof opts.baseUrl !== \"string\" || opts.baseUrl.length === 0) throw configError(\"KozouApiDataAdapter: `baseUrl` is required.\");\n\t\tthis.baseUrl = stripTrailingSlash(opts.baseUrl);\n\t\tthis.staticHeaders = { ...opts.headers ?? {} };\n\t\tthis.defaultPageSize = opts.defaultPageSize ?? DEFAULT_PAGE_SIZE;\n\t\tconst resolvedFetch = opts.fetch ?? globalThis.fetch;\n\t\tif (typeof resolvedFetch !== \"function\") throw configError(\"KozouApiDataAdapter: a `fetch` implementation is required (none injected, none on globalThis).\");\n\t\tthis.fetchImpl = resolvedFetch;\n\t}\n\tasync list(resource, params) {\n\t\tconst page = params.page ?? 1;\n\t\tconst pageSize = params.pageSize ?? this.defaultPageSize;\n\t\tconst query = new URLSearchParams();\n\t\tquery.set(\"page\", String(page));\n\t\tquery.set(\"pageSize\", String(pageSize));\n\t\tappendSort(query, params.sort);\n\t\tif (params.search !== void 0 && params.search.length > 0) query.set(\"search\", params.search);\n\t\tappendFilters(query, params.filters);\n\t\tconst url = `${this.baseUrl}/${encodeResource(resource)}?${query.toString()}`;\n\t\tconst body = await this.getJson(url);\n\t\treturn {\n\t\t\trows: Array.isArray(body.rows) ? body.rows : [],\n\t\t\ttotal: typeof body.total === \"number\" ? body.total : body.rows?.length ?? 0,\n\t\t\tpage: typeof body.page === \"number\" ? body.page : page,\n\t\t\tpageSize: typeof body.pageSize === \"number\" ? body.pageSize : pageSize\n\t\t};\n\t}\n\tasync get(resource, id) {\n\t\tconst url = this.itemUrl(resource, id);\n\t\treturn await this.getJson(url);\n\t}\n\tasync create(resource, data) {\n\t\tconst url = `${this.baseUrl}/${encodeResource(resource)}`;\n\t\treturn await this.sendJson(\"POST\", url, data);\n\t}\n\tasync update(resource, id, data) {\n\t\treturn await this.sendJson(\"PATCH\", this.itemUrl(resource, id), data);\n\t}\n\tasync delete(resource, id) {\n\t\tconst url = this.itemUrl(resource, id);\n\t\tconst headers = {\n\t\t\t...this.staticHeaders,\n\t\t\tAccept: \"application/json\"\n\t\t};\n\t\tawait assertOk(await this.send(\"DELETE\", url, headers, void 0), url);\n\t}\n\tasync searchRelation(resource, params) {\n\t\tconst query = new URLSearchParams();\n\t\tquery.set(\"as\", \"options\");\n\t\tquery.set(\"label\", params.labelField);\n\t\tif (params.searchFields.length > 0) query.set(\"fields\", params.searchFields.join(\",\"));\n\t\tif (params.query.length > 0) query.set(\"q\", params.query);\n\t\tquery.set(\"limit\", String(params.limit ?? DEFAULT_RELATION_LIMIT));\n\t\tconst url = `${this.baseUrl}/${encodeResource(resource)}?${query.toString()}`;\n\t\tconst body = await this.getJson(url);\n\t\treturn Array.isArray(body.options) ? body.options : [];\n\t}\n\titemUrl(resource, id) {\n\t\tconst segment = Array.isArray(id) ? id.map((part) => encodeURIComponent(String(part))).join(\",\") : encodeURIComponent(String(id));\n\t\treturn `${this.baseUrl}/${encodeResource(resource)}/${segment}`;\n\t}\n\tasync getJson(url) {\n\t\tconst headers = {\n\t\t\t...this.staticHeaders,\n\t\t\tAccept: \"application/json\"\n\t\t};\n\t\tconst response = await this.send(\"GET\", url, headers, void 0);\n\t\tawait assertOk(response, url);\n\t\treturn readJson(response, url);\n\t}\n\tasync sendJson(method, url, data) {\n\t\tconst headers = {\n\t\t\t...this.staticHeaders,\n\t\t\tAccept: \"application/json\",\n\t\t\t\"Content-Type\": \"application/json\"\n\t\t};\n\t\tconst response = await this.send(method, url, headers, JSON.stringify(data));\n\t\tawait assertOk(response, url);\n\t\treturn readJson(response, url);\n\t}\n\tasync send(method, url, headers, body) {\n\t\ttry {\n\t\t\treturn await this.fetchImpl(url, {\n\t\t\t\tmethod,\n\t\t\t\theaders,\n\t\t\t\tbody\n\t\t\t});\n\t\t} catch (cause) {\n\t\t\tthrow new KozouApiAdapterError({\n\t\t\t\tmessage: `KozouApiDataAdapter: ${method} ${url} failed before reaching the server: ${cause.message}`,\n\t\t\t\tstatus: 0,\n\t\t\t\turl,\n\t\t\t\tresponseBody: null,\n\t\t\t\tcode: \"network\"\n\t\t\t});\n\t\t}\n\t}\n};\nfunction stripTrailingSlash(url) {\n\treturn url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\nfunction encodeResource(resource) {\n\treturn encodeURIComponent(resource);\n}\nfunction appendSort(query, sort) {\n\tif (!sort || sort.length === 0) return;\n\tquery.set(\"sort\", sort.map((s) => `${s.field}.${s.order}`).join(\",\"));\n}\nfunction appendFilters(query, filters) {\n\tif (!filters) return;\n\tfor (const [key, value] of Object.entries(filters)) {\n\t\tif (value === void 0 || key === OR_FILTER_KEY) continue;\n\t\tquery.set(key, String(value));\n\t}\n}\nasync function readJson(response, url) {\n\ttry {\n\t\treturn await response.json();\n\t} catch (cause) {\n\t\tthrow new KozouApiAdapterError({\n\t\t\tmessage: `KozouApiDataAdapter: failed to parse JSON response from ${url}: ${cause.message}`,\n\t\t\tstatus: response.status,\n\t\t\turl,\n\t\t\tresponseBody: null,\n\t\t\tcode: \"parse\"\n\t\t});\n\t}\n}\nasync function assertOk(response, url) {\n\tif (response.ok) return;\n\tlet body = null;\n\ttry {\n\t\tbody = await response.text();\n\t} catch {\n\t\tbody = null;\n\t}\n\tthrow new KozouApiAdapterError({\n\t\tmessage: `KozouApiDataAdapter: request to ${url} failed with status ${response.status}`,\n\t\tstatus: response.status,\n\t\turl,\n\t\tresponseBody: body,\n\t\tcode: \"http\"\n\t});\n}\nfunction configError(message) {\n\treturn new KozouApiAdapterError({\n\t\tmessage,\n\t\tstatus: 0,\n\t\turl: \"\",\n\t\tresponseBody: null,\n\t\tcode: \"config\"\n\t});\n}\n//#endregion\n//#region src/lib/server/adapter.ts\nvar DEFAULT_POSTGREST_URL = \"http://localhost:3000\";\nvar DEFAULT_API_URL = \"http://localhost:3335\";\nvar cached = null;\nvar cachedSchema = null;\n/**\n* Resolve the configured DataAdapter.\n*\n* The in-house API adapter resolves primary keys server-side, so it ignores\n* `schema`. The REST adapter must address rows by their actual key columns\n* (a composite key expands to per-column filters), so it is wired with a\n* resolver derived from the live SchemaContext. The singleton is rebuilt when\n* the schema identity changes — the schema cache hands out a new object on its\n* TTL refresh — so the resolver tracks DDL changes.\n*/\nfunction getAdapter(schema) {\n\tconst nextSchema = schema ?? null;\n\tif (cached !== null && cachedSchema === nextSchema) return cached;\n\tcachedSchema = nextSchema;\n\tif ((process.env.KOZOU_ADAPTER_KIND ?? \"postgrest\") === \"api\") {\n\t\tconst baseUrl = process.env.KOZOU_ADAPTER_URL ?? DEFAULT_API_URL;\n\t\tconst token = process.env.KOZOU_ADAPTER_TOKEN;\n\t\tcached = new KozouApiDataAdapter({\n\t\t\tbaseUrl,\n\t\t\theaders: token !== void 0 && token.length > 0 ? { Authorization: `Bearer ${token}` } : void 0\n\t\t});\n\t} else cached = new PostgrestDataAdapter({\n\t\tbaseUrl: process.env.KOZOU_ADAPTER_URL ?? DEFAULT_POSTGREST_URL,\n\t\tprimaryKey: primaryKeyResolver(schema)\n\t});\n\treturn cached;\n}\nvar DEFAULT_RESOLVER_SCHEMA = \"public\";\n/** Build a primary-key resolver from the schema: each resource maps to its\n* ordered key columns. A bare (schema-less) resource name is matched\n* against the default schema, the same normalization the adapter applies.\n* A known key-less table keeps its empty key list so the adapter rejects\n* by-id operations loudly instead of filtering on a possibly non-unique\n* 'id' column (wrong-row reads / mutations). The 'id' fallback applies\n* only to unknown resources or when no schema is available. */\nfunction primaryKeyResolver(schema) {\n\tif (schema === void 0) return void 0;\n\treturn (resource) => {\n\t\tconst qualified = resource.includes(\".\") ? resource : `${DEFAULT_RESOLVER_SCHEMA}.${resource}`;\n\t\tconst table = schema.tables.find((t) => t.qualifiedName === qualified);\n\t\tif (table !== void 0) return table.primaryKey;\n\t\treturn \"id\";\n\t};\n}\n//#endregion\nexport { getAdapter as t };\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { w as index_server_exports } from './internal-BERZdLJL.js';
1
+ import { w as index_server_exports } from './internal-Cuea68jL.js';
2
2
  import { U as noop } from './dev-yFiAtg5l.js';
3
3
 
4
4
  var is_legacy = noop.toString().includes("$$") || /function \w+\(\) \{\}/.test(noop.toString());
@@ -66,4 +66,4 @@ async function applyAction(result) {
66
66
  }
67
67
 
68
68
  export { afterNavigate as a, applyAction as b, invalidateAll as i };
69
- //# sourceMappingURL=client-PK7K0DFj.js.map
69
+ //# sourceMappingURL=client-_87vxA9R.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-PK7K0DFj.js","sources":["../../../.svelte-kit/adapter-node/chunks/client.js"],"sourcesContent":["import { S as noop, f as get_message, h as base64_decode, n as TRAILING_SLASH_PARAM, p as get_status, r as create_remote_key, t as INVALIDATED_PARAM, x as unflatten } from \"./shared.js\";\nimport { a as index_server_exports, c as tick$1, h as base, s as settled } from \"./environment.js\";\nimport { Z as noop$1, k as writable } from \"./dev.js\";\nimport { S as compact, f as make_trackable, g as add_data_suffix, h as noop_span, l as decode_params, p as normalize_path, s as hash, u as decode_pathname } from \"./exports.js\";\nimport \"./internal.js\";\nimport { HttpError, Redirect, SvelteKitError } from \"@sveltejs/kit/internal\";\nimport \"@sveltejs/kit/internal/server\";\nvar STATES_KEY = \"sveltekit:states\";\nvar HISTORY_INDEX = \"sveltekit:history\";\nvar NAVIGATION_INDEX = \"sveltekit:navigation\";\nvar PRELOAD_PRIORITIES = {\n\ttap: 1,\n\thover: 2,\n\tviewport: 3,\n\teager: 4,\n\toff: -1,\n\tfalse: -1\n};\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/utils.js\nvar origin = \"\";\n/** @param {string | URL} url */\nfunction resolve_url(url) {\n\tif (url instanceof URL) return url;\n\tlet baseURI = document.baseURI;\n\tif (!baseURI) {\n\t\tconst baseTags = document.getElementsByTagName(\"base\");\n\t\tbaseURI = baseTags.length ? baseTags[0].href : document.URL;\n\t}\n\treturn new URL(url, baseURI);\n}\nfunction scroll_state() {\n\treturn {\n\t\tx: pageXOffset,\n\t\ty: pageYOffset\n\t};\n}\n({ ...PRELOAD_PRIORITIES }), PRELOAD_PRIORITIES.hover;\n/** @param {any} value */\nfunction notifiable_store(value) {\n\tconst store = writable(value);\n\tlet ready = true;\n\tfunction notify() {\n\t\tready = true;\n\t\tstore.update((val) => val);\n\t}\n\t/** @param {any} new_value */\n\tfunction set(new_value) {\n\t\tready = false;\n\t\tstore.set(new_value);\n\t}\n\t/** @param {(value: any) => void} run */\n\tfunction subscribe(run) {\n\t\t/** @type {any} */\n\t\tlet old_value;\n\t\treturn store.subscribe((new_value) => {\n\t\t\tif (old_value === void 0 || ready && new_value !== old_value) run(old_value = new_value);\n\t\t});\n\t}\n\treturn {\n\t\tnotify,\n\t\tset,\n\t\tsubscribe\n\t};\n}\nvar updated_listener = { v: noop };\nfunction create_updated_store() {\n\tconst { set, subscribe } = writable(false);\n\treturn {\n\t\tsubscribe,\n\t\tcheck: async () => false\n\t};\n}\n/**\n* Is external if\n* - origin different\n* - path doesn't start with base\n* - uses hash router and pathname is more than base\n* @param {URL} url\n* @param {string} base\n* @param {boolean} hash_routing\n*/\nfunction is_external_url(url, base, hash_routing) {\n\tif (url.origin !== origin || !url.pathname.startsWith(base)) return true;\n\tif (hash_routing) return url.pathname !== location.pathname;\n\treturn false;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/state.svelte.js\nvar page;\nvar navigating;\nvar updated;\nvar is_legacy = noop$1.toString().includes(\"$$\") || /function \\w+\\(\\) \\{\\}/.test(noop$1.toString());\nvar placeholder_url = \"a:\";\nif (is_legacy) {\n\tpage = {\n\t\tdata: {},\n\t\tform: null,\n\t\terror: null,\n\t\tparams: {},\n\t\troute: { id: null },\n\t\tstate: {},\n\t\tstatus: -1,\n\t\turl: new URL(placeholder_url)\n\t};\n\tnavigating = { current: null };\n\tupdated = { current: false };\n} else {\n\tpage = new class Page {\n\t\tdata = {};\n\t\tform = null;\n\t\terror = null;\n\t\tparams = {};\n\t\troute = { id: null };\n\t\tstate = {};\n\t\tstatus = -1;\n\t\turl = new URL(placeholder_url);\n\t}();\n\tnavigating = new class Navigating {\n\t\tcurrent = null;\n\t}();\n\tupdated = new class Updated {\n\t\tcurrent = false;\n\t}();\n\tupdated_listener.v = () => updated.current = true;\n}\n/**\n* @param {import('@sveltejs/kit').Page} new_page\n*/\nfunction update(new_page) {\n\tObject.assign(page, new_page);\n}\nvar cache = /* @__PURE__ */ new Map();\n/**\n* Should be called on the initial run of load functions that hydrate the page.\n* Saves any requests with cache-control max-age to the cache.\n* @param {URL | string} resource\n* @param {RequestInit} [opts]\n*/\nfunction initial_fetch(resource, opts) {\n\tconst selector = build_selector(resource, opts);\n\tconst script = document.querySelector(selector);\n\tif (script?.textContent) {\n\t\tscript.remove();\n\t\tlet { body, ...init } = JSON.parse(script.textContent);\n\t\tconst ttl = script.getAttribute(\"data-ttl\");\n\t\tif (ttl) cache.set(selector, {\n\t\t\tbody,\n\t\t\tinit,\n\t\t\tttl: 1e3 * Number(ttl)\n\t\t});\n\t\tif (script.getAttribute(\"data-b64\") !== null) body = base64_decode(body);\n\t\treturn Promise.resolve(new Response(body, init));\n\t}\n\treturn window.fetch(resource, opts);\n}\n/**\n* Tries to get the response from the cache, if max-age allows it, else does a fetch.\n* @param {URL | string} resource\n* @param {string} resolved\n* @param {RequestInit} [opts]\n*/\nfunction subsequent_fetch(resource, resolved, opts) {\n\tif (cache.size > 0) {\n\t\tconst selector = build_selector(resource, opts);\n\t\tconst cached = cache.get(selector);\n\t\tif (cached) {\n\t\t\tif (performance.now() < cached.ttl && [\n\t\t\t\t\"default\",\n\t\t\t\t\"force-cache\",\n\t\t\t\t\"only-if-cached\",\n\t\t\t\tvoid 0\n\t\t\t].includes(opts?.cache)) return new Response(cached.body, cached.init);\n\t\t\tcache.delete(selector);\n\t\t}\n\t}\n\treturn window.fetch(resolved, opts);\n}\n/**\n* Build the cache key for a given request\n* @param {URL | RequestInfo} resource\n* @param {RequestInit} [opts]\n*/\nfunction build_selector(resource, opts) {\n\tlet selector = `script[data-sveltekit-fetched][data-url=${JSON.stringify(resource instanceof Request ? resource.url : resource)}]`;\n\tif (opts?.headers || opts?.body) {\n\t\t/** @type {import('types').StrictBody[]} */\n\t\tconst values = [];\n\t\tif (opts.headers) values.push([...new Headers(opts.headers)].join(\",\"));\n\t\tif (opts.body && (typeof opts.body === \"string\" || ArrayBuffer.isView(opts.body))) values.push(opts.body);\n\t\tselector += `[data-hash=\"${hash(...values)}\"]`;\n\t}\n\treturn selector;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/session-storage.js\n/**\n* Read a value from `sessionStorage`\n* @param {string} key\n* @param {(value: string) => any} parse\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction get(key, parse = JSON.parse) {\n\ttry {\n\t\treturn parse(sessionStorage[key]);\n\t} catch {}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/ndjson.js\n/**\n* Yields parsed JSON objects from a ReadableStream of newline-delimited JSON.\n* Each yielded value is the raw `JSON.parse`'d object — callers handle deserialization.\n* @param {ReadableStreamDefaultReader<Uint8Array>} reader\n*/\nasync function* read_ndjson(reader) {\n\tlet done = false;\n\tlet buffer = \"\";\n\tconst decoder = new TextDecoder();\n\twhile (true) {\n\t\tlet split = buffer.indexOf(\"\\n\");\n\t\twhile (split !== -1) {\n\t\t\tconst line = buffer.slice(0, split).trim();\n\t\t\tbuffer = buffer.slice(split + 1);\n\t\t\tif (line) yield JSON.parse(line);\n\t\t\tsplit = buffer.indexOf(\"\\n\");\n\t\t}\n\t\tif (done) {\n\t\t\tconst line = buffer.trim();\n\t\t\tif (line) yield JSON.parse(line);\n\t\t\treturn;\n\t\t}\n\t\tconst chunk = await reader.read();\n\t\tdone = chunk.done;\n\t\tif (chunk.value) buffer += decoder.decode(chunk.value, { stream: true });\n\t\tif (done) buffer += decoder.decode();\n\t}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/client.js\n/** @import { CacheEntry } from './remote-functions/cache.svelte.js' */\n/** @import { Query } from './remote-functions/query/instance.svelte.js' */\n/** @import { LiveQuery } from './remote-functions/query-live/instance.svelte.js' */\nvar { onMount, tick } = index_server_exports;\n/**\n* Set via transformError, reset and read at the end of navigate.\n* Necessary because a navigation might succeed loading but during rendering\n* an error occurs, at which point the navigation result needs to be overridden with the error result.\n* TODO this is all very hacky, rethink for SvelteKit 3 where we can assume Svelte 5 and do an overhaul of client.js\n* @type {{ error: App.Error, status: number } | null}\n*/\nvar rendering_error = null;\n/**\n* history index -> { x, y }\n* @type {Record<number, { x: number; y: number }>}\n*/\nvar scroll_positions = /* @__PURE__ */ get(\"sveltekit:scroll\") ?? {};\n/**\n* navigation index -> any\n* @type {Record<string, any[]>}\n*/\nvar snapshots = /* @__PURE__ */ get(\"sveltekit:snapshot\") ?? {};\nvar stores = {\n\turl: /* @__PURE__ */ notifiable_store({}),\n\tpage: /* @__PURE__ */ notifiable_store({}),\n\tnavigating: /* @__PURE__ */ writable(null),\n\tupdated: /* @__PURE__ */ create_updated_store()\n};\n/** @param {number} index */\nfunction update_scroll_positions(index) {\n\tscroll_positions[index] = scroll_state();\n}\n/**\n* @param {number} current_history_index\n* @param {number} current_navigation_index\n*/\nfunction clear_onward_history(current_history_index, current_navigation_index) {\n\tlet i = current_history_index + 1;\n\twhile (scroll_positions[i]) {\n\t\tdelete scroll_positions[i];\n\t\ti += 1;\n\t}\n\ti = current_navigation_index + 1;\n\twhile (snapshots[i]) {\n\t\tdelete snapshots[i];\n\t\ti += 1;\n\t}\n}\n/**\n* Loads `href` the old-fashioned way, with a full page reload.\n* Returns a `Promise` that never resolves (to prevent any\n* subsequent work, e.g. history manipulation, from happening)\n* @param {URL} url\n* @param {boolean} [replace] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n*/\nfunction native_navigation(url, replace = false) {\n\tif (replace) location.replace(url.href);\n\telse location.href = url.href;\n\treturn new Promise(noop);\n}\n/**\n* Checks whether a service worker is registered, and if it is,\n* tries to update it.\n*/\nasync function update_service_worker() {\n\tif (\"serviceWorker\" in navigator) {\n\t\tconst registration = await navigator.serviceWorker.getRegistration(base || \"/\");\n\t\tif (registration) await registration.update();\n\t}\n}\n/** @type {import('types').CSRRoute[]} All routes of the app. Only available when kit.router.resolution=client */\nvar routes;\n/** @type {import('types').CSRPageNodeLoader} */\nvar default_layout_loader;\n/** @type {import('types').CSRPageNodeLoader} */\nvar default_error_loader;\n/** @type {HTMLElement} */\nvar target;\n/** @type {import('./types.js').SvelteKitApp} */\nvar app;\n/** @type {Array<((url: URL) => boolean)>} */\nvar invalidated = [];\n/**\n* An array of the `+layout.svelte` and `+page.svelte` component instances\n* that currently live on the page — used for capturing and restoring snapshots.\n* It's updated/manipulated through `bind:this` in `Root.svelte`.\n* @type {import('svelte').SvelteComponent[]}\n*/\nvar components = [];\n/** @type {{id: string, token: {}, promise: Promise<import('./types.js').NavigationResult>, fork: Promise<import('svelte').Fork | null> | null} | null} */\nvar load_cache = null;\nfunction discard_load_cache() {\n\tload_cache?.fork?.then((f) => f?.discard());\n\tload_cache = null;\n}\n/**\n* @type {Map<string, Promise<URL>>}\n* Cache for client-side rerouting, since it could contain async calls which we want to\n* avoid running multiple times which would slow down navigations (e.g. else preloading\n* wouldn't help because on navigation it would be called again). Since `reroute` should be\n* a pure function (i.e. always return the same) value it's safe to cache across navigations.\n* The server reroute calls don't need to be cached because they are called using `import(...)`\n* which is cached per the JS spec.\n*/\nvar reroute_cache = /* @__PURE__ */ new Map();\n/**\n* Note on before_navigate_callbacks, on_navigate_callbacks and after_navigate_callbacks:\n* do not re-assign as some closures keep references to these Sets\n*/\n/** @type {Set<(navigation: import('@sveltejs/kit').BeforeNavigate) => void>} */\nvar before_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {Set<(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<(() => void) | void>>} */\nvar on_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {Set<(navigation: import('@sveltejs/kit').AfterNavigate) => void>} */\nvar after_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {import('./types.js').NavigationState & { nav: import('@sveltejs/kit').NavigationEvent }} */\nvar current = {\n\tbranch: [],\n\terror: null,\n\turl: null,\n\tnav: null\n};\n/** this being true means we SSR'd */\nvar hydrated = false;\nvar started = false;\nvar autoscroll = true;\nvar is_navigating = false;\nvar force_invalidation = false;\n/** @type {import('svelte').SvelteComponent} */\nvar root;\n/** @type {number} keeping track of the history index in order to prevent popstate navigation events if needed */\nvar current_history_index;\n/** @type {number} */\nvar current_navigation_index;\n/** @type {{}} */\nvar token;\n/**\n* A set of tokens which are associated to current preloads.\n* If a preload becomes a real navigation, it's removed from the set.\n* If a preload token is in the set and the preload errors, the error\n* handling logic (for example reloading) is skipped.\n*/\nvar preload_tokens = /* @__PURE__ */ new Set();\n/**\n* @type {Map<string, Map<string, CacheEntry<Query<any>>>>}\n* A map of query id -> payload -> query internals for all active queries.\n*/\nvar query_map = /* @__PURE__ */ new Map();\n/**\n* @type {Map<string, Map<string, CacheEntry<LiveQuery<any>>>>}\n* A map of id -> payload -> live query internals for all active queries.\n*/\nvar live_query_map = /* @__PURE__ */ new Map();\nfunction reset_invalidation() {\n\tinvalidated.length = 0;\n\tforce_invalidation = false;\n}\n/** @param {number} index */\nfunction capture_snapshot(index) {\n\tif (components.some((c) => c?.snapshot)) snapshots[index] = components.map((c) => c?.snapshot?.capture());\n}\n/** @param {number} index */\nfunction restore_snapshot(index) {\n\tsnapshots[index]?.forEach((value, i) => {\n\t\tcomponents[i]?.snapshot?.restore(value);\n\t});\n}\n/**\n* @param {string | URL} url\n* @param {{ replaceState?: boolean; noScroll?: boolean; keepFocus?: boolean; invalidateAll?: boolean; invalidate?: Array<string | URL | ((url: URL) => boolean)>; state?: Record<string, any> }} options\n* @param {number} redirect_count\n* @param {{}} [nav_token]\n*/\nasync function _goto(url, options, redirect_count, nav_token) {\n\t/** @type {Set<string>} */\n\tlet query_keys;\n\t/** @type {Set<string>} */\n\tlet live_query_keys;\n\tif (options.invalidateAll) discard_load_cache();\n\tawait navigate({\n\t\ttype: \"goto\",\n\t\turl: resolve_url(url),\n\t\tkeepfocus: options.keepFocus,\n\t\tnoscroll: options.noScroll,\n\t\treplace_state: options.replaceState,\n\t\tstate: options.state,\n\t\tredirect_count,\n\t\tnav_token,\n\t\taccept: () => {\n\t\t\tif (options.invalidateAll) {\n\t\t\t\tforce_invalidation = true;\n\t\t\t\tquery_keys = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const [id, entries] of query_map) for (const payload of entries.keys()) query_keys.add(create_remote_key(id, payload));\n\t\t\t\tlive_query_keys = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const [id, entries] of live_query_map) for (const payload of entries.keys()) live_query_keys.add(create_remote_key(id, payload));\n\t\t\t}\n\t\t\tif (options.invalidate) options.invalidate.forEach(push_invalidated);\n\t\t}\n\t});\n\tif (options.invalidateAll) tick$1().then(tick$1).then(() => {\n\t\tfor (const [id, entries] of query_map) for (const [payload, { resource }] of entries) if (query_keys?.has(create_remote_key(id, payload))) resource.refresh();\n\t\tfor (const [id, entries] of live_query_map) for (const [payload, { resource }] of entries) if (live_query_keys?.has(create_remote_key(id, payload))) resource.reconnect();\n\t});\n}\n/**\n* @param {import('./types.js').NavigationFinished} result\n* @param {HTMLElement} target\n* @param {boolean} hydrate\n*/\nasync function initialize(result, target, hydrate) {\n\t/** @type {import('@sveltejs/kit').NavigationEvent} */\n\tconst nav = {\n\t\tparams: current.params,\n\t\troute: { id: current.route?.id ?? null },\n\t\turl: new URL(location.href)\n\t};\n\tcurrent = {\n\t\t...result.state,\n\t\tnav\n\t};\n\tupdate(result.props.page);\n\troot = new app.root({\n\t\ttarget,\n\t\tprops: {\n\t\t\t...result.props,\n\t\t\tstores,\n\t\t\tcomponents\n\t\t},\n\t\thydrate,\n\t\tsync: false,\n\t\ttransformError: void 0\n\t});\n\tawait Promise.resolve();\n\trestore_snapshot(current_navigation_index);\n\tif (hydrate) {\n\t\t/** @type {import('@sveltejs/kit').AfterNavigate} */\n\t\tconst navigation = {\n\t\t\tfrom: null,\n\t\t\tto: {\n\t\t\t\t...nav,\n\t\t\t\tscroll: scroll_positions[current_history_index] ?? scroll_state()\n\t\t\t},\n\t\t\twillUnload: false,\n\t\t\ttype: \"enter\",\n\t\t\tcomplete: Promise.resolve()\n\t\t};\n\t\tafter_navigate_callbacks.forEach((fn) => fn(navigation));\n\t}\n\tstarted = true;\n}\n/**\n*\n* @param {{\n* url: URL;\n* params: Record<string, string>;\n* branch: Array<import('./types.js').BranchNode | undefined>;\n* errors?: Array<import('types').CSRPageNodeLoader | undefined>;\n* status: number;\n* error: App.Error | null;\n* route: import('types').CSRRoute | null;\n* form?: Record<string, any> | null;\n* }} opts\n*/\nasync function get_navigation_result_from_branch({ url, params, branch, errors, status, error, route, form }) {\n\t/** @type {import('types').TrailingSlash} */\n\tlet slash = \"never\";\n\tif (base && (url.pathname === base || url.pathname === base + \"/\")) slash = \"always\";\n\telse for (const node of branch) if (node?.slash !== void 0) slash = node.slash;\n\turl.pathname = normalize_path(url.pathname, slash);\n\turl.search = url.search;\n\t/** @type {import('./types.js').NavigationFinished} */\n\tconst result = {\n\t\ttype: \"loaded\",\n\t\tstate: {\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch,\n\t\t\terror,\n\t\t\troute\n\t\t},\n\t\tprops: {\n\t\t\tconstructors: compact(branch).map((branch_node) => branch_node.node.component),\n\t\t\tpage: clone_page(page)\n\t\t}\n\t};\n\tif (form !== void 0) result.props.form = form;\n\tlet data = {};\n\tlet data_changed = !page;\n\tlet p = 0;\n\tfor (let i = 0; i < Math.max(branch.length, current.branch.length); i += 1) {\n\t\tconst node = branch[i];\n\t\tconst prev = current.branch[i];\n\t\tif (node?.data !== prev?.data) data_changed = true;\n\t\tif (!node) continue;\n\t\tdata = {\n\t\t\t...data,\n\t\t\t...node.data\n\t\t};\n\t\tif (data_changed) result.props[`data_${p}`] = data;\n\t\tp += 1;\n\t}\n\tif (!current.url || url.href !== current.url.href || current.error !== error || form !== void 0 && form !== page.form || data_changed) result.props.page = {\n\t\terror,\n\t\tparams,\n\t\troute: { id: route?.id ?? null },\n\t\tstate: {},\n\t\tstatus,\n\t\turl: new URL(url),\n\t\tform: form ?? null,\n\t\tdata: data_changed ? data : page.data\n\t};\n\treturn result;\n}\n/**\n* Call the universal load function of the given node, if it exists.\n*\n* @param {{\n* loader: import('types').CSRPageNodeLoader;\n* \t parent: () => Promise<Record<string, any>>;\n* url: URL;\n* params: Record<string, string>;\n* route: { id: string | null };\n* \t server_data_node: import('./types.js').DataNode | null;\n* }} options\n* @returns {Promise<import('./types.js').BranchNode>}\n*/\nasync function load_node({ loader, parent, url, params, route, server_data_node }) {\n\t/** @type {Record<string, any> | null} */\n\tlet data = null;\n\tlet is_tracking = true;\n\t/** @type {import('types').Uses} */\n\tconst uses = {\n\t\tdependencies: /* @__PURE__ */ new Set(),\n\t\tparams: /* @__PURE__ */ new Set(),\n\t\tparent: false,\n\t\troute: false,\n\t\turl: false,\n\t\tsearch_params: /* @__PURE__ */ new Set()\n\t};\n\tconst node = await loader();\n\tif (node.universal?.load) {\n\t\t/** @param {string[]} deps */\n\t\tfunction depends(...deps) {\n\t\t\tfor (const dep of deps) {\n\t\t\t\tconst { href } = new URL(dep, url);\n\t\t\t\tuses.dependencies.add(href);\n\t\t\t}\n\t\t}\n\t\t/** @type {import('@sveltejs/kit').LoadEvent} */\n\t\tconst load_input = {\n\t\t\ttracing: {\n\t\t\t\tenabled: false,\n\t\t\t\troot: noop_span,\n\t\t\t\tcurrent: noop_span\n\t\t\t},\n\t\t\troute: new Proxy(route, { get: (target, key) => {\n\t\t\t\tif (is_tracking) uses.route = true;\n\t\t\t\treturn target[key];\n\t\t\t} }),\n\t\t\tparams: new Proxy(params, { get: (target, key) => {\n\t\t\t\tif (is_tracking) uses.params.add(key);\n\t\t\t\treturn target[key];\n\t\t\t} }),\n\t\t\tdata: server_data_node?.data ?? null,\n\t\t\turl: make_trackable(url, () => {\n\t\t\t\tif (is_tracking) uses.url = true;\n\t\t\t}, (param) => {\n\t\t\t\tif (is_tracking) uses.search_params.add(param);\n\t\t\t}, app.hash),\n\t\t\tasync fetch(resource, init) {\n\t\t\t\tif (resource instanceof Request) init = {\n\t\t\t\t\tbody: resource.method === \"GET\" || resource.method === \"HEAD\" ? void 0 : await resource.blob(),\n\t\t\t\t\tcache: resource.cache,\n\t\t\t\t\tcredentials: resource.credentials,\n\t\t\t\t\theaders: [...resource.headers].length > 0 ? resource?.headers : void 0,\n\t\t\t\t\tintegrity: resource.integrity,\n\t\t\t\t\tkeepalive: resource.keepalive,\n\t\t\t\t\tmethod: resource.method,\n\t\t\t\t\tmode: resource.mode,\n\t\t\t\t\tredirect: resource.redirect,\n\t\t\t\t\treferrer: resource.referrer,\n\t\t\t\t\treferrerPolicy: resource.referrerPolicy,\n\t\t\t\t\tsignal: resource.signal,\n\t\t\t\t\t...init\n\t\t\t\t};\n\t\t\t\tconst { resolved, promise } = resolve_fetch_url(resource, init, url);\n\t\t\t\tif (is_tracking) depends(resolved.href);\n\t\t\t\treturn promise;\n\t\t\t},\n\t\t\tsetHeaders: noop,\n\t\t\tdepends,\n\t\t\tparent() {\n\t\t\t\tif (is_tracking) uses.parent = true;\n\t\t\t\treturn parent();\n\t\t\t},\n\t\t\tuntrack(fn) {\n\t\t\t\tis_tracking = false;\n\t\t\t\ttry {\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\tis_tracking = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tdata = await node.universal.load.call(null, load_input) ?? null;\n\t}\n\treturn {\n\t\tnode,\n\t\tloader,\n\t\tserver: server_data_node,\n\t\tuniversal: node.universal?.load ? {\n\t\t\ttype: \"data\",\n\t\t\tdata,\n\t\t\tuses\n\t\t} : null,\n\t\tdata: data ?? server_data_node?.data ?? null,\n\t\tslash: node.universal?.trailingSlash ?? server_data_node?.slash\n\t};\n}\n/**\n* @param {Request | string | URL} input\n* @param {RequestInit | undefined} init\n* @param {URL} url\n*/\nfunction resolve_fetch_url(input, init, url) {\n\tlet requested = input instanceof Request ? input.url : input;\n\tconst resolved = new URL(requested, url);\n\tif (resolved.origin === url.origin) requested = resolved.href.slice(url.origin.length);\n\treturn {\n\t\tresolved,\n\t\tpromise: started ? subsequent_fetch(requested, resolved.href, init) : initial_fetch(requested, init)\n\t};\n}\n/**\n* @param {boolean} parent_changed\n* @param {boolean} route_changed\n* @param {boolean} url_changed\n* @param {Set<string>} search_params_changed\n* @param {import('types').Uses | undefined} uses\n* @param {Record<string, string>} params\n*/\nfunction has_changed(parent_changed, route_changed, url_changed, search_params_changed, uses, params) {\n\tif (force_invalidation) return true;\n\tif (!uses) return false;\n\tif (uses.parent && parent_changed) return true;\n\tif (uses.route && route_changed) return true;\n\tif (uses.url && url_changed) return true;\n\tfor (const tracked_params of uses.search_params) if (search_params_changed.has(tracked_params)) return true;\n\tfor (const param of uses.params) if (params[param] !== current.params[param]) return true;\n\tfor (const href of uses.dependencies) if (invalidated.some((fn) => fn(new URL(href)))) return true;\n\treturn false;\n}\n/**\n* @param {import('types').ServerDataNode | import('types').ServerDataSkippedNode | null} node\n* @param {import('./types.js').DataNode | null} [previous]\n* @returns {import('./types.js').DataNode | null}\n*/\nfunction create_data_node(node, previous) {\n\tif (node?.type === \"data\") return node;\n\tif (node?.type === \"skip\") return previous ?? null;\n\treturn null;\n}\n/**\n* @param {URL | null} old_url\n* @param {URL} new_url\n*/\nfunction diff_search_params(old_url, new_url) {\n\tif (!old_url) return new Set(new_url.searchParams.keys());\n\tconst changed = new Set([...old_url.searchParams.keys(), ...new_url.searchParams.keys()]);\n\tfor (const key of changed) {\n\t\tconst old_values = old_url.searchParams.getAll(key);\n\t\tconst new_values = new_url.searchParams.getAll(key);\n\t\tif (old_values.every((value) => new_values.includes(value)) && new_values.every((value) => old_values.includes(value))) changed.delete(key);\n\t}\n\treturn changed;\n}\n/**\n* @param {Omit<import('./types.js').NavigationFinished['state'], 'branch'> & { error: App.Error }} opts\n* @returns {import('./types.js').NavigationFinished}\n*/\nfunction preload_error({ error, url, route, params }) {\n\treturn {\n\t\ttype: \"loaded\",\n\t\tstate: {\n\t\t\terror,\n\t\t\turl,\n\t\t\troute,\n\t\t\tparams,\n\t\t\tbranch: []\n\t\t},\n\t\tprops: {\n\t\t\tpage: clone_page(page),\n\t\t\tconstructors: []\n\t\t}\n\t};\n}\n/**\n* @param {import('./types.js').NavigationIntent & { preload?: {} }} intent\n* @returns {Promise<import('./types.js').NavigationResult>}\n*/\nasync function load_route({ id, invalidating, url, params, route, preload }) {\n\tif (load_cache?.id === id) {\n\t\tpreload_tokens.delete(load_cache.token);\n\t\treturn load_cache.promise;\n\t}\n\tconst { errors, layouts, leaf } = route;\n\tconst loaders = [...layouts, leaf];\n\terrors.forEach((loader) => loader?.().catch(noop));\n\tloaders.forEach((loader) => loader?.[1]().catch(noop));\n\t/** @type {import('types').ServerNodesResponse | import('types').ServerRedirectNode | null} */\n\tlet server_data = null;\n\tconst url_changed = current.url ? id !== get_page_key(current.url) : false;\n\tconst route_changed = current.route ? route.id !== current.route.id : false;\n\tconst search_params_changed = diff_search_params(current.url, url);\n\tlet parent_invalid = false;\n\t{\n\t\tconst invalid_server_nodes = loaders.map((loader, i) => {\n\t\t\tconst previous = current.branch[i];\n\t\t\tconst invalid = !!loader?.[0] && (previous?.loader !== loader[1] || has_changed(parent_invalid, route_changed, url_changed, search_params_changed, previous.server?.uses, params));\n\t\t\tif (invalid) parent_invalid = true;\n\t\t\treturn invalid;\n\t\t});\n\t\tif (invalid_server_nodes.some(Boolean)) {\n\t\t\ttry {\n\t\t\t\tserver_data = await load_data(url, invalid_server_nodes);\n\t\t\t} catch (error) {\n\t\t\t\tconst handled_error = await handle_error(error, {\n\t\t\t\t\turl,\n\t\t\t\t\tparams,\n\t\t\t\t\troute: { id }\n\t\t\t\t});\n\t\t\t\tif (preload_tokens.has(preload)) return preload_error({\n\t\t\t\t\terror: handled_error,\n\t\t\t\t\turl,\n\t\t\t\t\tparams,\n\t\t\t\t\troute\n\t\t\t\t});\n\t\t\t\treturn load_root_error_page({\n\t\t\t\t\tstatus: get_status(error),\n\t\t\t\t\terror: handled_error,\n\t\t\t\t\turl,\n\t\t\t\t\troute\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (server_data.type === \"redirect\") return server_data;\n\t\t}\n\t}\n\tconst server_data_nodes = server_data?.nodes;\n\tlet parent_changed = false;\n\tconst branch_promises = loaders.map(async (loader, i) => {\n\t\tif (!loader) return;\n\t\t/** @type {import('./types.js').BranchNode | undefined} */\n\t\tconst previous = current.branch[i];\n\t\tconst server_data_node = server_data_nodes?.[i];\n\t\tif ((!server_data_node || server_data_node.type === \"skip\") && loader[1] === previous?.loader && !has_changed(parent_changed, route_changed, url_changed, search_params_changed, previous.universal?.uses, params)) return previous;\n\t\tparent_changed = true;\n\t\tif (server_data_node?.type === \"error\") throw server_data_node;\n\t\treturn load_node({\n\t\t\tloader: loader[1],\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute,\n\t\t\tparent: async () => {\n\t\t\t\tconst data = {};\n\t\t\t\tfor (let j = 0; j < i; j += 1) Object.assign(data, (await branch_promises[j])?.data);\n\t\t\t\treturn data;\n\t\t\t},\n\t\t\tserver_data_node: create_data_node(server_data_node === void 0 && loader[0] ? { type: \"skip\" } : server_data_node ?? null, loader[0] ? previous?.server : void 0)\n\t\t});\n\t});\n\tfor (const p of branch_promises) p.catch(noop);\n\t/** @type {Array<import('./types.js').BranchNode | undefined>} */\n\tconst branch = [];\n\tfor (let i = 0; i < loaders.length; i += 1) if (loaders[i]) try {\n\t\tbranch.push(await branch_promises[i]);\n\t} catch (err) {\n\t\tif (err instanceof Redirect) return {\n\t\t\ttype: \"redirect\",\n\t\t\tlocation: err.location\n\t\t};\n\t\tif (preload_tokens.has(preload)) return preload_error({\n\t\t\terror: await handle_error(err, {\n\t\t\t\tparams,\n\t\t\t\turl,\n\t\t\t\troute: { id: route.id }\n\t\t\t}),\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute\n\t\t});\n\t\tlet status = get_status(err);\n\t\t/** @type {App.Error} */\n\t\tlet error;\n\t\tif (server_data_nodes?.includes(err)) {\n\t\t\tstatus = err.status ?? status;\n\t\t\terror = err.error;\n\t\t} else if (err instanceof HttpError) error = err.body;\n\t\telse {\n\t\t\tif (await stores.updated.check()) {\n\t\t\t\tawait update_service_worker();\n\t\t\t\treturn await native_navigation(url);\n\t\t\t}\n\t\t\terror = await handle_error(err, {\n\t\t\t\tparams,\n\t\t\t\turl,\n\t\t\t\troute: { id: route.id }\n\t\t\t});\n\t\t}\n\t\tconst error_load = await load_nearest_error_page(i, branch, errors);\n\t\tif (error_load) return get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: branch.slice(0, error_load.idx).concat(error_load.node),\n\t\t\terrors,\n\t\t\tstatus,\n\t\t\terror,\n\t\t\troute\n\t\t});\n\t\telse return await server_fallback(url, { id: route.id }, error, status);\n\t}\n\telse branch.push(void 0);\n\treturn get_navigation_result_from_branch({\n\t\turl,\n\t\tparams,\n\t\tbranch,\n\t\terrors,\n\t\tstatus: 200,\n\t\terror: null,\n\t\troute,\n\t\tform: invalidating ? void 0 : null\n\t});\n}\n/**\n* @param {number} i Start index to backtrack from\n* @param {Array<import('./types.js').BranchNode | undefined>} branch Branch to backtrack\n* @param {Array<import('types').CSRPageNodeLoader | undefined>} errors All error pages for this branch\n* @returns {Promise<{idx: number; node: import('./types.js').BranchNode} | undefined>}\n*/\nasync function load_nearest_error_page(i, branch, errors) {\n\twhile (i--) if (errors[i]) {\n\t\tlet j = i;\n\t\twhile (!branch[j]) j -= 1;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tidx: j + 1,\n\t\t\t\tnode: {\n\t\t\t\t\tnode: await errors[i](),\n\t\t\t\t\tloader: errors[i],\n\t\t\t\t\tdata: {},\n\t\t\t\t\tserver: null,\n\t\t\t\t\tuniversal: null\n\t\t\t\t}\n\t\t\t};\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t}\n}\n/**\n* @param {{\n* status: number;\n* error: App.Error;\n* url: URL;\n* route: { id: string | null }\n* }} opts\n* @returns {Promise<import('./types.js').NavigationFinished>}\n*/\nasync function load_root_error_page({ status, error, url, route }) {\n\t/** @type {Record<string, string>} */\n\tconst params = {};\n\t/** @type {import('types').ServerDataNode | null} */\n\tlet server_data_node = null;\n\tif (app.server_loads[0] === 0) try {\n\t\tconst server_data = await load_data(url, [true]);\n\t\tif (server_data.type !== \"data\" || server_data.nodes[0] && server_data.nodes[0].type !== \"data\") throw 0;\n\t\tserver_data_node = server_data.nodes[0] ?? null;\n\t} catch {\n\t\tif (url.origin !== origin || url.pathname !== location.pathname || hydrated) await native_navigation(url);\n\t}\n\ttry {\n\t\treturn get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: [await load_node({\n\t\t\t\tloader: default_layout_loader,\n\t\t\t\turl,\n\t\t\t\tparams,\n\t\t\t\troute,\n\t\t\t\tparent: () => Promise.resolve({}),\n\t\t\t\tserver_data_node: create_data_node(server_data_node)\n\t\t\t}), {\n\t\t\t\tnode: await default_error_loader(),\n\t\t\t\tloader: default_error_loader,\n\t\t\t\tuniversal: null,\n\t\t\t\tserver: null,\n\t\t\t\tdata: null\n\t\t\t}],\n\t\t\tstatus,\n\t\t\terror,\n\t\t\terrors: [],\n\t\t\troute: null\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof Redirect) return _goto(new URL(error.location, location.href), {}, 0);\n\t\tthrow error;\n\t}\n}\n/**\n* Resolve the relative rerouted URL for a client-side navigation\n* @param {URL} url\n* @returns {Promise<URL | undefined>}\n*/\nasync function get_rerouted_url(url) {\n\tconst href = url.href;\n\tif (reroute_cache.has(href)) return reroute_cache.get(href);\n\tlet rerouted;\n\ttry {\n\t\tconst promise = (async () => {\n\t\t\tlet rerouted = await app.hooks.reroute({\n\t\t\t\turl: new URL(url),\n\t\t\t\tfetch: async (input, init) => {\n\t\t\t\t\treturn resolve_fetch_url(input, init, url).promise;\n\t\t\t\t}\n\t\t\t}) ?? url;\n\t\t\tif (typeof rerouted === \"string\") {\n\t\t\t\tconst tmp = new URL(url);\n\t\t\t\tif (app.hash) tmp.hash = rerouted;\n\t\t\t\telse tmp.pathname = rerouted;\n\t\t\t\trerouted = tmp;\n\t\t\t}\n\t\t\treturn rerouted;\n\t\t})();\n\t\treroute_cache.set(href, promise);\n\t\trerouted = await promise;\n\t} catch (e) {\n\t\treroute_cache.delete(href);\n\t\treturn;\n\t}\n\treturn rerouted;\n}\n/**\n* Resolve the full info (which route, params, etc.) for a client-side navigation from the URL,\n* taking the reroute hook into account. If this isn't a client-side-navigation (or the URL is undefined),\n* returns undefined.\n* @param {URL | undefined} url\n* @param {boolean} invalidating\n* @returns {Promise<import('./types.js').NavigationIntent | undefined>}\n*/\nasync function get_navigation_intent(url, invalidating) {\n\tif (!url) return;\n\tif (is_external_url(url, base, app.hash)) return;\n\t{\n\t\tconst rerouted = await get_rerouted_url(url);\n\t\tif (!rerouted) return;\n\t\tconst path = get_url_path(rerouted);\n\t\tfor (const route of routes) {\n\t\t\tconst params = route.exec(path);\n\t\t\tif (params) return {\n\t\t\t\tid: get_page_key(url),\n\t\t\t\tinvalidating,\n\t\t\t\troute,\n\t\t\t\tparams: decode_params(params),\n\t\t\t\turl\n\t\t\t};\n\t\t}\n\t}\n}\n/** @param {URL} url */\nfunction get_url_path(url) {\n\treturn decode_pathname(app.hash ? url.hash.replace(/^#/, \"\").replace(/[?#].+/, \"\") : url.pathname.slice(base.length)) || \"/\";\n}\n/** @param {URL} url */\nfunction get_page_key(url) {\n\treturn (app.hash ? url.hash.replace(/^#/, \"\") : url.pathname) + url.search;\n}\n/**\n* @param {{\n* url: URL;\n* type: import('@sveltejs/kit').Navigation[\"type\"];\n* intent?: import('./types.js').NavigationIntent;\n* delta?: number;\n* event?: PopStateEvent | MouseEvent;\n* scroll?: { x: number, y: number };\n* }} opts\n*/\nfunction _before_navigate({ url, type, intent, delta, event, scroll }) {\n\tlet should_block = false;\n\tconst nav = create_navigation(current, intent, url, type, scroll ?? null);\n\tif (delta !== void 0) nav.navigation.delta = delta;\n\tif (event !== void 0) nav.navigation.event = event;\n\tconst cancellable = {\n\t\t...nav.navigation,\n\t\tcancel: () => {\n\t\t\tshould_block = true;\n\t\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation cancelled\"));\n\t\t}\n\t};\n\tif (!is_navigating) before_navigate_callbacks.forEach((fn) => fn(cancellable));\n\treturn should_block ? null : nav;\n}\n/**\n* @param {{\n* type: import('@sveltejs/kit').NavigationType;\n* url: URL;\n* popped?: {\n* state: Record<string, any>;\n* scroll: { x: number, y: number };\n* delta: number;\n* };\n* keepfocus?: boolean;\n* noscroll?: boolean;\n* replace_state?: boolean;\n* state?: Record<string, any>;\n* redirect_count?: number;\n* nav_token?: {};\n* accept?: () => void;\n* block?: () => void;\n* event?: Event\n* }} opts\n*/\nasync function navigate({ type, url, popped, keepfocus, noscroll, replace_state, state = {}, redirect_count = 0, nav_token = {}, accept = noop, block = noop, event }) {\n\tconst prev_token = token;\n\ttoken = nav_token;\n\tconst intent = await get_navigation_intent(url, false);\n\tconst nav = type === \"enter\" ? create_navigation(current, intent, url, type) : _before_navigate({\n\t\turl,\n\t\ttype,\n\t\tdelta: popped?.delta,\n\t\tintent,\n\t\tscroll: popped?.scroll,\n\t\tevent\n\t});\n\tif (!nav) {\n\t\tblock();\n\t\tif (token === nav_token) token = prev_token;\n\t\treturn;\n\t}\n\tconst previous_history_index = current_history_index;\n\tconst previous_navigation_index = current_navigation_index;\n\taccept();\n\tis_navigating = true;\n\tif (started && nav.navigation.type !== \"enter\") stores.navigating.set(navigating.current = nav.navigation);\n\tlet navigation_result = intent && await load_route(intent);\n\tif (!navigation_result) if (is_external_url(url, base, app.hash)) return await native_navigation(url, replace_state);\n\telse navigation_result = await server_fallback(url, { id: null }, await handle_error(new SvelteKitError(404, \"Not Found\", `Not found: ${url.pathname}`), {\n\t\turl,\n\t\tparams: {},\n\t\troute: { id: null }\n\t}), 404, replace_state);\n\turl = intent?.url || url;\n\tif (token !== nav_token) {\n\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation aborted\"));\n\t\treturn false;\n\t}\n\tif (navigation_result.type === \"redirect\") {\n\t\tif (redirect_count < 20) {\n\t\t\tawait navigate({\n\t\t\t\ttype,\n\t\t\t\turl: new URL(navigation_result.location, url),\n\t\t\t\tpopped,\n\t\t\t\tkeepfocus,\n\t\t\t\tnoscroll,\n\t\t\t\treplace_state,\n\t\t\t\tstate,\n\t\t\t\tredirect_count: redirect_count + 1,\n\t\t\t\tnav_token\n\t\t\t});\n\t\t\tnav.fulfil(void 0);\n\t\t\treturn;\n\t\t}\n\t\tnavigation_result = await load_root_error_page({\n\t\t\tstatus: 500,\n\t\t\terror: await handle_error(/* @__PURE__ */ new Error(\"Redirect loop\"), {\n\t\t\t\turl,\n\t\t\t\tparams: {},\n\t\t\t\troute: { id: null }\n\t\t\t}),\n\t\t\turl,\n\t\t\troute: { id: null }\n\t\t});\n\t} else if (navigation_result.props.page.status >= 400) {\n\t\tif (await stores.updated.check()) {\n\t\t\tawait update_service_worker();\n\t\t\tawait native_navigation(url, replace_state);\n\t\t}\n\t}\n\treset_invalidation();\n\tupdate_scroll_positions(previous_history_index);\n\tcapture_snapshot(previous_navigation_index);\n\tif (navigation_result.props.page.url.pathname !== url.pathname) url.pathname = navigation_result.props.page.url.pathname;\n\tstate = popped ? popped.state : state;\n\tif (!popped) {\n\t\tconst change = replace_state ? 0 : 1;\n\t\tconst entry = {\n\t\t\t[HISTORY_INDEX]: current_history_index += change,\n\t\t\t[NAVIGATION_INDEX]: current_navigation_index += change,\n\t\t\t[STATES_KEY]: state\n\t\t};\n\t\t(replace_state ? history.replaceState : history.pushState).call(history, entry, \"\", url);\n\t\tif (!replace_state) clear_onward_history(current_history_index, current_navigation_index);\n\t}\n\tconst load_cache_fork = intent && load_cache?.id === intent.id ? load_cache.fork : null;\n\tif (load_cache?.fork && !load_cache_fork) discard_load_cache();\n\tload_cache = null;\n\tnavigation_result.props.page.state = state;\n\t/**\n\t* @type {Promise<void> | undefined}\n\t*/\n\tlet commit_promise;\n\tif (started) {\n\t\tconst after_navigate = (await Promise.all(Array.from(on_navigate_callbacks, (fn) => fn(nav.navigation)))).filter(\n\t\t\t/** @returns {value is () => void} */\n\t\t\t(value) => typeof value === \"function\"\n\t\t);\n\t\tif (after_navigate.length > 0) {\n\t\t\tfunction cleanup() {\n\t\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\t\tafter_navigate_callbacks.delete(fn);\n\t\t\t\t});\n\t\t\t}\n\t\t\tafter_navigate.push(cleanup);\n\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\tafter_navigate_callbacks.add(fn);\n\t\t\t});\n\t\t}\n\t\tconst target = nav.navigation.to;\n\t\tcurrent = {\n\t\t\t...navigation_result.state,\n\t\t\tnav: {\n\t\t\t\tparams: target.params,\n\t\t\t\troute: target.route,\n\t\t\t\turl: target.url\n\t\t\t}\n\t\t};\n\t\tif (navigation_result.props.page) navigation_result.props.page.url = url;\n\t\tconst fork = load_cache_fork && await load_cache_fork;\n\t\tif (fork) commit_promise = fork.commit();\n\t\telse {\n\t\t\trendering_error = null;\n\t\t\troot.$set(navigation_result.props);\n\t\t\tif (rendering_error) Object.assign(navigation_result.props.page, rendering_error);\n\t\t\tupdate(navigation_result.props.page);\n\t\t\tcommit_promise = settled?.();\n\t\t}\n\t} else await initialize(navigation_result, target, false);\n\tconst { activeElement } = document;\n\tawait commit_promise;\n\tawait tick$1();\n\tawait tick$1();\n\tif (token !== nav_token) {\n\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation aborted\"));\n\t\treturn false;\n\t}\n\tif (navigation_result.props.page && rendering_error) Object.assign(navigation_result.props.page, rendering_error);\n\t/** @type {Element | null | ''} */\n\tlet deep_linked = null;\n\tif (autoscroll) {\n\t\tconst scroll = popped ? popped.scroll : noscroll ? scroll_state() : null;\n\t\tif (scroll) scrollTo(scroll.x, scroll.y);\n\t\telse if (deep_linked = url.hash && document.getElementById(get_id(url))) deep_linked.scrollIntoView();\n\t\telse scrollTo(0, 0);\n\t}\n\tconst changed_focus = document.activeElement !== activeElement && document.activeElement !== document.body;\n\tif (!keepfocus && !changed_focus) reset_focus(url, !deep_linked);\n\tautoscroll = true;\n\tis_navigating = false;\n\tif (type === \"popstate\") restore_snapshot(current_navigation_index);\n\tnav.fulfil(void 0);\n\tif (nav.navigation.to) nav.navigation.to.scroll = scroll_state();\n\tafter_navigate_callbacks.forEach((fn) => fn(nav.navigation));\n\tstores.navigating.set(navigating.current = null);\n}\n/**\n* Does a full page reload if it wouldn't result in an endless loop in the SPA case\n* @param {URL} url\n* @param {{ id: string | null }} route\n* @param {App.Error} error\n* @param {number} status\n* @param {boolean} [replace_state]\n* @returns {Promise<import('./types.js').NavigationFinished>}\n*/\nasync function server_fallback(url, route, error, status, replace_state) {\n\tif (url.origin === origin && url.pathname === location.pathname && !hydrated) return await load_root_error_page({\n\t\tstatus,\n\t\terror,\n\t\turl,\n\t\troute\n\t});\n\treturn await native_navigation(url, replace_state);\n}\n/**\n* @param {unknown} error\n* @param {import('@sveltejs/kit').NavigationEvent} event\n* @returns {import('types').MaybePromise<App.Error>}\n*/\nfunction handle_error(error, event) {\n\tif (error instanceof HttpError) return error.body;\n\tconst status = get_status(error);\n\tconst message = get_message(error);\n\treturn app.hooks.handleError({\n\t\terror,\n\t\tevent,\n\t\tstatus,\n\t\tmessage\n\t}) ?? { message };\n}\n/**\n* @template {Function} T\n* @param {Set<T>} callbacks\n* @param {T} callback\n*/\nfunction add_navigation_callback(callbacks, callback) {\n\tonMount(() => {\n\t\tcallbacks.add(callback);\n\t\treturn () => {\n\t\t\tcallbacks.delete(callback);\n\t\t};\n\t});\n}\n/**\n* A lifecycle function that runs the supplied `callback` when the current component mounts, and also whenever we navigate to a URL.\n*\n* `afterNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n* @param {(navigation: import('@sveltejs/kit').AfterNavigate) => void} callback\n* @returns {void}\n*/\nfunction afterNavigate(callback) {\n\tadd_navigation_callback(after_navigate_callbacks, callback);\n}\n/**\n* A navigation interceptor that triggers before we navigate to a URL, whether by clicking a link, calling `goto(...)`, or using the browser back/forward controls.\n*\n* Calling `cancel()` will prevent the navigation from completing. If `navigation.type === 'leave'` — meaning the user is navigating away from the app (or closing the tab) — calling `cancel` will trigger the native browser unload confirmation dialog. In this case, the navigation may or may not be cancelled depending on the user's response.\n*\n* When a navigation isn't to a SvelteKit-owned route (and therefore controlled by SvelteKit's client-side router), `navigation.to.route.id` will be `null`.\n*\n* If the navigation will (if not cancelled) cause the document to unload — in other words `'leave'` navigations and `'link'` navigations where `navigation.to.route === null` — `navigation.willUnload` is `true`.\n*\n* `beforeNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n* @param {(navigation: import('@sveltejs/kit').BeforeNavigate) => void} callback\n* @returns {void}\n*/\nfunction beforeNavigate(callback) {\n\tadd_navigation_callback(before_navigate_callbacks, callback);\n}\n/**\n* Allows you to navigate programmatically to a given route, with options such as keeping the current element focused.\n* Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `url`.\n*\n* For external URLs, use `window.location = url` instead of calling `goto(url)`.\n*\n* @param {string | URL} url Where to navigate to. Note that if you've set [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths) and the URL is root-relative, you need to prepend the base path if you want to navigate within the app.\n* @param {Object} [opts] Options related to the navigation\n* @param {boolean} [opts.replaceState] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n* @param {boolean} [opts.noScroll] If `true`, the browser will maintain its scroll position rather than scrolling to the top of the page after navigation\n* @param {boolean} [opts.keepFocus] If `true`, the currently focused element will retain focus after navigation. Otherwise, focus will be reset to the body\n* @param {boolean} [opts.invalidateAll] If `true`, all `load` functions of the page will be rerun. See https://svelte.dev/docs/kit/load#rerunning-load-functions for more info on invalidation.\n* @param {Array<string | URL | ((url: URL) => boolean)>} [opts.invalidate] Causes any load functions to re-run if they depend on one of the urls\n* @param {App.PageState} [opts.state] An optional object that will be available as `page.state`\n* @returns {Promise<void>}\n*/\nfunction goto(url, opts = {}) {\n\tthrow new Error(\"Cannot call goto(...) on the server\");\n}\n/**\n* @param {string | URL | ((url: URL) => boolean)} resource The invalidated URL\n*/\nfunction push_invalidated(resource) {\n\tif (typeof resource === \"function\") invalidated.push(resource);\n\telse {\n\t\tconst { href } = new URL(resource, location.href);\n\t\tinvalidated.push((url) => url.href === href);\n\t}\n}\n/**\n* Causes all `load` and `query` functions belonging to the currently active page to re-run. Returns a `Promise` that resolves when the page is subsequently updated.\n* @returns {Promise<void>}\n*/\nfunction invalidateAll() {\n\tthrow new Error(\"Cannot call invalidateAll() on the server\");\n}\n/**\n* This action updates the `form` property of the current page with the given data and updates `page.status`.\n* In case of an error, it redirects to the nearest error page.\n* @template {Record<string, unknown> | undefined} Success\n* @template {Record<string, unknown> | undefined} Failure\n* @param {import('@sveltejs/kit').ActionResult<Success, Failure>} result\n* @returns {Promise<void>}\n*/\nasync function applyAction(result) {\n\tthrow new Error(\"Cannot call applyAction(...) on the server\");\n}\n/**\n* @param {URL} url\n* @param {boolean[]} invalid\n* @returns {Promise<import('types').ServerNodesResponse | import('types').ServerRedirectNode>}\n*/\nasync function load_data(url, invalid) {\n\tconst data_url = new URL(url);\n\tdata_url.pathname = add_data_suffix(url.pathname);\n\tif (url.pathname.endsWith(\"/\")) data_url.searchParams.append(TRAILING_SLASH_PARAM, \"1\");\n\tdata_url.searchParams.append(INVALIDATED_PARAM, invalid.map((i) => i ? \"1\" : \"0\").join(\"\"));\n\tconst res = await (0, window.fetch)(data_url.href, {});\n\tif (!res.ok) {\n\t\t/** @type {string | undefined} */\n\t\tlet message;\n\t\tif (res.headers.get(\"content-type\")?.includes(\"application/json\")) message = await res.json();\n\t\telse if (res.status === 404) message = \"Not Found\";\n\t\telse if (res.status === 500) message = \"Internal Error\";\n\t\tthrow new HttpError(res.status, message);\n\t}\n\treturn new Promise(async (resolve) => {\n\t\t/**\n\t\t* Map of deferred promises that will be resolved by a subsequent chunk of data\n\t\t* @type {Map<string, import('types').Deferred>}\n\t\t*/\n\t\tconst deferreds = /* @__PURE__ */ new Map();\n\t\tconst reader = res.body.getReader();\n\t\t/**\n\t\t* @param {any} data\n\t\t*/\n\t\tfunction deserialize(data) {\n\t\t\treturn unflatten(data, {\n\t\t\t\t...app.decoders,\n\t\t\t\tPromise: (id) => {\n\t\t\t\t\treturn new Promise((fulfil, reject) => {\n\t\t\t\t\t\tdeferreds.set(id, {\n\t\t\t\t\t\t\tfulfil,\n\t\t\t\t\t\t\treject\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfor await (const node of read_ndjson(reader)) {\n\t\t\tif (node.type === \"redirect\") return resolve(node);\n\t\t\tif (node.type === \"data\") {\n\t\t\t\tnode.nodes?.forEach((node) => {\n\t\t\t\t\tif (node?.type === \"data\") {\n\t\t\t\t\t\tnode.uses = deserialize_uses(node.uses);\n\t\t\t\t\t\tnode.data = deserialize(node.data);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresolve(node);\n\t\t\t} else if (node.type === \"chunk\") {\n\t\t\t\tconst { id, data, error } = node;\n\t\t\t\tconst deferred = deferreds.get(id);\n\t\t\t\tdeferreds.delete(id);\n\t\t\t\tif (error) deferred.reject(deserialize(error));\n\t\t\t\telse deferred.fulfil(deserialize(data));\n\t\t\t}\n\t\t}\n\t});\n}\n/**\n* @param {any} uses\n* @return {import('types').Uses}\n*/\nfunction deserialize_uses(uses) {\n\treturn {\n\t\tdependencies: new Set(uses?.dependencies ?? []),\n\t\tparams: new Set(uses?.params ?? []),\n\t\tparent: !!uses?.parent,\n\t\troute: !!uses?.route,\n\t\turl: !!uses?.url,\n\t\tsearch_params: new Set(uses?.search_params ?? [])\n\t};\n}\n/**\n* @param {URL} url\n* @param {boolean} [scroll]\n*/\nfunction reset_focus(url, scroll = true) {\n\tconst autofocus = document.querySelector(\"[autofocus]\");\n\tif (autofocus) autofocus.focus();\n\telse {\n\t\tconst id = get_id(url);\n\t\tif (id && document.getElementById(id)) {\n\t\t\tconst { x, y } = scroll_state();\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst history_state = history.state;\n\t\t\t\tlocation.replace(new URL(`#${id}`, location.href));\n\t\t\t\thistory.replaceState(history_state, \"\", url);\n\t\t\t\tif (scroll) scrollTo(x, y);\n\t\t\t});\n\t\t} else {\n\t\t\tconst root = document.body;\n\t\t\tconst tabindex = root.getAttribute(\"tabindex\");\n\t\t\troot.tabIndex = -1;\n\t\t\troot.focus({\n\t\t\t\tpreventScroll: true,\n\t\t\t\tfocusVisible: false\n\t\t\t});\n\t\t\tif (tabindex !== null) root.setAttribute(\"tabindex\", tabindex);\n\t\t\telse root.removeAttribute(\"tabindex\");\n\t\t}\n\t\tconst selection = getSelection();\n\t\tif (selection && selection.type !== \"None\") {\n\t\t\t/** @type {Range[]} */\n\t\t\tconst ranges = [];\n\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) ranges.push(selection.getRangeAt(i));\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (selection.rangeCount !== ranges.length) return;\n\t\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) {\n\t\t\t\t\tconst a = ranges[i];\n\t\t\t\t\tconst b = selection.getRangeAt(i);\n\t\t\t\t\tif (a.commonAncestorContainer !== b.commonAncestorContainer || a.startContainer !== b.startContainer || a.endContainer !== b.endContainer || a.startOffset !== b.startOffset || a.endOffset !== b.endOffset) return;\n\t\t\t\t}\n\t\t\t\tselection.removeAllRanges();\n\t\t\t});\n\t\t}\n\t}\n}\n/**\n* @template {import('@sveltejs/kit').NavigationType} T\n* @param {import('./types.js').NavigationState} current\n* @param {import('./types.js').NavigationIntent | undefined} intent\n* @param {URL | null} url\n* @param {T} type\n* @param {{ x: number, y: number } | null} [target_scroll] The scroll position for the target (for popstate navigations)\n*/\nfunction create_navigation(current, intent, url, type, target_scroll = null) {\n\t/** @type {(value: any) => void} */\n\tlet fulfil;\n\t/** @type {(error: any) => void} */\n\tlet reject;\n\tconst complete = new Promise((f, r) => {\n\t\tfulfil = f;\n\t\treject = r;\n\t});\n\tcomplete.catch(noop);\n\treturn {\n\t\tnavigation: {\n\t\t\tfrom: {\n\t\t\t\tparams: current.params,\n\t\t\t\troute: { id: current.route?.id ?? null },\n\t\t\t\turl: current.url,\n\t\t\t\tscroll: scroll_state()\n\t\t\t},\n\t\t\tto: url && {\n\t\t\t\tparams: intent?.params ?? null,\n\t\t\t\troute: { id: intent?.route?.id ?? null },\n\t\t\t\turl,\n\t\t\t\tscroll: target_scroll\n\t\t\t},\n\t\t\twillUnload: !intent,\n\t\t\ttype,\n\t\t\tcomplete\n\t\t},\n\t\tfulfil,\n\t\treject\n\t};\n}\n/**\n* TODO: remove this in 3.0 when the page store is also removed\n*\n* We need to assign a new page object so that subscribers are correctly notified.\n* However, spreading `{ ...page }` returns an empty object so we manually\n* assign to each property instead.\n*\n* @param {import('@sveltejs/kit').Page} page\n*/\nfunction clone_page(page) {\n\treturn {\n\t\tdata: page.data,\n\t\terror: page.error,\n\t\tform: page.form,\n\t\tparams: page.params,\n\t\troute: page.route,\n\t\tstate: page.state,\n\t\tstatus: page.status,\n\t\turl: page.url\n\t};\n}\n/**\n* @param {URL} url\n* @returns {string}\n*/\nfunction get_id(url) {\n\tlet id;\n\tif (app.hash) {\n\t\tconst [, , second] = url.hash.split(\"#\", 3);\n\t\tid = second ?? \"\";\n\t} else id = url.hash.slice(1);\n\treturn decodeURIComponent(id);\n}\n//#endregion\nexport { goto as a, navigating as c, beforeNavigate as i, page as l, app as n, invalidateAll as o, applyAction as r, stores as s, afterNavigate as t, updated as u };\n"],"names":["noop$1"],"mappings":";;;AA4FA,IAAI,SAAS,GAAGA,IAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAACA,IAAM,CAAC,QAAQ,EAAE,CAAC;AACnG,IAAI,eAAe,GAAG,IAAI;AAC1B,IAAI,SAAS,EAAE;AACf,EAAQ;AACR,EAAE,IAAI,EAAE,EAAE;AACV,EAAE,IAAI,EAAE,IAAI;AACZ,EAAE,KAAK,EAAE,IAAI;AACb,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;AACrB,EAAE,KAAK,EAAE,EAAE;AACX,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,eAAe;AAC9B,GAAE;AAGF;AAkIA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,oBAAoB;AA8G5C;AACA,IAAI,wBAAwB,mBAAmB,IAAI,GAAG,EAAE;AA43BxD;AACA;AACA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE;AACtD,CAAC,OAAO,CAAC,MAAM;AACf,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzB,EAAE,OAAO,MAAM;AACf,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,EAAE,CAAC;AACH,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,QAAQ,EAAE;AACjC,CAAC,uBAAuB,CAAC,wBAAwB,EAAE,QAAQ,CAAC;AAC5D;AA8CA;AACA;AACA;AACA;AACA,SAAS,aAAa,GAAG;AACzB,CAAC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,WAAW,CAAC,MAAM,EAAE;AACnC,CAAC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;AAC9D;;;;"}
1
+ {"version":3,"file":"client-_87vxA9R.js","sources":["../../../.svelte-kit/adapter-node/chunks/client.js"],"sourcesContent":["import { S as noop, f as get_message, h as base64_decode, n as TRAILING_SLASH_PARAM, p as get_status, r as create_remote_key, t as INVALIDATED_PARAM, x as unflatten } from \"./shared.js\";\nimport { a as index_server_exports, c as tick$1, h as base, s as settled } from \"./environment.js\";\nimport { Z as noop$1, k as writable } from \"./dev.js\";\nimport { S as compact, f as make_trackable, g as add_data_suffix, h as noop_span, l as decode_params, p as normalize_path, s as hash, u as decode_pathname } from \"./exports.js\";\nimport \"./internal.js\";\nimport { HttpError, Redirect, SvelteKitError } from \"@sveltejs/kit/internal\";\nimport \"@sveltejs/kit/internal/server\";\nvar STATES_KEY = \"sveltekit:states\";\nvar HISTORY_INDEX = \"sveltekit:history\";\nvar NAVIGATION_INDEX = \"sveltekit:navigation\";\nvar PRELOAD_PRIORITIES = {\n\ttap: 1,\n\thover: 2,\n\tviewport: 3,\n\teager: 4,\n\toff: -1,\n\tfalse: -1\n};\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/utils.js\nvar origin = \"\";\n/** @param {string | URL} url */\nfunction resolve_url(url) {\n\tif (url instanceof URL) return url;\n\tlet baseURI = document.baseURI;\n\tif (!baseURI) {\n\t\tconst baseTags = document.getElementsByTagName(\"base\");\n\t\tbaseURI = baseTags.length ? baseTags[0].href : document.URL;\n\t}\n\treturn new URL(url, baseURI);\n}\nfunction scroll_state() {\n\treturn {\n\t\tx: pageXOffset,\n\t\ty: pageYOffset\n\t};\n}\n({ ...PRELOAD_PRIORITIES }), PRELOAD_PRIORITIES.hover;\n/** @param {any} value */\nfunction notifiable_store(value) {\n\tconst store = writable(value);\n\tlet ready = true;\n\tfunction notify() {\n\t\tready = true;\n\t\tstore.update((val) => val);\n\t}\n\t/** @param {any} new_value */\n\tfunction set(new_value) {\n\t\tready = false;\n\t\tstore.set(new_value);\n\t}\n\t/** @param {(value: any) => void} run */\n\tfunction subscribe(run) {\n\t\t/** @type {any} */\n\t\tlet old_value;\n\t\treturn store.subscribe((new_value) => {\n\t\t\tif (old_value === void 0 || ready && new_value !== old_value) run(old_value = new_value);\n\t\t});\n\t}\n\treturn {\n\t\tnotify,\n\t\tset,\n\t\tsubscribe\n\t};\n}\nvar updated_listener = { v: noop };\nfunction create_updated_store() {\n\tconst { set, subscribe } = writable(false);\n\treturn {\n\t\tsubscribe,\n\t\tcheck: async () => false\n\t};\n}\n/**\n* Is external if\n* - origin different\n* - path doesn't start with base\n* - uses hash router and pathname is more than base\n* @param {URL} url\n* @param {string} base\n* @param {boolean} hash_routing\n*/\nfunction is_external_url(url, base, hash_routing) {\n\tif (url.origin !== origin || !url.pathname.startsWith(base)) return true;\n\tif (hash_routing) return url.pathname !== location.pathname;\n\treturn false;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/state.svelte.js\nvar page;\nvar navigating;\nvar updated;\nvar is_legacy = noop$1.toString().includes(\"$$\") || /function \\w+\\(\\) \\{\\}/.test(noop$1.toString());\nvar placeholder_url = \"a:\";\nif (is_legacy) {\n\tpage = {\n\t\tdata: {},\n\t\tform: null,\n\t\terror: null,\n\t\tparams: {},\n\t\troute: { id: null },\n\t\tstate: {},\n\t\tstatus: -1,\n\t\turl: new URL(placeholder_url)\n\t};\n\tnavigating = { current: null };\n\tupdated = { current: false };\n} else {\n\tpage = new class Page {\n\t\tdata = {};\n\t\tform = null;\n\t\terror = null;\n\t\tparams = {};\n\t\troute = { id: null };\n\t\tstate = {};\n\t\tstatus = -1;\n\t\turl = new URL(placeholder_url);\n\t}();\n\tnavigating = new class Navigating {\n\t\tcurrent = null;\n\t}();\n\tupdated = new class Updated {\n\t\tcurrent = false;\n\t}();\n\tupdated_listener.v = () => updated.current = true;\n}\n/**\n* @param {import('@sveltejs/kit').Page} new_page\n*/\nfunction update(new_page) {\n\tObject.assign(page, new_page);\n}\nvar cache = /* @__PURE__ */ new Map();\n/**\n* Should be called on the initial run of load functions that hydrate the page.\n* Saves any requests with cache-control max-age to the cache.\n* @param {URL | string} resource\n* @param {RequestInit} [opts]\n*/\nfunction initial_fetch(resource, opts) {\n\tconst selector = build_selector(resource, opts);\n\tconst script = document.querySelector(selector);\n\tif (script?.textContent) {\n\t\tscript.remove();\n\t\tlet { body, ...init } = JSON.parse(script.textContent);\n\t\tconst ttl = script.getAttribute(\"data-ttl\");\n\t\tif (ttl) cache.set(selector, {\n\t\t\tbody,\n\t\t\tinit,\n\t\t\tttl: 1e3 * Number(ttl)\n\t\t});\n\t\tif (script.getAttribute(\"data-b64\") !== null) body = base64_decode(body);\n\t\treturn Promise.resolve(new Response(body, init));\n\t}\n\treturn window.fetch(resource, opts);\n}\n/**\n* Tries to get the response from the cache, if max-age allows it, else does a fetch.\n* @param {URL | string} resource\n* @param {string} resolved\n* @param {RequestInit} [opts]\n*/\nfunction subsequent_fetch(resource, resolved, opts) {\n\tif (cache.size > 0) {\n\t\tconst selector = build_selector(resource, opts);\n\t\tconst cached = cache.get(selector);\n\t\tif (cached) {\n\t\t\tif (performance.now() < cached.ttl && [\n\t\t\t\t\"default\",\n\t\t\t\t\"force-cache\",\n\t\t\t\t\"only-if-cached\",\n\t\t\t\tvoid 0\n\t\t\t].includes(opts?.cache)) return new Response(cached.body, cached.init);\n\t\t\tcache.delete(selector);\n\t\t}\n\t}\n\treturn window.fetch(resolved, opts);\n}\n/**\n* Build the cache key for a given request\n* @param {URL | RequestInfo} resource\n* @param {RequestInit} [opts]\n*/\nfunction build_selector(resource, opts) {\n\tlet selector = `script[data-sveltekit-fetched][data-url=${JSON.stringify(resource instanceof Request ? resource.url : resource)}]`;\n\tif (opts?.headers || opts?.body) {\n\t\t/** @type {import('types').StrictBody[]} */\n\t\tconst values = [];\n\t\tif (opts.headers) values.push([...new Headers(opts.headers)].join(\",\"));\n\t\tif (opts.body && (typeof opts.body === \"string\" || ArrayBuffer.isView(opts.body))) values.push(opts.body);\n\t\tselector += `[data-hash=\"${hash(...values)}\"]`;\n\t}\n\treturn selector;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/session-storage.js\n/**\n* Read a value from `sessionStorage`\n* @param {string} key\n* @param {(value: string) => any} parse\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction get(key, parse = JSON.parse) {\n\ttry {\n\t\treturn parse(sessionStorage[key]);\n\t} catch {}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/ndjson.js\n/**\n* Yields parsed JSON objects from a ReadableStream of newline-delimited JSON.\n* Each yielded value is the raw `JSON.parse`'d object — callers handle deserialization.\n* @param {ReadableStreamDefaultReader<Uint8Array>} reader\n*/\nasync function* read_ndjson(reader) {\n\tlet done = false;\n\tlet buffer = \"\";\n\tconst decoder = new TextDecoder();\n\twhile (true) {\n\t\tlet split = buffer.indexOf(\"\\n\");\n\t\twhile (split !== -1) {\n\t\t\tconst line = buffer.slice(0, split).trim();\n\t\t\tbuffer = buffer.slice(split + 1);\n\t\t\tif (line) yield JSON.parse(line);\n\t\t\tsplit = buffer.indexOf(\"\\n\");\n\t\t}\n\t\tif (done) {\n\t\t\tconst line = buffer.trim();\n\t\t\tif (line) yield JSON.parse(line);\n\t\t\treturn;\n\t\t}\n\t\tconst chunk = await reader.read();\n\t\tdone = chunk.done;\n\t\tif (chunk.value) buffer += decoder.decode(chunk.value, { stream: true });\n\t\tif (done) buffer += decoder.decode();\n\t}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.61.1_@sveltejs+vite-plugin-svelte@7.1.2_svelte@5.55.9_@typescript-eslin_692b2477997906027053802989c8d7b8/node_modules/@sveltejs/kit/src/runtime/client/client.js\n/** @import { CacheEntry } from './remote-functions/cache.svelte.js' */\n/** @import { Query } from './remote-functions/query/instance.svelte.js' */\n/** @import { LiveQuery } from './remote-functions/query-live/instance.svelte.js' */\nvar { onMount, tick } = index_server_exports;\n/**\n* Set via transformError, reset and read at the end of navigate.\n* Necessary because a navigation might succeed loading but during rendering\n* an error occurs, at which point the navigation result needs to be overridden with the error result.\n* TODO this is all very hacky, rethink for SvelteKit 3 where we can assume Svelte 5 and do an overhaul of client.js\n* @type {{ error: App.Error, status: number } | null}\n*/\nvar rendering_error = null;\n/**\n* history index -> { x, y }\n* @type {Record<number, { x: number; y: number }>}\n*/\nvar scroll_positions = /* @__PURE__ */ get(\"sveltekit:scroll\") ?? {};\n/**\n* navigation index -> any\n* @type {Record<string, any[]>}\n*/\nvar snapshots = /* @__PURE__ */ get(\"sveltekit:snapshot\") ?? {};\nvar stores = {\n\turl: /* @__PURE__ */ notifiable_store({}),\n\tpage: /* @__PURE__ */ notifiable_store({}),\n\tnavigating: /* @__PURE__ */ writable(null),\n\tupdated: /* @__PURE__ */ create_updated_store()\n};\n/** @param {number} index */\nfunction update_scroll_positions(index) {\n\tscroll_positions[index] = scroll_state();\n}\n/**\n* @param {number} current_history_index\n* @param {number} current_navigation_index\n*/\nfunction clear_onward_history(current_history_index, current_navigation_index) {\n\tlet i = current_history_index + 1;\n\twhile (scroll_positions[i]) {\n\t\tdelete scroll_positions[i];\n\t\ti += 1;\n\t}\n\ti = current_navigation_index + 1;\n\twhile (snapshots[i]) {\n\t\tdelete snapshots[i];\n\t\ti += 1;\n\t}\n}\n/**\n* Loads `href` the old-fashioned way, with a full page reload.\n* Returns a `Promise` that never resolves (to prevent any\n* subsequent work, e.g. history manipulation, from happening)\n* @param {URL} url\n* @param {boolean} [replace] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n*/\nfunction native_navigation(url, replace = false) {\n\tif (replace) location.replace(url.href);\n\telse location.href = url.href;\n\treturn new Promise(noop);\n}\n/**\n* Checks whether a service worker is registered, and if it is,\n* tries to update it.\n*/\nasync function update_service_worker() {\n\tif (\"serviceWorker\" in navigator) {\n\t\tconst registration = await navigator.serviceWorker.getRegistration(base || \"/\");\n\t\tif (registration) await registration.update();\n\t}\n}\n/** @type {import('types').CSRRoute[]} All routes of the app. Only available when kit.router.resolution=client */\nvar routes;\n/** @type {import('types').CSRPageNodeLoader} */\nvar default_layout_loader;\n/** @type {import('types').CSRPageNodeLoader} */\nvar default_error_loader;\n/** @type {HTMLElement} */\nvar target;\n/** @type {import('./types.js').SvelteKitApp} */\nvar app;\n/** @type {Array<((url: URL) => boolean)>} */\nvar invalidated = [];\n/**\n* An array of the `+layout.svelte` and `+page.svelte` component instances\n* that currently live on the page — used for capturing and restoring snapshots.\n* It's updated/manipulated through `bind:this` in `Root.svelte`.\n* @type {import('svelte').SvelteComponent[]}\n*/\nvar components = [];\n/** @type {{id: string, token: {}, promise: Promise<import('./types.js').NavigationResult>, fork: Promise<import('svelte').Fork | null> | null} | null} */\nvar load_cache = null;\nfunction discard_load_cache() {\n\tload_cache?.fork?.then((f) => f?.discard());\n\tload_cache = null;\n}\n/**\n* @type {Map<string, Promise<URL>>}\n* Cache for client-side rerouting, since it could contain async calls which we want to\n* avoid running multiple times which would slow down navigations (e.g. else preloading\n* wouldn't help because on navigation it would be called again). Since `reroute` should be\n* a pure function (i.e. always return the same) value it's safe to cache across navigations.\n* The server reroute calls don't need to be cached because they are called using `import(...)`\n* which is cached per the JS spec.\n*/\nvar reroute_cache = /* @__PURE__ */ new Map();\n/**\n* Note on before_navigate_callbacks, on_navigate_callbacks and after_navigate_callbacks:\n* do not re-assign as some closures keep references to these Sets\n*/\n/** @type {Set<(navigation: import('@sveltejs/kit').BeforeNavigate) => void>} */\nvar before_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {Set<(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<(() => void) | void>>} */\nvar on_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {Set<(navigation: import('@sveltejs/kit').AfterNavigate) => void>} */\nvar after_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {import('./types.js').NavigationState & { nav: import('@sveltejs/kit').NavigationEvent }} */\nvar current = {\n\tbranch: [],\n\terror: null,\n\turl: null,\n\tnav: null\n};\n/** this being true means we SSR'd */\nvar hydrated = false;\nvar started = false;\nvar autoscroll = true;\nvar is_navigating = false;\nvar force_invalidation = false;\n/** @type {import('svelte').SvelteComponent} */\nvar root;\n/** @type {number} keeping track of the history index in order to prevent popstate navigation events if needed */\nvar current_history_index;\n/** @type {number} */\nvar current_navigation_index;\n/** @type {{}} */\nvar token;\n/**\n* A set of tokens which are associated to current preloads.\n* If a preload becomes a real navigation, it's removed from the set.\n* If a preload token is in the set and the preload errors, the error\n* handling logic (for example reloading) is skipped.\n*/\nvar preload_tokens = /* @__PURE__ */ new Set();\n/**\n* @type {Map<string, Map<string, CacheEntry<Query<any>>>>}\n* A map of query id -> payload -> query internals for all active queries.\n*/\nvar query_map = /* @__PURE__ */ new Map();\n/**\n* @type {Map<string, Map<string, CacheEntry<LiveQuery<any>>>>}\n* A map of id -> payload -> live query internals for all active queries.\n*/\nvar live_query_map = /* @__PURE__ */ new Map();\nfunction reset_invalidation() {\n\tinvalidated.length = 0;\n\tforce_invalidation = false;\n}\n/** @param {number} index */\nfunction capture_snapshot(index) {\n\tif (components.some((c) => c?.snapshot)) snapshots[index] = components.map((c) => c?.snapshot?.capture());\n}\n/** @param {number} index */\nfunction restore_snapshot(index) {\n\tsnapshots[index]?.forEach((value, i) => {\n\t\tcomponents[i]?.snapshot?.restore(value);\n\t});\n}\n/**\n* @param {string | URL} url\n* @param {{ replaceState?: boolean; noScroll?: boolean; keepFocus?: boolean; invalidateAll?: boolean; invalidate?: Array<string | URL | ((url: URL) => boolean)>; state?: Record<string, any> }} options\n* @param {number} redirect_count\n* @param {{}} [nav_token]\n*/\nasync function _goto(url, options, redirect_count, nav_token) {\n\t/** @type {Set<string>} */\n\tlet query_keys;\n\t/** @type {Set<string>} */\n\tlet live_query_keys;\n\tif (options.invalidateAll) discard_load_cache();\n\tawait navigate({\n\t\ttype: \"goto\",\n\t\turl: resolve_url(url),\n\t\tkeepfocus: options.keepFocus,\n\t\tnoscroll: options.noScroll,\n\t\treplace_state: options.replaceState,\n\t\tstate: options.state,\n\t\tredirect_count,\n\t\tnav_token,\n\t\taccept: () => {\n\t\t\tif (options.invalidateAll) {\n\t\t\t\tforce_invalidation = true;\n\t\t\t\tquery_keys = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const [id, entries] of query_map) for (const payload of entries.keys()) query_keys.add(create_remote_key(id, payload));\n\t\t\t\tlive_query_keys = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const [id, entries] of live_query_map) for (const payload of entries.keys()) live_query_keys.add(create_remote_key(id, payload));\n\t\t\t}\n\t\t\tif (options.invalidate) options.invalidate.forEach(push_invalidated);\n\t\t}\n\t});\n\tif (options.invalidateAll) tick$1().then(tick$1).then(() => {\n\t\tfor (const [id, entries] of query_map) for (const [payload, { resource }] of entries) if (query_keys?.has(create_remote_key(id, payload))) resource.refresh();\n\t\tfor (const [id, entries] of live_query_map) for (const [payload, { resource }] of entries) if (live_query_keys?.has(create_remote_key(id, payload))) resource.reconnect();\n\t});\n}\n/**\n* @param {import('./types.js').NavigationFinished} result\n* @param {HTMLElement} target\n* @param {boolean} hydrate\n*/\nasync function initialize(result, target, hydrate) {\n\t/** @type {import('@sveltejs/kit').NavigationEvent} */\n\tconst nav = {\n\t\tparams: current.params,\n\t\troute: { id: current.route?.id ?? null },\n\t\turl: new URL(location.href)\n\t};\n\tcurrent = {\n\t\t...result.state,\n\t\tnav\n\t};\n\tupdate(result.props.page);\n\troot = new app.root({\n\t\ttarget,\n\t\tprops: {\n\t\t\t...result.props,\n\t\t\tstores,\n\t\t\tcomponents\n\t\t},\n\t\thydrate,\n\t\tsync: false,\n\t\ttransformError: void 0\n\t});\n\tawait Promise.resolve();\n\trestore_snapshot(current_navigation_index);\n\tif (hydrate) {\n\t\t/** @type {import('@sveltejs/kit').AfterNavigate} */\n\t\tconst navigation = {\n\t\t\tfrom: null,\n\t\t\tto: {\n\t\t\t\t...nav,\n\t\t\t\tscroll: scroll_positions[current_history_index] ?? scroll_state()\n\t\t\t},\n\t\t\twillUnload: false,\n\t\t\ttype: \"enter\",\n\t\t\tcomplete: Promise.resolve()\n\t\t};\n\t\tafter_navigate_callbacks.forEach((fn) => fn(navigation));\n\t}\n\tstarted = true;\n}\n/**\n*\n* @param {{\n* url: URL;\n* params: Record<string, string>;\n* branch: Array<import('./types.js').BranchNode | undefined>;\n* errors?: Array<import('types').CSRPageNodeLoader | undefined>;\n* status: number;\n* error: App.Error | null;\n* route: import('types').CSRRoute | null;\n* form?: Record<string, any> | null;\n* }} opts\n*/\nasync function get_navigation_result_from_branch({ url, params, branch, errors, status, error, route, form }) {\n\t/** @type {import('types').TrailingSlash} */\n\tlet slash = \"never\";\n\tif (base && (url.pathname === base || url.pathname === base + \"/\")) slash = \"always\";\n\telse for (const node of branch) if (node?.slash !== void 0) slash = node.slash;\n\turl.pathname = normalize_path(url.pathname, slash);\n\turl.search = url.search;\n\t/** @type {import('./types.js').NavigationFinished} */\n\tconst result = {\n\t\ttype: \"loaded\",\n\t\tstate: {\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch,\n\t\t\terror,\n\t\t\troute\n\t\t},\n\t\tprops: {\n\t\t\tconstructors: compact(branch).map((branch_node) => branch_node.node.component),\n\t\t\tpage: clone_page(page)\n\t\t}\n\t};\n\tif (form !== void 0) result.props.form = form;\n\tlet data = {};\n\tlet data_changed = !page;\n\tlet p = 0;\n\tfor (let i = 0; i < Math.max(branch.length, current.branch.length); i += 1) {\n\t\tconst node = branch[i];\n\t\tconst prev = current.branch[i];\n\t\tif (node?.data !== prev?.data) data_changed = true;\n\t\tif (!node) continue;\n\t\tdata = {\n\t\t\t...data,\n\t\t\t...node.data\n\t\t};\n\t\tif (data_changed) result.props[`data_${p}`] = data;\n\t\tp += 1;\n\t}\n\tif (!current.url || url.href !== current.url.href || current.error !== error || form !== void 0 && form !== page.form || data_changed) result.props.page = {\n\t\terror,\n\t\tparams,\n\t\troute: { id: route?.id ?? null },\n\t\tstate: {},\n\t\tstatus,\n\t\turl: new URL(url),\n\t\tform: form ?? null,\n\t\tdata: data_changed ? data : page.data\n\t};\n\treturn result;\n}\n/**\n* Call the universal load function of the given node, if it exists.\n*\n* @param {{\n* loader: import('types').CSRPageNodeLoader;\n* \t parent: () => Promise<Record<string, any>>;\n* url: URL;\n* params: Record<string, string>;\n* route: { id: string | null };\n* \t server_data_node: import('./types.js').DataNode | null;\n* }} options\n* @returns {Promise<import('./types.js').BranchNode>}\n*/\nasync function load_node({ loader, parent, url, params, route, server_data_node }) {\n\t/** @type {Record<string, any> | null} */\n\tlet data = null;\n\tlet is_tracking = true;\n\t/** @type {import('types').Uses} */\n\tconst uses = {\n\t\tdependencies: /* @__PURE__ */ new Set(),\n\t\tparams: /* @__PURE__ */ new Set(),\n\t\tparent: false,\n\t\troute: false,\n\t\turl: false,\n\t\tsearch_params: /* @__PURE__ */ new Set()\n\t};\n\tconst node = await loader();\n\tif (node.universal?.load) {\n\t\t/** @param {string[]} deps */\n\t\tfunction depends(...deps) {\n\t\t\tfor (const dep of deps) {\n\t\t\t\tconst { href } = new URL(dep, url);\n\t\t\t\tuses.dependencies.add(href);\n\t\t\t}\n\t\t}\n\t\t/** @type {import('@sveltejs/kit').LoadEvent} */\n\t\tconst load_input = {\n\t\t\ttracing: {\n\t\t\t\tenabled: false,\n\t\t\t\troot: noop_span,\n\t\t\t\tcurrent: noop_span\n\t\t\t},\n\t\t\troute: new Proxy(route, { get: (target, key) => {\n\t\t\t\tif (is_tracking) uses.route = true;\n\t\t\t\treturn target[key];\n\t\t\t} }),\n\t\t\tparams: new Proxy(params, { get: (target, key) => {\n\t\t\t\tif (is_tracking) uses.params.add(key);\n\t\t\t\treturn target[key];\n\t\t\t} }),\n\t\t\tdata: server_data_node?.data ?? null,\n\t\t\turl: make_trackable(url, () => {\n\t\t\t\tif (is_tracking) uses.url = true;\n\t\t\t}, (param) => {\n\t\t\t\tif (is_tracking) uses.search_params.add(param);\n\t\t\t}, app.hash),\n\t\t\tasync fetch(resource, init) {\n\t\t\t\tif (resource instanceof Request) init = {\n\t\t\t\t\tbody: resource.method === \"GET\" || resource.method === \"HEAD\" ? void 0 : await resource.blob(),\n\t\t\t\t\tcache: resource.cache,\n\t\t\t\t\tcredentials: resource.credentials,\n\t\t\t\t\theaders: [...resource.headers].length > 0 ? resource?.headers : void 0,\n\t\t\t\t\tintegrity: resource.integrity,\n\t\t\t\t\tkeepalive: resource.keepalive,\n\t\t\t\t\tmethod: resource.method,\n\t\t\t\t\tmode: resource.mode,\n\t\t\t\t\tredirect: resource.redirect,\n\t\t\t\t\treferrer: resource.referrer,\n\t\t\t\t\treferrerPolicy: resource.referrerPolicy,\n\t\t\t\t\tsignal: resource.signal,\n\t\t\t\t\t...init\n\t\t\t\t};\n\t\t\t\tconst { resolved, promise } = resolve_fetch_url(resource, init, url);\n\t\t\t\tif (is_tracking) depends(resolved.href);\n\t\t\t\treturn promise;\n\t\t\t},\n\t\t\tsetHeaders: noop,\n\t\t\tdepends,\n\t\t\tparent() {\n\t\t\t\tif (is_tracking) uses.parent = true;\n\t\t\t\treturn parent();\n\t\t\t},\n\t\t\tuntrack(fn) {\n\t\t\t\tis_tracking = false;\n\t\t\t\ttry {\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\tis_tracking = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tdata = await node.universal.load.call(null, load_input) ?? null;\n\t}\n\treturn {\n\t\tnode,\n\t\tloader,\n\t\tserver: server_data_node,\n\t\tuniversal: node.universal?.load ? {\n\t\t\ttype: \"data\",\n\t\t\tdata,\n\t\t\tuses\n\t\t} : null,\n\t\tdata: data ?? server_data_node?.data ?? null,\n\t\tslash: node.universal?.trailingSlash ?? server_data_node?.slash\n\t};\n}\n/**\n* @param {Request | string | URL} input\n* @param {RequestInit | undefined} init\n* @param {URL} url\n*/\nfunction resolve_fetch_url(input, init, url) {\n\tlet requested = input instanceof Request ? input.url : input;\n\tconst resolved = new URL(requested, url);\n\tif (resolved.origin === url.origin) requested = resolved.href.slice(url.origin.length);\n\treturn {\n\t\tresolved,\n\t\tpromise: started ? subsequent_fetch(requested, resolved.href, init) : initial_fetch(requested, init)\n\t};\n}\n/**\n* @param {boolean} parent_changed\n* @param {boolean} route_changed\n* @param {boolean} url_changed\n* @param {Set<string>} search_params_changed\n* @param {import('types').Uses | undefined} uses\n* @param {Record<string, string>} params\n*/\nfunction has_changed(parent_changed, route_changed, url_changed, search_params_changed, uses, params) {\n\tif (force_invalidation) return true;\n\tif (!uses) return false;\n\tif (uses.parent && parent_changed) return true;\n\tif (uses.route && route_changed) return true;\n\tif (uses.url && url_changed) return true;\n\tfor (const tracked_params of uses.search_params) if (search_params_changed.has(tracked_params)) return true;\n\tfor (const param of uses.params) if (params[param] !== current.params[param]) return true;\n\tfor (const href of uses.dependencies) if (invalidated.some((fn) => fn(new URL(href)))) return true;\n\treturn false;\n}\n/**\n* @param {import('types').ServerDataNode | import('types').ServerDataSkippedNode | null} node\n* @param {import('./types.js').DataNode | null} [previous]\n* @returns {import('./types.js').DataNode | null}\n*/\nfunction create_data_node(node, previous) {\n\tif (node?.type === \"data\") return node;\n\tif (node?.type === \"skip\") return previous ?? null;\n\treturn null;\n}\n/**\n* @param {URL | null} old_url\n* @param {URL} new_url\n*/\nfunction diff_search_params(old_url, new_url) {\n\tif (!old_url) return new Set(new_url.searchParams.keys());\n\tconst changed = new Set([...old_url.searchParams.keys(), ...new_url.searchParams.keys()]);\n\tfor (const key of changed) {\n\t\tconst old_values = old_url.searchParams.getAll(key);\n\t\tconst new_values = new_url.searchParams.getAll(key);\n\t\tif (old_values.every((value) => new_values.includes(value)) && new_values.every((value) => old_values.includes(value))) changed.delete(key);\n\t}\n\treturn changed;\n}\n/**\n* @param {Omit<import('./types.js').NavigationFinished['state'], 'branch'> & { error: App.Error }} opts\n* @returns {import('./types.js').NavigationFinished}\n*/\nfunction preload_error({ error, url, route, params }) {\n\treturn {\n\t\ttype: \"loaded\",\n\t\tstate: {\n\t\t\terror,\n\t\t\turl,\n\t\t\troute,\n\t\t\tparams,\n\t\t\tbranch: []\n\t\t},\n\t\tprops: {\n\t\t\tpage: clone_page(page),\n\t\t\tconstructors: []\n\t\t}\n\t};\n}\n/**\n* @param {import('./types.js').NavigationIntent & { preload?: {} }} intent\n* @returns {Promise<import('./types.js').NavigationResult>}\n*/\nasync function load_route({ id, invalidating, url, params, route, preload }) {\n\tif (load_cache?.id === id) {\n\t\tpreload_tokens.delete(load_cache.token);\n\t\treturn load_cache.promise;\n\t}\n\tconst { errors, layouts, leaf } = route;\n\tconst loaders = [...layouts, leaf];\n\terrors.forEach((loader) => loader?.().catch(noop));\n\tloaders.forEach((loader) => loader?.[1]().catch(noop));\n\t/** @type {import('types').ServerNodesResponse | import('types').ServerRedirectNode | null} */\n\tlet server_data = null;\n\tconst url_changed = current.url ? id !== get_page_key(current.url) : false;\n\tconst route_changed = current.route ? route.id !== current.route.id : false;\n\tconst search_params_changed = diff_search_params(current.url, url);\n\tlet parent_invalid = false;\n\t{\n\t\tconst invalid_server_nodes = loaders.map((loader, i) => {\n\t\t\tconst previous = current.branch[i];\n\t\t\tconst invalid = !!loader?.[0] && (previous?.loader !== loader[1] || has_changed(parent_invalid, route_changed, url_changed, search_params_changed, previous.server?.uses, params));\n\t\t\tif (invalid) parent_invalid = true;\n\t\t\treturn invalid;\n\t\t});\n\t\tif (invalid_server_nodes.some(Boolean)) {\n\t\t\ttry {\n\t\t\t\tserver_data = await load_data(url, invalid_server_nodes);\n\t\t\t} catch (error) {\n\t\t\t\tconst handled_error = await handle_error(error, {\n\t\t\t\t\turl,\n\t\t\t\t\tparams,\n\t\t\t\t\troute: { id }\n\t\t\t\t});\n\t\t\t\tif (preload_tokens.has(preload)) return preload_error({\n\t\t\t\t\terror: handled_error,\n\t\t\t\t\turl,\n\t\t\t\t\tparams,\n\t\t\t\t\troute\n\t\t\t\t});\n\t\t\t\treturn load_root_error_page({\n\t\t\t\t\tstatus: get_status(error),\n\t\t\t\t\terror: handled_error,\n\t\t\t\t\turl,\n\t\t\t\t\troute\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (server_data.type === \"redirect\") return server_data;\n\t\t}\n\t}\n\tconst server_data_nodes = server_data?.nodes;\n\tlet parent_changed = false;\n\tconst branch_promises = loaders.map(async (loader, i) => {\n\t\tif (!loader) return;\n\t\t/** @type {import('./types.js').BranchNode | undefined} */\n\t\tconst previous = current.branch[i];\n\t\tconst server_data_node = server_data_nodes?.[i];\n\t\tif ((!server_data_node || server_data_node.type === \"skip\") && loader[1] === previous?.loader && !has_changed(parent_changed, route_changed, url_changed, search_params_changed, previous.universal?.uses, params)) return previous;\n\t\tparent_changed = true;\n\t\tif (server_data_node?.type === \"error\") throw server_data_node;\n\t\treturn load_node({\n\t\t\tloader: loader[1],\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute,\n\t\t\tparent: async () => {\n\t\t\t\tconst data = {};\n\t\t\t\tfor (let j = 0; j < i; j += 1) Object.assign(data, (await branch_promises[j])?.data);\n\t\t\t\treturn data;\n\t\t\t},\n\t\t\tserver_data_node: create_data_node(server_data_node === void 0 && loader[0] ? { type: \"skip\" } : server_data_node ?? null, loader[0] ? previous?.server : void 0)\n\t\t});\n\t});\n\tfor (const p of branch_promises) p.catch(noop);\n\t/** @type {Array<import('./types.js').BranchNode | undefined>} */\n\tconst branch = [];\n\tfor (let i = 0; i < loaders.length; i += 1) if (loaders[i]) try {\n\t\tbranch.push(await branch_promises[i]);\n\t} catch (err) {\n\t\tif (err instanceof Redirect) return {\n\t\t\ttype: \"redirect\",\n\t\t\tlocation: err.location\n\t\t};\n\t\tif (preload_tokens.has(preload)) return preload_error({\n\t\t\terror: await handle_error(err, {\n\t\t\t\tparams,\n\t\t\t\turl,\n\t\t\t\troute: { id: route.id }\n\t\t\t}),\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute\n\t\t});\n\t\tlet status = get_status(err);\n\t\t/** @type {App.Error} */\n\t\tlet error;\n\t\tif (server_data_nodes?.includes(err)) {\n\t\t\tstatus = err.status ?? status;\n\t\t\terror = err.error;\n\t\t} else if (err instanceof HttpError) error = err.body;\n\t\telse {\n\t\t\tif (await stores.updated.check()) {\n\t\t\t\tawait update_service_worker();\n\t\t\t\treturn await native_navigation(url);\n\t\t\t}\n\t\t\terror = await handle_error(err, {\n\t\t\t\tparams,\n\t\t\t\turl,\n\t\t\t\troute: { id: route.id }\n\t\t\t});\n\t\t}\n\t\tconst error_load = await load_nearest_error_page(i, branch, errors);\n\t\tif (error_load) return get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: branch.slice(0, error_load.idx).concat(error_load.node),\n\t\t\terrors,\n\t\t\tstatus,\n\t\t\terror,\n\t\t\troute\n\t\t});\n\t\telse return await server_fallback(url, { id: route.id }, error, status);\n\t}\n\telse branch.push(void 0);\n\treturn get_navigation_result_from_branch({\n\t\turl,\n\t\tparams,\n\t\tbranch,\n\t\terrors,\n\t\tstatus: 200,\n\t\terror: null,\n\t\troute,\n\t\tform: invalidating ? void 0 : null\n\t});\n}\n/**\n* @param {number} i Start index to backtrack from\n* @param {Array<import('./types.js').BranchNode | undefined>} branch Branch to backtrack\n* @param {Array<import('types').CSRPageNodeLoader | undefined>} errors All error pages for this branch\n* @returns {Promise<{idx: number; node: import('./types.js').BranchNode} | undefined>}\n*/\nasync function load_nearest_error_page(i, branch, errors) {\n\twhile (i--) if (errors[i]) {\n\t\tlet j = i;\n\t\twhile (!branch[j]) j -= 1;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tidx: j + 1,\n\t\t\t\tnode: {\n\t\t\t\t\tnode: await errors[i](),\n\t\t\t\t\tloader: errors[i],\n\t\t\t\t\tdata: {},\n\t\t\t\t\tserver: null,\n\t\t\t\t\tuniversal: null\n\t\t\t\t}\n\t\t\t};\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t}\n}\n/**\n* @param {{\n* status: number;\n* error: App.Error;\n* url: URL;\n* route: { id: string | null }\n* }} opts\n* @returns {Promise<import('./types.js').NavigationFinished>}\n*/\nasync function load_root_error_page({ status, error, url, route }) {\n\t/** @type {Record<string, string>} */\n\tconst params = {};\n\t/** @type {import('types').ServerDataNode | null} */\n\tlet server_data_node = null;\n\tif (app.server_loads[0] === 0) try {\n\t\tconst server_data = await load_data(url, [true]);\n\t\tif (server_data.type !== \"data\" || server_data.nodes[0] && server_data.nodes[0].type !== \"data\") throw 0;\n\t\tserver_data_node = server_data.nodes[0] ?? null;\n\t} catch {\n\t\tif (url.origin !== origin || url.pathname !== location.pathname || hydrated) await native_navigation(url);\n\t}\n\ttry {\n\t\treturn get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: [await load_node({\n\t\t\t\tloader: default_layout_loader,\n\t\t\t\turl,\n\t\t\t\tparams,\n\t\t\t\troute,\n\t\t\t\tparent: () => Promise.resolve({}),\n\t\t\t\tserver_data_node: create_data_node(server_data_node)\n\t\t\t}), {\n\t\t\t\tnode: await default_error_loader(),\n\t\t\t\tloader: default_error_loader,\n\t\t\t\tuniversal: null,\n\t\t\t\tserver: null,\n\t\t\t\tdata: null\n\t\t\t}],\n\t\t\tstatus,\n\t\t\terror,\n\t\t\terrors: [],\n\t\t\troute: null\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof Redirect) return _goto(new URL(error.location, location.href), {}, 0);\n\t\tthrow error;\n\t}\n}\n/**\n* Resolve the relative rerouted URL for a client-side navigation\n* @param {URL} url\n* @returns {Promise<URL | undefined>}\n*/\nasync function get_rerouted_url(url) {\n\tconst href = url.href;\n\tif (reroute_cache.has(href)) return reroute_cache.get(href);\n\tlet rerouted;\n\ttry {\n\t\tconst promise = (async () => {\n\t\t\tlet rerouted = await app.hooks.reroute({\n\t\t\t\turl: new URL(url),\n\t\t\t\tfetch: async (input, init) => {\n\t\t\t\t\treturn resolve_fetch_url(input, init, url).promise;\n\t\t\t\t}\n\t\t\t}) ?? url;\n\t\t\tif (typeof rerouted === \"string\") {\n\t\t\t\tconst tmp = new URL(url);\n\t\t\t\tif (app.hash) tmp.hash = rerouted;\n\t\t\t\telse tmp.pathname = rerouted;\n\t\t\t\trerouted = tmp;\n\t\t\t}\n\t\t\treturn rerouted;\n\t\t})();\n\t\treroute_cache.set(href, promise);\n\t\trerouted = await promise;\n\t} catch (e) {\n\t\treroute_cache.delete(href);\n\t\treturn;\n\t}\n\treturn rerouted;\n}\n/**\n* Resolve the full info (which route, params, etc.) for a client-side navigation from the URL,\n* taking the reroute hook into account. If this isn't a client-side-navigation (or the URL is undefined),\n* returns undefined.\n* @param {URL | undefined} url\n* @param {boolean} invalidating\n* @returns {Promise<import('./types.js').NavigationIntent | undefined>}\n*/\nasync function get_navigation_intent(url, invalidating) {\n\tif (!url) return;\n\tif (is_external_url(url, base, app.hash)) return;\n\t{\n\t\tconst rerouted = await get_rerouted_url(url);\n\t\tif (!rerouted) return;\n\t\tconst path = get_url_path(rerouted);\n\t\tfor (const route of routes) {\n\t\t\tconst params = route.exec(path);\n\t\t\tif (params) return {\n\t\t\t\tid: get_page_key(url),\n\t\t\t\tinvalidating,\n\t\t\t\troute,\n\t\t\t\tparams: decode_params(params),\n\t\t\t\turl\n\t\t\t};\n\t\t}\n\t}\n}\n/** @param {URL} url */\nfunction get_url_path(url) {\n\treturn decode_pathname(app.hash ? url.hash.replace(/^#/, \"\").replace(/[?#].+/, \"\") : url.pathname.slice(base.length)) || \"/\";\n}\n/** @param {URL} url */\nfunction get_page_key(url) {\n\treturn (app.hash ? url.hash.replace(/^#/, \"\") : url.pathname) + url.search;\n}\n/**\n* @param {{\n* url: URL;\n* type: import('@sveltejs/kit').Navigation[\"type\"];\n* intent?: import('./types.js').NavigationIntent;\n* delta?: number;\n* event?: PopStateEvent | MouseEvent;\n* scroll?: { x: number, y: number };\n* }} opts\n*/\nfunction _before_navigate({ url, type, intent, delta, event, scroll }) {\n\tlet should_block = false;\n\tconst nav = create_navigation(current, intent, url, type, scroll ?? null);\n\tif (delta !== void 0) nav.navigation.delta = delta;\n\tif (event !== void 0) nav.navigation.event = event;\n\tconst cancellable = {\n\t\t...nav.navigation,\n\t\tcancel: () => {\n\t\t\tshould_block = true;\n\t\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation cancelled\"));\n\t\t}\n\t};\n\tif (!is_navigating) before_navigate_callbacks.forEach((fn) => fn(cancellable));\n\treturn should_block ? null : nav;\n}\n/**\n* @param {{\n* type: import('@sveltejs/kit').NavigationType;\n* url: URL;\n* popped?: {\n* state: Record<string, any>;\n* scroll: { x: number, y: number };\n* delta: number;\n* };\n* keepfocus?: boolean;\n* noscroll?: boolean;\n* replace_state?: boolean;\n* state?: Record<string, any>;\n* redirect_count?: number;\n* nav_token?: {};\n* accept?: () => void;\n* block?: () => void;\n* event?: Event\n* }} opts\n*/\nasync function navigate({ type, url, popped, keepfocus, noscroll, replace_state, state = {}, redirect_count = 0, nav_token = {}, accept = noop, block = noop, event }) {\n\tconst prev_token = token;\n\ttoken = nav_token;\n\tconst intent = await get_navigation_intent(url, false);\n\tconst nav = type === \"enter\" ? create_navigation(current, intent, url, type) : _before_navigate({\n\t\turl,\n\t\ttype,\n\t\tdelta: popped?.delta,\n\t\tintent,\n\t\tscroll: popped?.scroll,\n\t\tevent\n\t});\n\tif (!nav) {\n\t\tblock();\n\t\tif (token === nav_token) token = prev_token;\n\t\treturn;\n\t}\n\tconst previous_history_index = current_history_index;\n\tconst previous_navigation_index = current_navigation_index;\n\taccept();\n\tis_navigating = true;\n\tif (started && nav.navigation.type !== \"enter\") stores.navigating.set(navigating.current = nav.navigation);\n\tlet navigation_result = intent && await load_route(intent);\n\tif (!navigation_result) if (is_external_url(url, base, app.hash)) return await native_navigation(url, replace_state);\n\telse navigation_result = await server_fallback(url, { id: null }, await handle_error(new SvelteKitError(404, \"Not Found\", `Not found: ${url.pathname}`), {\n\t\turl,\n\t\tparams: {},\n\t\troute: { id: null }\n\t}), 404, replace_state);\n\turl = intent?.url || url;\n\tif (token !== nav_token) {\n\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation aborted\"));\n\t\treturn false;\n\t}\n\tif (navigation_result.type === \"redirect\") {\n\t\tif (redirect_count < 20) {\n\t\t\tawait navigate({\n\t\t\t\ttype,\n\t\t\t\turl: new URL(navigation_result.location, url),\n\t\t\t\tpopped,\n\t\t\t\tkeepfocus,\n\t\t\t\tnoscroll,\n\t\t\t\treplace_state,\n\t\t\t\tstate,\n\t\t\t\tredirect_count: redirect_count + 1,\n\t\t\t\tnav_token\n\t\t\t});\n\t\t\tnav.fulfil(void 0);\n\t\t\treturn;\n\t\t}\n\t\tnavigation_result = await load_root_error_page({\n\t\t\tstatus: 500,\n\t\t\terror: await handle_error(/* @__PURE__ */ new Error(\"Redirect loop\"), {\n\t\t\t\turl,\n\t\t\t\tparams: {},\n\t\t\t\troute: { id: null }\n\t\t\t}),\n\t\t\turl,\n\t\t\troute: { id: null }\n\t\t});\n\t} else if (navigation_result.props.page.status >= 400) {\n\t\tif (await stores.updated.check()) {\n\t\t\tawait update_service_worker();\n\t\t\tawait native_navigation(url, replace_state);\n\t\t}\n\t}\n\treset_invalidation();\n\tupdate_scroll_positions(previous_history_index);\n\tcapture_snapshot(previous_navigation_index);\n\tif (navigation_result.props.page.url.pathname !== url.pathname) url.pathname = navigation_result.props.page.url.pathname;\n\tstate = popped ? popped.state : state;\n\tif (!popped) {\n\t\tconst change = replace_state ? 0 : 1;\n\t\tconst entry = {\n\t\t\t[HISTORY_INDEX]: current_history_index += change,\n\t\t\t[NAVIGATION_INDEX]: current_navigation_index += change,\n\t\t\t[STATES_KEY]: state\n\t\t};\n\t\t(replace_state ? history.replaceState : history.pushState).call(history, entry, \"\", url);\n\t\tif (!replace_state) clear_onward_history(current_history_index, current_navigation_index);\n\t}\n\tconst load_cache_fork = intent && load_cache?.id === intent.id ? load_cache.fork : null;\n\tif (load_cache?.fork && !load_cache_fork) discard_load_cache();\n\tload_cache = null;\n\tnavigation_result.props.page.state = state;\n\t/**\n\t* @type {Promise<void> | undefined}\n\t*/\n\tlet commit_promise;\n\tif (started) {\n\t\tconst after_navigate = (await Promise.all(Array.from(on_navigate_callbacks, (fn) => fn(nav.navigation)))).filter(\n\t\t\t/** @returns {value is () => void} */\n\t\t\t(value) => typeof value === \"function\"\n\t\t);\n\t\tif (after_navigate.length > 0) {\n\t\t\tfunction cleanup() {\n\t\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\t\tafter_navigate_callbacks.delete(fn);\n\t\t\t\t});\n\t\t\t}\n\t\t\tafter_navigate.push(cleanup);\n\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\tafter_navigate_callbacks.add(fn);\n\t\t\t});\n\t\t}\n\t\tconst target = nav.navigation.to;\n\t\tcurrent = {\n\t\t\t...navigation_result.state,\n\t\t\tnav: {\n\t\t\t\tparams: target.params,\n\t\t\t\troute: target.route,\n\t\t\t\turl: target.url\n\t\t\t}\n\t\t};\n\t\tif (navigation_result.props.page) navigation_result.props.page.url = url;\n\t\tconst fork = load_cache_fork && await load_cache_fork;\n\t\tif (fork) commit_promise = fork.commit();\n\t\telse {\n\t\t\trendering_error = null;\n\t\t\troot.$set(navigation_result.props);\n\t\t\tif (rendering_error) Object.assign(navigation_result.props.page, rendering_error);\n\t\t\tupdate(navigation_result.props.page);\n\t\t\tcommit_promise = settled?.();\n\t\t}\n\t} else await initialize(navigation_result, target, false);\n\tconst { activeElement } = document;\n\tawait commit_promise;\n\tawait tick$1();\n\tawait tick$1();\n\tif (token !== nav_token) {\n\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation aborted\"));\n\t\treturn false;\n\t}\n\tif (navigation_result.props.page && rendering_error) Object.assign(navigation_result.props.page, rendering_error);\n\t/** @type {Element | null | ''} */\n\tlet deep_linked = null;\n\tif (autoscroll) {\n\t\tconst scroll = popped ? popped.scroll : noscroll ? scroll_state() : null;\n\t\tif (scroll) scrollTo(scroll.x, scroll.y);\n\t\telse if (deep_linked = url.hash && document.getElementById(get_id(url))) deep_linked.scrollIntoView();\n\t\telse scrollTo(0, 0);\n\t}\n\tconst changed_focus = document.activeElement !== activeElement && document.activeElement !== document.body;\n\tif (!keepfocus && !changed_focus) reset_focus(url, !deep_linked);\n\tautoscroll = true;\n\tis_navigating = false;\n\tif (type === \"popstate\") restore_snapshot(current_navigation_index);\n\tnav.fulfil(void 0);\n\tif (nav.navigation.to) nav.navigation.to.scroll = scroll_state();\n\tafter_navigate_callbacks.forEach((fn) => fn(nav.navigation));\n\tstores.navigating.set(navigating.current = null);\n}\n/**\n* Does a full page reload if it wouldn't result in an endless loop in the SPA case\n* @param {URL} url\n* @param {{ id: string | null }} route\n* @param {App.Error} error\n* @param {number} status\n* @param {boolean} [replace_state]\n* @returns {Promise<import('./types.js').NavigationFinished>}\n*/\nasync function server_fallback(url, route, error, status, replace_state) {\n\tif (url.origin === origin && url.pathname === location.pathname && !hydrated) return await load_root_error_page({\n\t\tstatus,\n\t\terror,\n\t\turl,\n\t\troute\n\t});\n\treturn await native_navigation(url, replace_state);\n}\n/**\n* @param {unknown} error\n* @param {import('@sveltejs/kit').NavigationEvent} event\n* @returns {import('types').MaybePromise<App.Error>}\n*/\nfunction handle_error(error, event) {\n\tif (error instanceof HttpError) return error.body;\n\tconst status = get_status(error);\n\tconst message = get_message(error);\n\treturn app.hooks.handleError({\n\t\terror,\n\t\tevent,\n\t\tstatus,\n\t\tmessage\n\t}) ?? { message };\n}\n/**\n* @template {Function} T\n* @param {Set<T>} callbacks\n* @param {T} callback\n*/\nfunction add_navigation_callback(callbacks, callback) {\n\tonMount(() => {\n\t\tcallbacks.add(callback);\n\t\treturn () => {\n\t\t\tcallbacks.delete(callback);\n\t\t};\n\t});\n}\n/**\n* A lifecycle function that runs the supplied `callback` when the current component mounts, and also whenever we navigate to a URL.\n*\n* `afterNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n* @param {(navigation: import('@sveltejs/kit').AfterNavigate) => void} callback\n* @returns {void}\n*/\nfunction afterNavigate(callback) {\n\tadd_navigation_callback(after_navigate_callbacks, callback);\n}\n/**\n* A navigation interceptor that triggers before we navigate to a URL, whether by clicking a link, calling `goto(...)`, or using the browser back/forward controls.\n*\n* Calling `cancel()` will prevent the navigation from completing. If `navigation.type === 'leave'` — meaning the user is navigating away from the app (or closing the tab) — calling `cancel` will trigger the native browser unload confirmation dialog. In this case, the navigation may or may not be cancelled depending on the user's response.\n*\n* When a navigation isn't to a SvelteKit-owned route (and therefore controlled by SvelteKit's client-side router), `navigation.to.route.id` will be `null`.\n*\n* If the navigation will (if not cancelled) cause the document to unload — in other words `'leave'` navigations and `'link'` navigations where `navigation.to.route === null` — `navigation.willUnload` is `true`.\n*\n* `beforeNavigate` must be called during a component initialization. It remains active as long as the component is mounted.\n* @param {(navigation: import('@sveltejs/kit').BeforeNavigate) => void} callback\n* @returns {void}\n*/\nfunction beforeNavigate(callback) {\n\tadd_navigation_callback(before_navigate_callbacks, callback);\n}\n/**\n* Allows you to navigate programmatically to a given route, with options such as keeping the current element focused.\n* Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `url`.\n*\n* For external URLs, use `window.location = url` instead of calling `goto(url)`.\n*\n* @param {string | URL} url Where to navigate to. Note that if you've set [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths) and the URL is root-relative, you need to prepend the base path if you want to navigate within the app.\n* @param {Object} [opts] Options related to the navigation\n* @param {boolean} [opts.replaceState] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n* @param {boolean} [opts.noScroll] If `true`, the browser will maintain its scroll position rather than scrolling to the top of the page after navigation\n* @param {boolean} [opts.keepFocus] If `true`, the currently focused element will retain focus after navigation. Otherwise, focus will be reset to the body\n* @param {boolean} [opts.invalidateAll] If `true`, all `load` functions of the page will be rerun. See https://svelte.dev/docs/kit/load#rerunning-load-functions for more info on invalidation.\n* @param {Array<string | URL | ((url: URL) => boolean)>} [opts.invalidate] Causes any load functions to re-run if they depend on one of the urls\n* @param {App.PageState} [opts.state] An optional object that will be available as `page.state`\n* @returns {Promise<void>}\n*/\nfunction goto(url, opts = {}) {\n\tthrow new Error(\"Cannot call goto(...) on the server\");\n}\n/**\n* @param {string | URL | ((url: URL) => boolean)} resource The invalidated URL\n*/\nfunction push_invalidated(resource) {\n\tif (typeof resource === \"function\") invalidated.push(resource);\n\telse {\n\t\tconst { href } = new URL(resource, location.href);\n\t\tinvalidated.push((url) => url.href === href);\n\t}\n}\n/**\n* Causes all `load` and `query` functions belonging to the currently active page to re-run. Returns a `Promise` that resolves when the page is subsequently updated.\n* @returns {Promise<void>}\n*/\nfunction invalidateAll() {\n\tthrow new Error(\"Cannot call invalidateAll() on the server\");\n}\n/**\n* This action updates the `form` property of the current page with the given data and updates `page.status`.\n* In case of an error, it redirects to the nearest error page.\n* @template {Record<string, unknown> | undefined} Success\n* @template {Record<string, unknown> | undefined} Failure\n* @param {import('@sveltejs/kit').ActionResult<Success, Failure>} result\n* @returns {Promise<void>}\n*/\nasync function applyAction(result) {\n\tthrow new Error(\"Cannot call applyAction(...) on the server\");\n}\n/**\n* @param {URL} url\n* @param {boolean[]} invalid\n* @returns {Promise<import('types').ServerNodesResponse | import('types').ServerRedirectNode>}\n*/\nasync function load_data(url, invalid) {\n\tconst data_url = new URL(url);\n\tdata_url.pathname = add_data_suffix(url.pathname);\n\tif (url.pathname.endsWith(\"/\")) data_url.searchParams.append(TRAILING_SLASH_PARAM, \"1\");\n\tdata_url.searchParams.append(INVALIDATED_PARAM, invalid.map((i) => i ? \"1\" : \"0\").join(\"\"));\n\tconst res = await (0, window.fetch)(data_url.href, {});\n\tif (!res.ok) {\n\t\t/** @type {string | undefined} */\n\t\tlet message;\n\t\tif (res.headers.get(\"content-type\")?.includes(\"application/json\")) message = await res.json();\n\t\telse if (res.status === 404) message = \"Not Found\";\n\t\telse if (res.status === 500) message = \"Internal Error\";\n\t\tthrow new HttpError(res.status, message);\n\t}\n\treturn new Promise(async (resolve) => {\n\t\t/**\n\t\t* Map of deferred promises that will be resolved by a subsequent chunk of data\n\t\t* @type {Map<string, import('types').Deferred>}\n\t\t*/\n\t\tconst deferreds = /* @__PURE__ */ new Map();\n\t\tconst reader = res.body.getReader();\n\t\t/**\n\t\t* @param {any} data\n\t\t*/\n\t\tfunction deserialize(data) {\n\t\t\treturn unflatten(data, {\n\t\t\t\t...app.decoders,\n\t\t\t\tPromise: (id) => {\n\t\t\t\t\treturn new Promise((fulfil, reject) => {\n\t\t\t\t\t\tdeferreds.set(id, {\n\t\t\t\t\t\t\tfulfil,\n\t\t\t\t\t\t\treject\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tfor await (const node of read_ndjson(reader)) {\n\t\t\tif (node.type === \"redirect\") return resolve(node);\n\t\t\tif (node.type === \"data\") {\n\t\t\t\tnode.nodes?.forEach((node) => {\n\t\t\t\t\tif (node?.type === \"data\") {\n\t\t\t\t\t\tnode.uses = deserialize_uses(node.uses);\n\t\t\t\t\t\tnode.data = deserialize(node.data);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresolve(node);\n\t\t\t} else if (node.type === \"chunk\") {\n\t\t\t\tconst { id, data, error } = node;\n\t\t\t\tconst deferred = deferreds.get(id);\n\t\t\t\tdeferreds.delete(id);\n\t\t\t\tif (error) deferred.reject(deserialize(error));\n\t\t\t\telse deferred.fulfil(deserialize(data));\n\t\t\t}\n\t\t}\n\t});\n}\n/**\n* @param {any} uses\n* @return {import('types').Uses}\n*/\nfunction deserialize_uses(uses) {\n\treturn {\n\t\tdependencies: new Set(uses?.dependencies ?? []),\n\t\tparams: new Set(uses?.params ?? []),\n\t\tparent: !!uses?.parent,\n\t\troute: !!uses?.route,\n\t\turl: !!uses?.url,\n\t\tsearch_params: new Set(uses?.search_params ?? [])\n\t};\n}\n/**\n* @param {URL} url\n* @param {boolean} [scroll]\n*/\nfunction reset_focus(url, scroll = true) {\n\tconst autofocus = document.querySelector(\"[autofocus]\");\n\tif (autofocus) autofocus.focus();\n\telse {\n\t\tconst id = get_id(url);\n\t\tif (id && document.getElementById(id)) {\n\t\t\tconst { x, y } = scroll_state();\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst history_state = history.state;\n\t\t\t\tlocation.replace(new URL(`#${id}`, location.href));\n\t\t\t\thistory.replaceState(history_state, \"\", url);\n\t\t\t\tif (scroll) scrollTo(x, y);\n\t\t\t});\n\t\t} else {\n\t\t\tconst root = document.body;\n\t\t\tconst tabindex = root.getAttribute(\"tabindex\");\n\t\t\troot.tabIndex = -1;\n\t\t\troot.focus({\n\t\t\t\tpreventScroll: true,\n\t\t\t\tfocusVisible: false\n\t\t\t});\n\t\t\tif (tabindex !== null) root.setAttribute(\"tabindex\", tabindex);\n\t\t\telse root.removeAttribute(\"tabindex\");\n\t\t}\n\t\tconst selection = getSelection();\n\t\tif (selection && selection.type !== \"None\") {\n\t\t\t/** @type {Range[]} */\n\t\t\tconst ranges = [];\n\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) ranges.push(selection.getRangeAt(i));\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (selection.rangeCount !== ranges.length) return;\n\t\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) {\n\t\t\t\t\tconst a = ranges[i];\n\t\t\t\t\tconst b = selection.getRangeAt(i);\n\t\t\t\t\tif (a.commonAncestorContainer !== b.commonAncestorContainer || a.startContainer !== b.startContainer || a.endContainer !== b.endContainer || a.startOffset !== b.startOffset || a.endOffset !== b.endOffset) return;\n\t\t\t\t}\n\t\t\t\tselection.removeAllRanges();\n\t\t\t});\n\t\t}\n\t}\n}\n/**\n* @template {import('@sveltejs/kit').NavigationType} T\n* @param {import('./types.js').NavigationState} current\n* @param {import('./types.js').NavigationIntent | undefined} intent\n* @param {URL | null} url\n* @param {T} type\n* @param {{ x: number, y: number } | null} [target_scroll] The scroll position for the target (for popstate navigations)\n*/\nfunction create_navigation(current, intent, url, type, target_scroll = null) {\n\t/** @type {(value: any) => void} */\n\tlet fulfil;\n\t/** @type {(error: any) => void} */\n\tlet reject;\n\tconst complete = new Promise((f, r) => {\n\t\tfulfil = f;\n\t\treject = r;\n\t});\n\tcomplete.catch(noop);\n\treturn {\n\t\tnavigation: {\n\t\t\tfrom: {\n\t\t\t\tparams: current.params,\n\t\t\t\troute: { id: current.route?.id ?? null },\n\t\t\t\turl: current.url,\n\t\t\t\tscroll: scroll_state()\n\t\t\t},\n\t\t\tto: url && {\n\t\t\t\tparams: intent?.params ?? null,\n\t\t\t\troute: { id: intent?.route?.id ?? null },\n\t\t\t\turl,\n\t\t\t\tscroll: target_scroll\n\t\t\t},\n\t\t\twillUnload: !intent,\n\t\t\ttype,\n\t\t\tcomplete\n\t\t},\n\t\tfulfil,\n\t\treject\n\t};\n}\n/**\n* TODO: remove this in 3.0 when the page store is also removed\n*\n* We need to assign a new page object so that subscribers are correctly notified.\n* However, spreading `{ ...page }` returns an empty object so we manually\n* assign to each property instead.\n*\n* @param {import('@sveltejs/kit').Page} page\n*/\nfunction clone_page(page) {\n\treturn {\n\t\tdata: page.data,\n\t\terror: page.error,\n\t\tform: page.form,\n\t\tparams: page.params,\n\t\troute: page.route,\n\t\tstate: page.state,\n\t\tstatus: page.status,\n\t\turl: page.url\n\t};\n}\n/**\n* @param {URL} url\n* @returns {string}\n*/\nfunction get_id(url) {\n\tlet id;\n\tif (app.hash) {\n\t\tconst [, , second] = url.hash.split(\"#\", 3);\n\t\tid = second ?? \"\";\n\t} else id = url.hash.slice(1);\n\treturn decodeURIComponent(id);\n}\n//#endregion\nexport { goto as a, navigating as c, beforeNavigate as i, page as l, app as n, invalidateAll as o, applyAction as r, stores as s, afterNavigate as t, updated as u };\n"],"names":["noop$1"],"mappings":";;;AA4FA,IAAI,SAAS,GAAGA,IAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAACA,IAAM,CAAC,QAAQ,EAAE,CAAC;AACnG,IAAI,eAAe,GAAG,IAAI;AAC1B,IAAI,SAAS,EAAE;AACf,EAAQ;AACR,EAAE,IAAI,EAAE,EAAE;AACV,EAAE,IAAI,EAAE,IAAI;AACZ,EAAE,KAAK,EAAE,IAAI;AACb,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;AACrB,EAAE,KAAK,EAAE,EAAE;AACX,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,eAAe;AAC9B,GAAE;AAGF;AAkIA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,oBAAoB;AA8G5C;AACA,IAAI,wBAAwB,mBAAmB,IAAI,GAAG,EAAE;AA43BxD;AACA;AACA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE;AACtD,CAAC,OAAO,CAAC,MAAM;AACf,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzB,EAAE,OAAO,MAAM;AACf,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,EAAE,CAAC;AACH,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,QAAQ,EAAE;AACjC,CAAC,uBAAuB,CAAC,wBAAwB,EAAE,QAAQ,CAAC;AAC5D;AA8CA;AACA;AACA;AACA;AACA,SAAS,aAAa,GAAG;AACzB,CAAC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,WAAW,CAAC,MAAM,EAAE;AACnC,CAAC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;AAC9D;;;;"}