quiz-mcp 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +85 -0
  2. package/bin/quiz +16 -0
  3. package/bin/quiz-runner +18 -0
  4. package/bin/quiz-runner-mcp +18 -0
  5. package/dist/cli.js +805 -0
  6. package/dist/client/_app/immutable/assets/0.BdUfdP7M.css +1 -0
  7. package/dist/client/_app/immutable/assets/0.BdUfdP7M.css.br +0 -0
  8. package/dist/client/_app/immutable/assets/0.BdUfdP7M.css.gz +0 -0
  9. package/dist/client/_app/immutable/chunks/BBbVH-DX.js +2 -0
  10. package/dist/client/_app/immutable/chunks/BBbVH-DX.js.br +0 -0
  11. package/dist/client/_app/immutable/chunks/BBbVH-DX.js.gz +0 -0
  12. package/dist/client/_app/immutable/chunks/BYAtt_Gu.js +1 -0
  13. package/dist/client/_app/immutable/chunks/BYAtt_Gu.js.br +0 -0
  14. package/dist/client/_app/immutable/chunks/BYAtt_Gu.js.gz +0 -0
  15. package/dist/client/_app/immutable/chunks/C9b1VZtB.js +1 -0
  16. package/dist/client/_app/immutable/chunks/C9b1VZtB.js.br +0 -0
  17. package/dist/client/_app/immutable/chunks/C9b1VZtB.js.gz +0 -0
  18. package/dist/client/_app/immutable/chunks/DnSqigra.js +1 -0
  19. package/dist/client/_app/immutable/chunks/DnSqigra.js.br +0 -0
  20. package/dist/client/_app/immutable/chunks/DnSqigra.js.gz +0 -0
  21. package/dist/client/_app/immutable/chunks/DqHG5Xll.js +3 -0
  22. package/dist/client/_app/immutable/chunks/DqHG5Xll.js.br +0 -0
  23. package/dist/client/_app/immutable/chunks/DqHG5Xll.js.gz +0 -0
  24. package/dist/client/_app/immutable/chunks/fMaWj-vy.js +1 -0
  25. package/dist/client/_app/immutable/chunks/fMaWj-vy.js.br +0 -0
  26. package/dist/client/_app/immutable/chunks/fMaWj-vy.js.gz +0 -0
  27. package/dist/client/_app/immutable/chunks/hqRb622q.js +1 -0
  28. package/dist/client/_app/immutable/chunks/hqRb622q.js.br +0 -0
  29. package/dist/client/_app/immutable/chunks/hqRb622q.js.gz +0 -0
  30. package/dist/client/_app/immutable/chunks/qgn7L4n5.js +1 -0
  31. package/dist/client/_app/immutable/chunks/qgn7L4n5.js.br +0 -0
  32. package/dist/client/_app/immutable/chunks/qgn7L4n5.js.gz +0 -0
  33. package/dist/client/_app/immutable/entry/app.BsKq4Thd.js +2 -0
  34. package/dist/client/_app/immutable/entry/app.BsKq4Thd.js.br +0 -0
  35. package/dist/client/_app/immutable/entry/app.BsKq4Thd.js.gz +0 -0
  36. package/dist/client/_app/immutable/entry/start.CKTlgCvu.js +1 -0
  37. package/dist/client/_app/immutable/entry/start.CKTlgCvu.js.br +2 -0
  38. package/dist/client/_app/immutable/entry/start.CKTlgCvu.js.gz +0 -0
  39. package/dist/client/_app/immutable/nodes/0.R6s8931r.js +9 -0
  40. package/dist/client/_app/immutable/nodes/0.R6s8931r.js.br +0 -0
  41. package/dist/client/_app/immutable/nodes/0.R6s8931r.js.gz +0 -0
  42. package/dist/client/_app/immutable/nodes/1.CBs3iFLr.js +1 -0
  43. package/dist/client/_app/immutable/nodes/1.CBs3iFLr.js.br +0 -0
  44. package/dist/client/_app/immutable/nodes/1.CBs3iFLr.js.gz +0 -0
  45. package/dist/client/_app/immutable/nodes/2.B9MLTE_H.js +2 -0
  46. package/dist/client/_app/immutable/nodes/2.B9MLTE_H.js.br +0 -0
  47. package/dist/client/_app/immutable/nodes/2.B9MLTE_H.js.gz +0 -0
  48. package/dist/client/_app/immutable/nodes/3.w4AbulQF.js +1 -0
  49. package/dist/client/_app/immutable/nodes/3.w4AbulQF.js.br +0 -0
  50. package/dist/client/_app/immutable/nodes/3.w4AbulQF.js.gz +0 -0
  51. package/dist/client/_app/immutable/nodes/4.BAhm-aFq.js +4 -0
  52. package/dist/client/_app/immutable/nodes/4.BAhm-aFq.js.br +0 -0
  53. package/dist/client/_app/immutable/nodes/4.BAhm-aFq.js.gz +0 -0
  54. package/dist/client/_app/version.json +1 -0
  55. package/dist/client/_app/version.json.br +0 -0
  56. package/dist/client/_app/version.json.gz +0 -0
  57. package/dist/client/robots.txt +3 -0
  58. package/dist/env.js +94 -0
  59. package/dist/handler.js +1435 -0
  60. package/dist/index.js +345 -0
  61. package/dist/server/chunks/0-bFxjafp8.js +44 -0
  62. package/dist/server/chunks/0-bFxjafp8.js.map +1 -0
  63. package/dist/server/chunks/1-D1qe0uHb.js +9 -0
  64. package/dist/server/chunks/1-D1qe0uHb.js.map +1 -0
  65. package/dist/server/chunks/2-NzZFDUaQ.js +60 -0
  66. package/dist/server/chunks/2-NzZFDUaQ.js.map +1 -0
  67. package/dist/server/chunks/3-DJAG62O1.js +37 -0
  68. package/dist/server/chunks/3-DJAG62O1.js.map +1 -0
  69. package/dist/server/chunks/4-zigWBLLG.js +37 -0
  70. package/dist/server/chunks/4-zigWBLLG.js.map +1 -0
  71. package/dist/server/chunks/_error.svelte-BHNrphys.js +80 -0
  72. package/dist/server/chunks/_error.svelte-BHNrphys.js.map +1 -0
  73. package/dist/server/chunks/_layout.svelte-BUJDEr5D.js +104 -0
  74. package/dist/server/chunks/_layout.svelte-BUJDEr5D.js.map +1 -0
  75. package/dist/server/chunks/_page.svelte-CRU5jaGZ.js +653 -0
  76. package/dist/server/chunks/_page.svelte-CRU5jaGZ.js.map +1 -0
  77. package/dist/server/chunks/_page.svelte-Cm8ocLsi.js +572 -0
  78. package/dist/server/chunks/_page.svelte-Cm8ocLsi.js.map +1 -0
  79. package/dist/server/chunks/_page.svelte-Dvh1k6R9.js +71 -0
  80. package/dist/server/chunks/_page.svelte-Dvh1k6R9.js.map +1 -0
  81. package/dist/server/chunks/_server.ts-BZp77VsF.js +101 -0
  82. package/dist/server/chunks/_server.ts-BZp77VsF.js.map +1 -0
  83. package/dist/server/chunks/_server.ts-C2NKc-VD.js +219 -0
  84. package/dist/server/chunks/_server.ts-C2NKc-VD.js.map +1 -0
  85. package/dist/server/chunks/_server.ts-CHyNcOmK.js +39 -0
  86. package/dist/server/chunks/_server.ts-CHyNcOmK.js.map +1 -0
  87. package/dist/server/chunks/_server.ts-CakPvrry.js +51 -0
  88. package/dist/server/chunks/_server.ts-CakPvrry.js.map +1 -0
  89. package/dist/server/chunks/_server.ts-uSNr19lE.js +35 -0
  90. package/dist/server/chunks/_server.ts-uSNr19lE.js.map +1 -0
  91. package/dist/server/chunks/client-Dw0t4rDL.js +25 -0
  92. package/dist/server/chunks/client-Dw0t4rDL.js.map +1 -0
  93. package/dist/server/chunks/exports-BNC8dbq3.js +326 -0
  94. package/dist/server/chunks/exports-BNC8dbq3.js.map +1 -0
  95. package/dist/server/chunks/hooks.server-B6FrjICA.js +66 -0
  96. package/dist/server/chunks/hooks.server-B6FrjICA.js.map +1 -0
  97. package/dist/server/chunks/hooks.universal-B3lncnqn.js +6 -0
  98. package/dist/server/chunks/hooks.universal-B3lncnqn.js.map +1 -0
  99. package/dist/server/chunks/html-FW6Ia4bL.js +8 -0
  100. package/dist/server/chunks/html-FW6Ia4bL.js.map +1 -0
  101. package/dist/server/chunks/index-Ch5Bqlgz.js +1411 -0
  102. package/dist/server/chunks/index-Ch5Bqlgz.js.map +1 -0
  103. package/dist/server/chunks/index-wpIsICWW.js +219 -0
  104. package/dist/server/chunks/index-wpIsICWW.js.map +1 -0
  105. package/dist/server/chunks/runtime-Bf5HkYyl.js +318 -0
  106. package/dist/server/chunks/runtime-Bf5HkYyl.js.map +1 -0
  107. package/dist/server/chunks/sessions-CEbRx2vt.js +169 -0
  108. package/dist/server/chunks/sessions-CEbRx2vt.js.map +1 -0
  109. package/dist/server/index.js +7609 -0
  110. package/dist/server/index.js.map +1 -0
  111. package/dist/server/manifest.js +97 -0
  112. package/dist/server/manifest.js.map +1 -0
  113. package/dist/shims.js +32 -0
  114. package/package.json +122 -0
@@ -0,0 +1,318 @@
1
+ const baseLocale = "en";
2
+ const locales = (
3
+ /** @type {const} */
4
+ ["en", "es", "ru", "ua"]
5
+ );
6
+ const cookieName = "PARAGLIDE_LOCALE";
7
+ const strategy = [
8
+ "cookie",
9
+ "preferredLanguage",
10
+ "globalVariable",
11
+ "baseLocale"
12
+ ];
13
+ let serverAsyncLocalStorage = void 0;
14
+ function overwriteServerAsyncLocalStorage(value) {
15
+ serverAsyncLocalStorage = value;
16
+ }
17
+ globalThis.__paraglide = {};
18
+ let _locale;
19
+ let localeInitiallySet = false;
20
+ let getLocale = () => {
21
+ let locale;
22
+ if (serverAsyncLocalStorage) {
23
+ const locale2 = serverAsyncLocalStorage?.getStore()?.locale;
24
+ if (locale2) {
25
+ return locale2;
26
+ }
27
+ }
28
+ for (const strat of strategy) {
29
+ if (strat === "cookie") {
30
+ locale = extractLocaleFromCookie();
31
+ } else if (strat === "baseLocale") {
32
+ locale = baseLocale;
33
+ } else if (strat === "globalVariable" && _locale !== void 0) {
34
+ locale = _locale;
35
+ } else if (isCustomStrategy(strat) && customClientStrategies.has(strat)) {
36
+ const handler = customClientStrategies.get(strat);
37
+ if (handler) {
38
+ const result = handler.getLocale();
39
+ if (result instanceof Promise) {
40
+ continue;
41
+ }
42
+ locale = result;
43
+ }
44
+ }
45
+ if (locale !== void 0) {
46
+ const asserted = assertIsLocale(locale);
47
+ if (!localeInitiallySet) {
48
+ _locale = asserted;
49
+ localeInitiallySet = true;
50
+ setLocale(asserted, { reload: false });
51
+ }
52
+ return asserted;
53
+ }
54
+ }
55
+ throw new Error("No locale found. Read the docs https://inlang.com/m/gerre34r/library-inlang-paraglideJs/errors#no-locale-found");
56
+ };
57
+ let setLocale = (newLocale, options) => {
58
+ ({
59
+ ...options
60
+ });
61
+ let currentLocale;
62
+ try {
63
+ currentLocale = getLocale();
64
+ } catch {
65
+ }
66
+ const customSetLocalePromises = [];
67
+ for (const strat of strategy) {
68
+ if (strat === "globalVariable") {
69
+ _locale = newLocale;
70
+ } else if (strat === "cookie") {
71
+ {
72
+ continue;
73
+ }
74
+ } else if (strat === "baseLocale") {
75
+ continue;
76
+ } else if (isCustomStrategy(strat) && customClientStrategies.has(strat)) {
77
+ const handler = customClientStrategies.get(strat);
78
+ if (handler) {
79
+ let result = handler.setLocale(newLocale);
80
+ if (result instanceof Promise) {
81
+ result = result.catch((error) => {
82
+ throw new Error(`Custom strategy "${strat}" setLocale failed.`, {
83
+ cause: error
84
+ });
85
+ });
86
+ customSetLocalePromises.push(result);
87
+ }
88
+ }
89
+ }
90
+ }
91
+ if (customSetLocalePromises.length) {
92
+ return Promise.all(customSetLocalePromises).then(() => {
93
+ });
94
+ }
95
+ return;
96
+ };
97
+ let getUrlOrigin = () => {
98
+ if (serverAsyncLocalStorage) {
99
+ return serverAsyncLocalStorage.getStore()?.origin ?? "http://fallback.com";
100
+ } else if (typeof window !== "undefined") {
101
+ return window.location.origin;
102
+ }
103
+ return "http://fallback.com";
104
+ };
105
+ function isLocale(locale) {
106
+ if (typeof locale !== "string")
107
+ return false;
108
+ return !locale ? false : locales.some((item) => item.toLowerCase() === locale.toLowerCase());
109
+ }
110
+ function assertIsLocale(input) {
111
+ if (typeof input !== "string") {
112
+ throw new Error(`Invalid locale: ${input}. Expected a string.`);
113
+ }
114
+ const lowerInput = input.toLowerCase();
115
+ const matchedLocale = locales.find((item) => item.toLowerCase() === lowerInput);
116
+ if (!matchedLocale) {
117
+ throw new Error(`Invalid locale: ${input}. Expected one of: ${locales.join(", ")}`);
118
+ }
119
+ return matchedLocale;
120
+ }
121
+ const extractLocaleFromRequest = (request) => {
122
+ let locale;
123
+ for (const strat of strategy) {
124
+ if (strat === "cookie") {
125
+ locale = request.headers.get("cookie")?.split("; ").find((c) => c.startsWith(cookieName + "="))?.split("=")[1];
126
+ } else if (strat === "preferredLanguage") {
127
+ locale = extractLocaleFromHeader(request);
128
+ } else if (strat === "globalVariable") {
129
+ locale = _locale;
130
+ } else if (strat === "baseLocale") {
131
+ return baseLocale;
132
+ } else if (strat === "localStorage") {
133
+ continue;
134
+ } else if (isCustomStrategy(strat)) {
135
+ continue;
136
+ }
137
+ if (locale !== void 0) {
138
+ if (!isLocale(locale)) {
139
+ locale = void 0;
140
+ } else {
141
+ return assertIsLocale(locale);
142
+ }
143
+ }
144
+ }
145
+ throw new Error("No locale found. There is an error in your strategy. Try adding 'baseLocale' as the very last strategy. Read more here https://inlang.com/m/gerre34r/library-inlang-paraglideJs/errors#no-locale-found");
146
+ };
147
+ const extractLocaleFromRequestAsync = async (request) => {
148
+ let locale;
149
+ for (const strat of strategy) {
150
+ if (isCustomStrategy(strat) && customServerStrategies.has(strat)) {
151
+ const handler = customServerStrategies.get(strat);
152
+ if (handler) {
153
+ locale = await handler.getLocale(request);
154
+ }
155
+ if (locale !== void 0 && isLocale(locale)) {
156
+ return assertIsLocale(locale);
157
+ }
158
+ }
159
+ }
160
+ locale = extractLocaleFromRequest(request);
161
+ return assertIsLocale(locale);
162
+ };
163
+ function extractLocaleFromCookie() {
164
+ if (typeof document === "undefined" || !document.cookie) {
165
+ return;
166
+ }
167
+ const match = document.cookie.match(new RegExp(`(^| )${cookieName}=([^;]+)`));
168
+ const locale = match?.[2];
169
+ if (isLocale(locale)) {
170
+ return locale;
171
+ }
172
+ return void 0;
173
+ }
174
+ function extractLocaleFromHeader(request) {
175
+ const acceptLanguageHeader = request.headers.get("accept-language");
176
+ if (acceptLanguageHeader) {
177
+ const languages = acceptLanguageHeader.split(",").map((lang) => {
178
+ const [tag, q = "1"] = lang.trim().split(";q=");
179
+ const baseTag = tag?.split("-")[0]?.toLowerCase();
180
+ return {
181
+ fullTag: tag?.toLowerCase(),
182
+ baseTag,
183
+ q: Number(q)
184
+ };
185
+ }).sort((a, b) => b.q - a.q);
186
+ for (const lang of languages) {
187
+ if (isLocale(lang.fullTag)) {
188
+ return lang.fullTag;
189
+ } else if (isLocale(lang.baseTag)) {
190
+ return lang.baseTag;
191
+ }
192
+ }
193
+ return void 0;
194
+ }
195
+ return void 0;
196
+ }
197
+ let cachedUrl;
198
+ let cachedLocale;
199
+ function extractLocaleFromUrl(url) {
200
+ const urlString = typeof url === "string" ? url : url.href;
201
+ if (cachedUrl === urlString) {
202
+ return cachedLocale;
203
+ }
204
+ let result;
205
+ {
206
+ result = defaultUrlPatternExtractLocale(url);
207
+ }
208
+ cachedUrl = urlString;
209
+ cachedLocale = result;
210
+ return result;
211
+ }
212
+ function defaultUrlPatternExtractLocale(url) {
213
+ const urlObj = new URL(url, "http://dummy.com");
214
+ const pathSegments = urlObj.pathname.split("/").filter(Boolean);
215
+ if (pathSegments.length > 0) {
216
+ const potentialLocale = pathSegments[0];
217
+ if (isLocale(potentialLocale)) {
218
+ return potentialLocale;
219
+ }
220
+ }
221
+ return baseLocale;
222
+ }
223
+ function localizeUrl(url, options) {
224
+ {
225
+ return localizeUrlDefaultPattern(url, options);
226
+ }
227
+ }
228
+ function localizeUrlDefaultPattern(url, options) {
229
+ const urlObj = typeof url === "string" ? new URL(url, getUrlOrigin()) : new URL(url);
230
+ const locale = options?.locale ?? getLocale();
231
+ const currentLocale = extractLocaleFromUrl(urlObj);
232
+ if (currentLocale === locale) {
233
+ return urlObj;
234
+ }
235
+ const pathSegments = urlObj.pathname.split("/").filter(Boolean);
236
+ if (pathSegments.length > 0 && isLocale(pathSegments[0])) {
237
+ pathSegments.shift();
238
+ }
239
+ if (locale === baseLocale) {
240
+ urlObj.pathname = "/" + pathSegments.join("/");
241
+ } else {
242
+ urlObj.pathname = "/" + locale + "/" + pathSegments.join("/");
243
+ }
244
+ return urlObj;
245
+ }
246
+ function deLocalizeUrl(url) {
247
+ {
248
+ return deLocalizeUrlDefaultPattern(url);
249
+ }
250
+ }
251
+ function deLocalizeUrlDefaultPattern(url) {
252
+ const urlObj = typeof url === "string" ? new URL(url, getUrlOrigin()) : new URL(url);
253
+ const pathSegments = urlObj.pathname.split("/").filter(Boolean);
254
+ if (pathSegments.length > 0 && isLocale(pathSegments[0])) {
255
+ urlObj.pathname = "/" + pathSegments.slice(1).join("/");
256
+ }
257
+ return urlObj;
258
+ }
259
+ async function shouldRedirect(input = {}) {
260
+ const locale = (
261
+ /** @type {ReturnType<typeof assertIsLocale>} */
262
+ await resolveLocale(input)
263
+ );
264
+ if (!strategy.includes("url")) {
265
+ return { shouldRedirect: false, locale, redirectUrl: void 0 };
266
+ }
267
+ const currentUrl = resolveUrl(input);
268
+ const localizedUrl = localizeUrl(currentUrl.href, { locale });
269
+ const shouldRedirectToLocalizedUrl = normalizeUrl(localizedUrl.href) !== normalizeUrl(currentUrl.href);
270
+ return {
271
+ shouldRedirect: shouldRedirectToLocalizedUrl,
272
+ locale,
273
+ redirectUrl: shouldRedirectToLocalizedUrl ? localizedUrl : void 0
274
+ };
275
+ }
276
+ async function resolveLocale(input) {
277
+ if (input.locale) {
278
+ return assertIsLocale(input.locale);
279
+ }
280
+ if (input.request) {
281
+ return extractLocaleFromRequestAsync(input.request);
282
+ }
283
+ return getLocale();
284
+ }
285
+ function resolveUrl(input) {
286
+ if (input.request) {
287
+ return new URL(input.request.url);
288
+ }
289
+ if (input.url instanceof URL) {
290
+ return new URL(input.url.href);
291
+ }
292
+ if (typeof input.url === "string") {
293
+ return new URL(input.url, getUrlOrigin());
294
+ }
295
+ if (typeof window !== "undefined" && window?.location?.href) {
296
+ return new URL(window.location.href);
297
+ }
298
+ throw new Error("shouldRedirect() requires either a request, an absolute URL, or must run in a browser environment.");
299
+ }
300
+ function normalizeUrl(url) {
301
+ const urlObj = new URL(url);
302
+ urlObj.pathname = urlObj.pathname.replace(/\/$/, "");
303
+ return urlObj.href;
304
+ }
305
+ function trackMessageCall(safeModuleId, locale) {
306
+ const store = serverAsyncLocalStorage?.getStore();
307
+ if (store) {
308
+ store.messageCalls?.add(`${safeModuleId}:${locale}`);
309
+ }
310
+ }
311
+ const customServerStrategies = /* @__PURE__ */ new Map();
312
+ const customClientStrategies = /* @__PURE__ */ new Map();
313
+ function isCustomStrategy(strategy2) {
314
+ return typeof strategy2 === "string" && /^custom-[A-Za-z0-9_-]+$/.test(strategy2);
315
+ }
316
+
317
+ export { strategy as a, serverAsyncLocalStorage as b, deLocalizeUrl as d, getLocale as g, overwriteServerAsyncLocalStorage as o, shouldRedirect as s, trackMessageCall as t };
318
+ //# sourceMappingURL=runtime-Bf5HkYyl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-Bf5HkYyl.js","sources":["../../../.svelte-kit/adapter-node/chunks/runtime.js"],"sourcesContent":["const baseLocale = \"en\";\nconst locales = (\n /** @type {const} */\n [\"en\", \"es\", \"ru\", \"ua\"]\n);\nconst cookieName = \"PARAGLIDE_LOCALE\";\nconst strategy = [\n \"cookie\",\n \"preferredLanguage\",\n \"globalVariable\",\n \"baseLocale\"\n];\nlet serverAsyncLocalStorage = void 0;\nfunction overwriteServerAsyncLocalStorage(value) {\n serverAsyncLocalStorage = value;\n}\nglobalThis.__paraglide = {};\nlet _locale;\nlet localeInitiallySet = false;\nlet getLocale = () => {\n let locale;\n if (serverAsyncLocalStorage) {\n const locale2 = serverAsyncLocalStorage?.getStore()?.locale;\n if (locale2) {\n return locale2;\n }\n }\n for (const strat of strategy) {\n if (strat === \"cookie\") {\n locale = extractLocaleFromCookie();\n } else if (strat === \"baseLocale\") {\n locale = baseLocale;\n } else if (strat === \"globalVariable\" && _locale !== void 0) {\n locale = _locale;\n } else if (isCustomStrategy(strat) && customClientStrategies.has(strat)) {\n const handler = customClientStrategies.get(strat);\n if (handler) {\n const result = handler.getLocale();\n if (result instanceof Promise) {\n continue;\n }\n locale = result;\n }\n }\n if (locale !== void 0) {\n const asserted = assertIsLocale(locale);\n if (!localeInitiallySet) {\n _locale = asserted;\n localeInitiallySet = true;\n setLocale(asserted, { reload: false });\n }\n return asserted;\n }\n }\n throw new Error(\"No locale found. Read the docs https://inlang.com/m/gerre34r/library-inlang-paraglideJs/errors#no-locale-found\");\n};\nlet setLocale = (newLocale, options) => {\n ({\n ...options\n });\n let currentLocale;\n try {\n currentLocale = getLocale();\n } catch {\n }\n const customSetLocalePromises = [];\n for (const strat of strategy) {\n if (strat === \"globalVariable\") {\n _locale = newLocale;\n } else if (strat === \"cookie\") {\n {\n continue;\n }\n } else if (strat === \"baseLocale\") {\n continue;\n } else if (isCustomStrategy(strat) && customClientStrategies.has(strat)) {\n const handler = customClientStrategies.get(strat);\n if (handler) {\n let result = handler.setLocale(newLocale);\n if (result instanceof Promise) {\n result = result.catch((error) => {\n throw new Error(`Custom strategy \"${strat}\" setLocale failed.`, {\n cause: error\n });\n });\n customSetLocalePromises.push(result);\n }\n }\n }\n }\n if (customSetLocalePromises.length) {\n return Promise.all(customSetLocalePromises).then(() => {\n });\n }\n return;\n};\nlet getUrlOrigin = () => {\n if (serverAsyncLocalStorage) {\n return serverAsyncLocalStorage.getStore()?.origin ?? \"http://fallback.com\";\n } else if (typeof window !== \"undefined\") {\n return window.location.origin;\n }\n return \"http://fallback.com\";\n};\nfunction isLocale(locale) {\n if (typeof locale !== \"string\")\n return false;\n return !locale ? false : locales.some((item) => item.toLowerCase() === locale.toLowerCase());\n}\nfunction assertIsLocale(input) {\n if (typeof input !== \"string\") {\n throw new Error(`Invalid locale: ${input}. Expected a string.`);\n }\n const lowerInput = input.toLowerCase();\n const matchedLocale = locales.find((item) => item.toLowerCase() === lowerInput);\n if (!matchedLocale) {\n throw new Error(`Invalid locale: ${input}. Expected one of: ${locales.join(\", \")}`);\n }\n return matchedLocale;\n}\nconst extractLocaleFromRequest = (request) => {\n let locale;\n for (const strat of strategy) {\n if (strat === \"cookie\") {\n locale = request.headers.get(\"cookie\")?.split(\"; \").find((c) => c.startsWith(cookieName + \"=\"))?.split(\"=\")[1];\n } else if (strat === \"preferredLanguage\") {\n locale = extractLocaleFromHeader(request);\n } else if (strat === \"globalVariable\") {\n locale = _locale;\n } else if (strat === \"baseLocale\") {\n return baseLocale;\n } else if (strat === \"localStorage\") {\n continue;\n } else if (isCustomStrategy(strat)) {\n continue;\n }\n if (locale !== void 0) {\n if (!isLocale(locale)) {\n locale = void 0;\n } else {\n return assertIsLocale(locale);\n }\n }\n }\n throw new Error(\"No locale found. There is an error in your strategy. Try adding 'baseLocale' as the very last strategy. Read more here https://inlang.com/m/gerre34r/library-inlang-paraglideJs/errors#no-locale-found\");\n};\nconst extractLocaleFromRequestAsync = async (request) => {\n let locale;\n for (const strat of strategy) {\n if (isCustomStrategy(strat) && customServerStrategies.has(strat)) {\n const handler = customServerStrategies.get(strat);\n if (handler) {\n locale = await handler.getLocale(request);\n }\n if (locale !== void 0 && isLocale(locale)) {\n return assertIsLocale(locale);\n }\n }\n }\n locale = extractLocaleFromRequest(request);\n return assertIsLocale(locale);\n};\nfunction extractLocaleFromCookie() {\n if (typeof document === \"undefined\" || !document.cookie) {\n return;\n }\n const match = document.cookie.match(new RegExp(`(^| )${cookieName}=([^;]+)`));\n const locale = match?.[2];\n if (isLocale(locale)) {\n return locale;\n }\n return void 0;\n}\nfunction extractLocaleFromHeader(request) {\n const acceptLanguageHeader = request.headers.get(\"accept-language\");\n if (acceptLanguageHeader) {\n const languages = acceptLanguageHeader.split(\",\").map((lang) => {\n const [tag, q = \"1\"] = lang.trim().split(\";q=\");\n const baseTag = tag?.split(\"-\")[0]?.toLowerCase();\n return {\n fullTag: tag?.toLowerCase(),\n baseTag,\n q: Number(q)\n };\n }).sort((a, b) => b.q - a.q);\n for (const lang of languages) {\n if (isLocale(lang.fullTag)) {\n return lang.fullTag;\n } else if (isLocale(lang.baseTag)) {\n return lang.baseTag;\n }\n }\n return void 0;\n }\n return void 0;\n}\nlet cachedUrl;\nlet cachedLocale;\nfunction extractLocaleFromUrl(url) {\n const urlString = typeof url === \"string\" ? url : url.href;\n if (cachedUrl === urlString) {\n return cachedLocale;\n }\n let result;\n {\n result = defaultUrlPatternExtractLocale(url);\n }\n cachedUrl = urlString;\n cachedLocale = result;\n return result;\n}\nfunction defaultUrlPatternExtractLocale(url) {\n const urlObj = new URL(url, \"http://dummy.com\");\n const pathSegments = urlObj.pathname.split(\"/\").filter(Boolean);\n if (pathSegments.length > 0) {\n const potentialLocale = pathSegments[0];\n if (isLocale(potentialLocale)) {\n return potentialLocale;\n }\n }\n return baseLocale;\n}\nfunction localizeUrl(url, options) {\n {\n return localizeUrlDefaultPattern(url, options);\n }\n}\nfunction localizeUrlDefaultPattern(url, options) {\n const urlObj = typeof url === \"string\" ? new URL(url, getUrlOrigin()) : new URL(url);\n const locale = options?.locale ?? getLocale();\n const currentLocale = extractLocaleFromUrl(urlObj);\n if (currentLocale === locale) {\n return urlObj;\n }\n const pathSegments = urlObj.pathname.split(\"/\").filter(Boolean);\n if (pathSegments.length > 0 && isLocale(pathSegments[0])) {\n pathSegments.shift();\n }\n if (locale === baseLocale) {\n urlObj.pathname = \"/\" + pathSegments.join(\"/\");\n } else {\n urlObj.pathname = \"/\" + locale + \"/\" + pathSegments.join(\"/\");\n }\n return urlObj;\n}\nfunction deLocalizeUrl(url) {\n {\n return deLocalizeUrlDefaultPattern(url);\n }\n}\nfunction deLocalizeUrlDefaultPattern(url) {\n const urlObj = typeof url === \"string\" ? new URL(url, getUrlOrigin()) : new URL(url);\n const pathSegments = urlObj.pathname.split(\"/\").filter(Boolean);\n if (pathSegments.length > 0 && isLocale(pathSegments[0])) {\n urlObj.pathname = \"/\" + pathSegments.slice(1).join(\"/\");\n }\n return urlObj;\n}\nasync function shouldRedirect(input = {}) {\n const locale = (\n /** @type {ReturnType<typeof assertIsLocale>} */\n await resolveLocale(input)\n );\n if (!strategy.includes(\"url\")) {\n return { shouldRedirect: false, locale, redirectUrl: void 0 };\n }\n const currentUrl = resolveUrl(input);\n const localizedUrl = localizeUrl(currentUrl.href, { locale });\n const shouldRedirectToLocalizedUrl = normalizeUrl(localizedUrl.href) !== normalizeUrl(currentUrl.href);\n return {\n shouldRedirect: shouldRedirectToLocalizedUrl,\n locale,\n redirectUrl: shouldRedirectToLocalizedUrl ? localizedUrl : void 0\n };\n}\nasync function resolveLocale(input) {\n if (input.locale) {\n return assertIsLocale(input.locale);\n }\n if (input.request) {\n return extractLocaleFromRequestAsync(input.request);\n }\n return getLocale();\n}\nfunction resolveUrl(input) {\n if (input.request) {\n return new URL(input.request.url);\n }\n if (input.url instanceof URL) {\n return new URL(input.url.href);\n }\n if (typeof input.url === \"string\") {\n return new URL(input.url, getUrlOrigin());\n }\n if (typeof window !== \"undefined\" && window?.location?.href) {\n return new URL(window.location.href);\n }\n throw new Error(\"shouldRedirect() requires either a request, an absolute URL, or must run in a browser environment.\");\n}\nfunction normalizeUrl(url) {\n const urlObj = new URL(url);\n urlObj.pathname = urlObj.pathname.replace(/\\/$/, \"\");\n return urlObj.href;\n}\nfunction trackMessageCall(safeModuleId, locale) {\n const store = serverAsyncLocalStorage?.getStore();\n if (store) {\n store.messageCalls?.add(`${safeModuleId}:${locale}`);\n }\n}\nconst customServerStrategies = /* @__PURE__ */ new Map();\nconst customClientStrategies = /* @__PURE__ */ new Map();\nfunction isCustomStrategy(strategy2) {\n return typeof strategy2 === \"string\" && /^custom-[A-Za-z0-9_-]+$/.test(strategy2);\n}\nexport {\n strategy as a,\n serverAsyncLocalStorage as b,\n deLocalizeUrl as d,\n getLocale as g,\n overwriteServerAsyncLocalStorage as o,\n shouldRedirect as s,\n trackMessageCall as t\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ class SessionStore {
2
+ sessions = /* @__PURE__ */ new Map();
3
+ sessionDurationMs;
4
+ storagePath;
5
+ constructor(options = {}) {
6
+ const durationMinutes = options.sessionDurationMinutes || 60;
7
+ this.sessionDurationMs = durationMinutes * 60 * 1e3;
8
+ this.storagePath = options.storagePath;
9
+ if (typeof setInterval !== "undefined") {
10
+ setInterval(() => this.cleanup(), 6e4);
11
+ }
12
+ }
13
+ /**
14
+ * Generate a unique ID
15
+ */
16
+ generateId(prefix) {
17
+ return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
18
+ }
19
+ /**
20
+ * Create a new quiz session
21
+ */
22
+ createSession(quiz, config = {}, customSessionId) {
23
+ const quizId = this.generateId("quiz");
24
+ const sessionId = customSessionId || this.generateId("session");
25
+ const now = /* @__PURE__ */ new Date();
26
+ const expiresAt = new Date(now.getTime() + this.sessionDurationMs);
27
+ const session = {
28
+ quizId,
29
+ sessionId,
30
+ quiz,
31
+ config,
32
+ status: "active",
33
+ startedAt: now.toISOString(),
34
+ expiresAt: expiresAt.toISOString()
35
+ };
36
+ this.sessions.set(`${quizId}:${sessionId}`, session);
37
+ return session;
38
+ }
39
+ /**
40
+ * Get a session by quiz ID and session ID
41
+ */
42
+ getSession(quizId, sessionId) {
43
+ const key = `${quizId}:${sessionId}`;
44
+ const session = this.sessions.get(key);
45
+ if (session) {
46
+ if (new Date(session.expiresAt) < /* @__PURE__ */ new Date()) {
47
+ session.status = "expired";
48
+ this.sessions.delete(key);
49
+ return void 0;
50
+ }
51
+ }
52
+ return session;
53
+ }
54
+ /**
55
+ * Get session by full key
56
+ */
57
+ getSessionByKey(key) {
58
+ const session = this.sessions.get(key);
59
+ if (!session)
60
+ return void 0;
61
+ if (new Date(session.expiresAt) < /* @__PURE__ */ new Date()) {
62
+ session.status = "expired";
63
+ this.sessions.delete(key);
64
+ return void 0;
65
+ }
66
+ return session;
67
+ }
68
+ /**
69
+ * Update session status
70
+ */
71
+ updateStatus(quizId, sessionId, status) {
72
+ const session = this.getSession(quizId, sessionId);
73
+ if (!session)
74
+ return void 0;
75
+ session.status = status;
76
+ if (status === "completed") {
77
+ session.completedAt = (/* @__PURE__ */ new Date()).toISOString();
78
+ } else if (status === "expired") {
79
+ session.completedAt = session.completedAt || (/* @__PURE__ */ new Date()).toISOString();
80
+ }
81
+ return session;
82
+ }
83
+ /**
84
+ * Save answers to session
85
+ */
86
+ saveAnswers(quizId, sessionId, answers) {
87
+ const session = this.getSession(quizId, sessionId);
88
+ if (!session || session.status !== "active")
89
+ return void 0;
90
+ session.answers = answers;
91
+ return session;
92
+ }
93
+ /**
94
+ * Complete session with results
95
+ */
96
+ completeSession(quizId, sessionId, results) {
97
+ const session = this.getSession(quizId, sessionId);
98
+ if (!session)
99
+ return void 0;
100
+ session.status = "completed";
101
+ session.completedAt = (/* @__PURE__ */ new Date()).toISOString();
102
+ session.results = results;
103
+ return session;
104
+ }
105
+ /**
106
+ * Cancel session
107
+ */
108
+ cancelSession(quizId, sessionId, reason) {
109
+ const session = this.getSession(quizId, sessionId);
110
+ if (!session || session.status !== "active")
111
+ return void 0;
112
+ session.status = "completed";
113
+ session.cancelledAt = (/* @__PURE__ */ new Date()).toISOString();
114
+ session.cancelReason = reason;
115
+ return session;
116
+ }
117
+ /**
118
+ * Get all active sessions
119
+ */
120
+ getActiveSessions() {
121
+ const now = /* @__PURE__ */ new Date();
122
+ return Array.from(this.sessions.values()).filter((s) => s.status === "active" && new Date(s.expiresAt) > now);
123
+ }
124
+ /**
125
+ * Get session count
126
+ */
127
+ getSessionCount() {
128
+ const now = /* @__PURE__ */ new Date();
129
+ const active = Array.from(this.sessions.values()).filter((s) => s.status === "active" && new Date(s.expiresAt) > now).length;
130
+ return { active, total: this.sessions.size };
131
+ }
132
+ /**
133
+ * Clean up expired sessions
134
+ */
135
+ cleanup() {
136
+ const now = /* @__PURE__ */ new Date();
137
+ let removed = 0;
138
+ for (const [key, session] of this.sessions.entries()) {
139
+ if (new Date(session.expiresAt) < now) {
140
+ session.status = "expired";
141
+ this.sessions.delete(key);
142
+ removed++;
143
+ }
144
+ }
145
+ return removed;
146
+ }
147
+ /**
148
+ * Clear all sessions
149
+ */
150
+ clear() {
151
+ this.sessions.clear();
152
+ }
153
+ }
154
+ let globalStore = null;
155
+ function getSessionStore() {
156
+ const globalKey = "quiz-mcp-session-store";
157
+ const existingStore = globalThis[globalKey];
158
+ if (existingStore) {
159
+ return existingStore;
160
+ }
161
+ if (!globalStore) {
162
+ globalStore = new SessionStore();
163
+ }
164
+ globalThis[globalKey] = globalStore;
165
+ return globalStore;
166
+ }
167
+
168
+ export { getSessionStore as g };
169
+ //# sourceMappingURL=sessions-CEbRx2vt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-CEbRx2vt.js","sources":["../../../.svelte-kit/adapter-node/chunks/sessions.js"],"sourcesContent":["class SessionStore {\n sessions = /* @__PURE__ */ new Map();\n sessionDurationMs;\n storagePath;\n constructor(options = {}) {\n const durationMinutes = options.sessionDurationMinutes || 60;\n this.sessionDurationMs = durationMinutes * 60 * 1e3;\n this.storagePath = options.storagePath;\n if (typeof setInterval !== \"undefined\") {\n setInterval(() => this.cleanup(), 6e4);\n }\n }\n /**\n * Generate a unique ID\n */\n generateId(prefix) {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n }\n /**\n * Create a new quiz session\n */\n createSession(quiz, config = {}, customSessionId) {\n const quizId = this.generateId(\"quiz\");\n const sessionId = customSessionId || this.generateId(\"session\");\n const now = /* @__PURE__ */ new Date();\n const expiresAt = new Date(now.getTime() + this.sessionDurationMs);\n const session = {\n quizId,\n sessionId,\n quiz,\n config,\n status: \"active\",\n startedAt: now.toISOString(),\n expiresAt: expiresAt.toISOString()\n };\n this.sessions.set(`${quizId}:${sessionId}`, session);\n return session;\n }\n /**\n * Get a session by quiz ID and session ID\n */\n getSession(quizId, sessionId) {\n const key = `${quizId}:${sessionId}`;\n const session = this.sessions.get(key);\n if (session) {\n if (new Date(session.expiresAt) < /* @__PURE__ */ new Date()) {\n session.status = \"expired\";\n this.sessions.delete(key);\n return void 0;\n }\n }\n return session;\n }\n /**\n * Get session by full key\n */\n getSessionByKey(key) {\n const session = this.sessions.get(key);\n if (!session)\n return void 0;\n if (new Date(session.expiresAt) < /* @__PURE__ */ new Date()) {\n session.status = \"expired\";\n this.sessions.delete(key);\n return void 0;\n }\n return session;\n }\n /**\n * Update session status\n */\n updateStatus(quizId, sessionId, status) {\n const session = this.getSession(quizId, sessionId);\n if (!session)\n return void 0;\n session.status = status;\n if (status === \"completed\") {\n session.completedAt = (/* @__PURE__ */ new Date()).toISOString();\n } else if (status === \"expired\") {\n session.completedAt = session.completedAt || (/* @__PURE__ */ new Date()).toISOString();\n }\n return session;\n }\n /**\n * Save answers to session\n */\n saveAnswers(quizId, sessionId, answers) {\n const session = this.getSession(quizId, sessionId);\n if (!session || session.status !== \"active\")\n return void 0;\n session.answers = answers;\n return session;\n }\n /**\n * Complete session with results\n */\n completeSession(quizId, sessionId, results) {\n const session = this.getSession(quizId, sessionId);\n if (!session)\n return void 0;\n session.status = \"completed\";\n session.completedAt = (/* @__PURE__ */ new Date()).toISOString();\n session.results = results;\n return session;\n }\n /**\n * Cancel session\n */\n cancelSession(quizId, sessionId, reason) {\n const session = this.getSession(quizId, sessionId);\n if (!session || session.status !== \"active\")\n return void 0;\n session.status = \"completed\";\n session.cancelledAt = (/* @__PURE__ */ new Date()).toISOString();\n session.cancelReason = reason;\n return session;\n }\n /**\n * Get all active sessions\n */\n getActiveSessions() {\n const now = /* @__PURE__ */ new Date();\n return Array.from(this.sessions.values()).filter((s) => s.status === \"active\" && new Date(s.expiresAt) > now);\n }\n /**\n * Get session count\n */\n getSessionCount() {\n const now = /* @__PURE__ */ new Date();\n const active = Array.from(this.sessions.values()).filter((s) => s.status === \"active\" && new Date(s.expiresAt) > now).length;\n return { active, total: this.sessions.size };\n }\n /**\n * Clean up expired sessions\n */\n cleanup() {\n const now = /* @__PURE__ */ new Date();\n let removed = 0;\n for (const [key, session] of this.sessions.entries()) {\n if (new Date(session.expiresAt) < now) {\n session.status = \"expired\";\n this.sessions.delete(key);\n removed++;\n }\n }\n return removed;\n }\n /**\n * Clear all sessions\n */\n clear() {\n this.sessions.clear();\n }\n}\nlet globalStore = null;\nfunction getSessionStore() {\n const globalKey = \"quiz-mcp-session-store\";\n const existingStore = globalThis[globalKey];\n if (existingStore) {\n return existingStore;\n }\n if (!globalStore) {\n globalStore = new SessionStore();\n }\n globalThis[globalKey] = globalStore;\n return globalStore;\n}\nexport {\n getSessionStore as g\n};\n"],"names":[],"mappings":"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"}