@better-fullstack/types 1.5.4 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,4 +1,6 @@
1
- import { $ as FrontendSchema, $t as RustOrmSchema, A as DATABASE_SETUP_VALUES, An as VersionChannelSchema, At as ProjectNameSchema, B as EcosystemSchema, Bt as RUST_CLI_VALUES, C as CLIInputSchema, Cn as TemplateSchema, Ct as PYTHON_QUALITY_VALUES, D as CSS_FRAMEWORK_VALUES, Dn as VALIDATION_VALUES, Dt as PackageManagerSchema, E as CSSFrameworkSchema, En as UI_LIBRARY_VALUES, Et as PYTHON_WEB_FRAMEWORK_VALUES, F as DirectoryConflictSchema, Ft as PythonValidationSchema, G as FILE_STORAGE_VALUES, Gt as RUST_WEB_FRAMEWORK_VALUES, H as EmailSchema, Ht as RUST_LIBRARIES_VALUES, I as ECOSYSTEM_VALUES, It as PythonWebFrameworkSchema, J as FRONTEND_VALUES, Jt as RustApiSchema, K as FILE_UPLOAD_VALUES, Kt as RealtimeSchema, L as EFFECT_VALUES, Lt as REALTIME_VALUES, M as DIRECTORY_CONFLICT_VALUES, Mn as WebDeploySchema, Mt as PythonOrmSchema, N as DatabaseSchema, Nt as PythonQualitySchema, O as CachingSchema, On as VERSION_CHANNEL_VALUES, Ot as PaymentsSchema, P as DatabaseSetupSchema, Pt as PythonTaskQueueSchema, Q as FormsSchema, Qt as RustLoggingSchema, R as EMAIL_VALUES, Rt as RUNTIME_VALUES, S as CACHING_VALUES, Sn as TESTING_VALUES, St as PYTHON_ORM_VALUES, T as CMS_VALUES, Tn as UILibrarySchema, Tt as PYTHON_VALIDATION_VALUES, U as ExamplesSchema, Ut as RUST_LOGGING_VALUES, V as EffectSchema, Vt as RUST_FRONTEND_VALUES, W as FEATURE_FLAGS_VALUES, Wt as RUST_ORM_VALUES, X as FileStorageSchema, Xt as RustFrontendSchema, Y as FeatureFlagsSchema, Yt as RustCliSchema, Z as FileUploadSchema, Zt as RustLibrariesSchema, _ as AuthSchema, _n as ShadcnIconLibrarySchema, _t as ORM_VALUES, a as ANALYTICS_VALUES, an as SHADCN_COLOR_THEME_VALUES, at as GoApiSchema, b as BetterTStackConfigFileSchema, bn as StateManagementSchema, bt as PAYMENTS_VALUES, c as API_VALUES, cn as SHADCN_RADIUS_VALUES, ct as GoOrmSchema, d as AddInputSchema, dn as SearchSchema, dt as JOB_QUEUE_VALUES, en as RustWebFrameworkSchema, et as GO_API_VALUES, f as AddonsSchema, fn as ServerDeploySchema, ft as JobQueueSchema, g as AstroIntegrationSchema, gn as ShadcnFontSchema, gt as ORMSchema, h as AnimationSchema, hn as ShadcnColorThemeSchema, ht as OBSERVABILITY_VALUES, i as AI_VALUES, in as SHADCN_BASE_VALUES, it as GO_WEB_FRAMEWORK_VALUES, j as DATABASE_VALUES, jn as WEB_DEPLOY_VALUES, jt as PythonAiSchema, k as CreateInputSchema, kn as ValidationSchema, kt as ProjectConfigSchema, l as ASTRO_INTEGRATION_VALUES, ln as SHADCN_STYLE_VALUES, lt as GoWebFrameworkSchema, m as AnalyticsSchema, mn as ShadcnBaseSchema, mt as LoggingSchema, n as AISchema, nn as SERVER_DEPLOY_VALUES, nt as GO_LOGGING_VALUES, o as ANIMATION_VALUES, on as SHADCN_FONT_VALUES, ot as GoCliSchema, p as AiDocsSchema, pn as ShadcnBaseColorSchema, pt as LOGGING_VALUES, q as FORMS_VALUES, qt as RuntimeSchema, r as AI_DOCS_VALUES, rn as SHADCN_BASE_COLOR_VALUES, rt as GO_ORM_VALUES, s as APISchema, sn as SHADCN_ICON_LIBRARY_VALUES, st as GoLoggingSchema, t as ADDONS_VALUES, tn as SEARCH_VALUES, tt as GO_CLI_VALUES, u as AUTH_VALUES, un as STATE_MANAGEMENT_VALUES, ut as InitResultSchema, v as BACKEND_VALUES, vn as ShadcnRadiusSchema, vt as ObservabilitySchema, w as CMSSchema, wn as TestingSchema, wt as PYTHON_TASK_QUEUE_VALUES, x as BetterTStackConfigSchema, xn as TEMPLATE_VALUES, xt as PYTHON_AI_VALUES, y as BackendSchema, yn as ShadcnStyleSchema, yt as PACKAGE_MANAGER_VALUES, z as EXAMPLES_VALUES, zt as RUST_API_VALUES } from "./schemas-PlcPX3a0.mjs";
1
+ import { $ as FrontendSchema, $n as VALIDATION_VALUES, $t as PythonQualitySchema, A as DATABASE_SETUP_VALUES, An as SHADCN_BASE_VALUES, At as LoggingSchema, B as EcosystemSchema, Bn as ShadcnBaseSchema, Bt as PYTHON_ORM_VALUES, C as CLIInputSchema, Cn as RustLibrariesSchema, Ct as JavaBuildToolSchema, D as CSS_FRAMEWORK_VALUES, Dn as SEARCH_VALUES, Dt as JavaWebFrameworkSchema, E as CSSFrameworkSchema, En as RustWebFrameworkSchema, Et as JavaTestingLibrariesSchema, F as DirectoryConflictSchema, Fn as SHADCN_STYLE_VALUES, Ft as PACKAGE_MANAGER_VALUES, G as FILE_STORAGE_VALUES, Gn as ShadcnStyleSchema, Gt as PackageManagerSchema, H as EmailSchema, Hn as ShadcnFontSchema, Ht as PYTHON_TASK_QUEUE_VALUES, I as ECOSYSTEM_VALUES, In as STATE_MANAGEMENT_VALUES, It as PAYMENTS_VALUES, J as FRONTEND_VALUES, Jn as TESTING_VALUES, Jt as ProjectNameSchema, K as FILE_UPLOAD_VALUES, Kn as StateManagementSchema, Kt as PaymentsSchema, L as EFFECT_VALUES, Ln as SearchSchema, Lt as PYTHON_AI_VALUES, M as DIRECTORY_CONFLICT_VALUES, Mn as SHADCN_FONT_VALUES, Mt as ORMSchema, N as DatabaseSchema, Nn as SHADCN_ICON_LIBRARY_VALUES, Nt as ORM_VALUES, O as CachingSchema, On as SERVER_DEPLOY_VALUES, Ot as JobQueueSchema, P as DatabaseSetupSchema, Pn as SHADCN_RADIUS_VALUES, Pt as ObservabilitySchema, Q as FormsSchema, Qn as UI_LIBRARY_VALUES, Qt as PythonOrmSchema, R as EMAIL_VALUES, Rn as ServerDeploySchema, Rt as PYTHON_AUTH_VALUES, S as CACHING_VALUES, Sn as RustFrontendSchema, St as JavaAuthSchema, T as CMS_VALUES, Tn as RustOrmSchema, Tt as JavaOrmSchema, U as ExamplesSchema, Un as ShadcnIconLibrarySchema, Ut as PYTHON_VALIDATION_VALUES, V as EffectSchema, Vn as ShadcnColorThemeSchema, Vt as PYTHON_QUALITY_VALUES, W as FEATURE_FLAGS_VALUES, Wn as ShadcnRadiusSchema, Wt as PYTHON_WEB_FRAMEWORK_VALUES, X as FileStorageSchema, Xn as TestingSchema, Xt as PythonAuthSchema, Y as FeatureFlagsSchema, Yn as TemplateSchema, Yt as PythonAiSchema, Z as FileUploadSchema, Zn as UILibrarySchema, Zt as PythonGraphqlSchema, _ as AuthSchema, _n as RustApiSchema, _t as JAVA_LIBRARIES_VALUES, a as ANALYTICS_VALUES, an as RUST_API_VALUES, at as GO_WEB_FRAMEWORK_VALUES, b as BetterTStackConfigFileSchema, bn as RustCliSchema, bt as JAVA_WEB_FRAMEWORK_VALUES, c as API_VALUES, cn as RUST_CLI_VALUES, ct as GoCliSchema, d as AddInputSchema, dn as RUST_LIBRARIES_VALUES, dt as GoWebFrameworkSchema, en as PythonTaskQueueSchema, er as VERSION_CHANNEL_VALUES, et as GO_API_VALUES, f as AddonsSchema, fn as RUST_LOGGING_VALUES, ft as I18N_VALUES, g as AstroIntegrationSchema, gn as RuntimeSchema, gt as JAVA_BUILD_TOOL_VALUES, h as AnimationSchema, hn as RealtimeSchema, ht as JAVA_AUTH_VALUES, i as AI_VALUES, in as RUNTIME_VALUES, ir as WebDeploySchema, it as GO_ORM_VALUES, j as DATABASE_VALUES, jn as SHADCN_COLOR_THEME_VALUES, jt as OBSERVABILITY_VALUES, k as CreateInputSchema, kn as SHADCN_BASE_COLOR_VALUES, kt as LOGGING_VALUES, l as ASTRO_INTEGRATION_VALUES, ln as RUST_ERROR_HANDLING_VALUES, lt as GoLoggingSchema, m as AnalyticsSchema, mn as RUST_WEB_FRAMEWORK_VALUES, mt as InitResultSchema, n as AISchema, nn as PythonWebFrameworkSchema, nr as VersionChannelSchema, nt as GO_CLI_VALUES, o as ANIMATION_VALUES, on as RUST_AUTH_VALUES, ot as GoApiSchema, p as AiDocsSchema, pn as RUST_ORM_VALUES, pt as I18nSchema, q as FORMS_VALUES, qn as TEMPLATE_VALUES, qt as ProjectConfigSchema, r as AI_DOCS_VALUES, rn as REALTIME_VALUES, rr as WEB_DEPLOY_VALUES, rt as GO_LOGGING_VALUES, s as APISchema, sn as RUST_CACHING_VALUES, st as GoAuthSchema, t as ADDONS_VALUES, tn as PythonValidationSchema, tr as ValidationSchema, tt as GO_AUTH_VALUES, u as AUTH_VALUES, un as RUST_FRONTEND_VALUES, ut as GoOrmSchema, v as BACKEND_VALUES, vn as RustAuthSchema, vt as JAVA_ORM_VALUES, w as CMSSchema, wn as RustLoggingSchema, wt as JavaLibrariesSchema, x as BetterTStackConfigSchema, xn as RustErrorHandlingSchema, xt as JOB_QUEUE_VALUES, y as BackendSchema, yn as RustCachingSchema, yt as JAVA_TESTING_LIBRARIES_VALUES, z as EXAMPLES_VALUES, zn as ShadcnBaseColorSchema, zt as PYTHON_GRAPHQL_VALUES } from "./schemas-Bg3JFNO5.mjs";
2
+ import "./types.mjs";
3
+ import { t as createCliDefaultProjectConfigBase } from "./defaults-aGwVXJh5.mjs";
2
4
 
3
5
  //#region src/capabilities.ts
4
6
  const CAPABILITY_DEFINITIONS = { auth: [
@@ -227,6 +229,7 @@ const CATEGORY_ORDER = [
227
229
  "realtime",
228
230
  "jobQueue",
229
231
  "caching",
232
+ "i18n",
230
233
  "search",
231
234
  "fileStorage",
232
235
  "animation",
@@ -251,13 +254,22 @@ const CATEGORY_ORDER = [
251
254
  "pythonOrm",
252
255
  "pythonValidation",
253
256
  "pythonAi",
257
+ "pythonAuth",
254
258
  "pythonTaskQueue",
259
+ "pythonGraphql",
255
260
  "pythonQuality",
256
261
  "goWebFramework",
257
262
  "goOrm",
258
263
  "goApi",
259
264
  "goCli",
260
- "goLogging"
265
+ "goLogging",
266
+ "goAuth",
267
+ "javaWebFramework",
268
+ "javaBuildTool",
269
+ "javaOrm",
270
+ "javaAuth",
271
+ "javaLibraries",
272
+ "javaTestingLibraries"
261
273
  ];
262
274
  const DEFAULT_RUNTIME = "bun";
263
275
  function validateProjectName(name) {
@@ -314,14 +326,19 @@ const getCategoryDisplayName = (categoryKey) => {
314
326
  rustApi: "Rust API Layer",
315
327
  rustCli: "Rust CLI Tools",
316
328
  rustLibraries: "Rust Core Libraries",
317
- rustLogging: "Rust Logging"
329
+ rustLogging: "Rust Logging",
330
+ rustErrorHandling: "Rust Error Handling",
331
+ rustCaching: "Rust Caching",
332
+ rustAuth: "Rust Auth"
318
333
  };
319
334
  const pythonCategoryNames = {
320
335
  pythonWebFramework: "Python Web Framework",
321
336
  pythonOrm: "Python ORM / Database",
322
337
  pythonValidation: "Python Validation",
323
338
  pythonAi: "Python AI / ML",
339
+ pythonAuth: "Python Auth",
324
340
  pythonTaskQueue: "Python Task Queue",
341
+ pythonGraphql: "Python GraphQL",
325
342
  pythonQuality: "Python Code Quality"
326
343
  };
327
344
  const goCategoryNames = {
@@ -329,11 +346,23 @@ const getCategoryDisplayName = (categoryKey) => {
329
346
  goOrm: "Go ORM / Database",
330
347
  goApi: "Go API Layer",
331
348
  goCli: "Go CLI Tools",
332
- goLogging: "Go Logging"
349
+ goLogging: "Go Logging",
350
+ goAuth: "Go Auth"
351
+ };
352
+ const javaCategoryNames = {
353
+ javaWebFramework: "Java Web Framework",
354
+ javaBuildTool: "Java Build Tool",
355
+ javaOrm: "Java ORM / Database",
356
+ javaAuth: "Java Auth",
357
+ javaLibraries: "Java Libraries",
358
+ javaTestingLibraries: "Java Testing Libraries"
333
359
  };
334
360
  if (rustCategoryNames[categoryKey]) return rustCategoryNames[categoryKey];
335
361
  if (pythonCategoryNames[categoryKey]) return pythonCategoryNames[categoryKey];
336
362
  if (goCategoryNames[categoryKey]) return goCategoryNames[categoryKey];
363
+ if (javaCategoryNames[categoryKey]) return javaCategoryNames[categoryKey];
364
+ const tsCategoryNames = { i18n: "Internationalization (i18n)" };
365
+ if (tsCategoryNames[categoryKey]) return tsCategoryNames[categoryKey];
337
366
  const result = categoryKey.replace(/([A-Z])/g, " $1");
338
367
  return result.charAt(0).toUpperCase() + result.slice(1);
339
368
  };
@@ -1018,6 +1047,52 @@ const analyzeStackCompatibility = (stack) => {
1018
1047
  });
1019
1048
  }
1020
1049
  }
1050
+ if (nextStack.ecosystem === "java") {
1051
+ if (nextStack.javaBuildTool === "none") {
1052
+ if (nextStack.javaWebFramework !== "none") {
1053
+ nextStack.javaWebFramework = "none";
1054
+ changed = true;
1055
+ changes.push({
1056
+ category: "javaBuildTool",
1057
+ message: "Java web framework set to 'None' (source-only Java does not use a framework)"
1058
+ });
1059
+ }
1060
+ if (nextStack.javaTestingLibraries.some((library) => library !== "none")) {
1061
+ nextStack.javaTestingLibraries = [];
1062
+ changed = true;
1063
+ changes.push({
1064
+ category: "javaBuildTool",
1065
+ message: "Java testing libraries cleared (a build tool is required for test dependencies)"
1066
+ });
1067
+ }
1068
+ }
1069
+ if (nextStack.javaWebFramework !== "spring-boot" || nextStack.javaBuildTool === "none") {
1070
+ if (nextStack.javaOrm !== "none") {
1071
+ nextStack.javaOrm = "none";
1072
+ changed = true;
1073
+ changes.push({
1074
+ category: "javaWebFramework",
1075
+ message: "Java ORM set to 'None' (current scaffold only supports it with Spring Boot)"
1076
+ });
1077
+ }
1078
+ if (nextStack.javaAuth !== "none") {
1079
+ nextStack.javaAuth = "none";
1080
+ changed = true;
1081
+ changes.push({
1082
+ category: "javaWebFramework",
1083
+ message: "Java auth set to 'None' (current scaffold only supports it with Spring Boot)"
1084
+ });
1085
+ }
1086
+ if (nextStack.javaLibraries.some((library) => library !== "none")) {
1087
+ nextStack.javaLibraries = [];
1088
+ changed = true;
1089
+ changes.push({
1090
+ category: "javaWebFramework",
1091
+ message: "Java libraries cleared (Spring libraries require Spring Boot)"
1092
+ });
1093
+ }
1094
+ }
1095
+ }
1021
1096
  if (nextStack.webDeploy !== "none" && !nextStack.webFrontend.some((f) => f !== "none")) {
1022
1097
  nextStack.webDeploy = "none";
1023
1098
  changed = true;
@@ -1348,12 +1423,19 @@ const getDisabledReason = (currentStack, category, optionId) => {
1348
1423
  }
1349
1424
  if (category === "webDeploy" && optionId !== "none") {
1350
1425
  if (!currentStack.webFrontend.some((f) => f !== "none")) return "Web deployment requires a web frontend";
1426
+ if (optionId === "vercel") {
1427
+ if (currentStack.webFrontend.some((f) => ["redwood", "fresh"].includes(f))) return "Vercel deployment is not available for Redwood/Fresh (they have their own deploy systems)";
1428
+ }
1351
1429
  }
1352
1430
  if (category === "serverDeploy") {
1353
1431
  if (optionId === "cloudflare") {
1354
1432
  if (currentStack.runtime !== "workers") return "In Better-Fullstack, Cloudflare server deploy currently requires Workers runtime";
1355
1433
  if (currentStack.backend !== "hono") return "In Better-Fullstack, Cloudflare server deploy is currently supported only with Hono";
1356
1434
  }
1435
+ if (optionId === "vercel") {
1436
+ if (["nestjs", "adonisjs"].includes(currentStack.backend)) return "Vercel serverless functions are incompatible with persistent-process backends like NestJS/AdonisJS. Use Fly.io or Railway instead.";
1437
+ if (currentStack.backend === "encore") return "Encore manages its own deployment infrastructure";
1438
+ }
1357
1439
  if (optionId !== "none") {
1358
1440
  if ([
1359
1441
  "none",
@@ -1368,6 +1450,39 @@ const getDisabledReason = (currentStack, category, optionId) => {
1368
1450
  }
1369
1451
  if (optionId === "none" && currentStack.runtime === "workers") return "Workers requires server deployment";
1370
1452
  }
1453
+ if (category === "i18n") {
1454
+ if (optionId === "next-intl") {
1455
+ if (!currentStack.webFrontend.includes("next")) return "next-intl requires Next.js";
1456
+ }
1457
+ }
1458
+ if (category === "javaWebFramework") {
1459
+ if (optionId === "spring-boot" && currentStack.javaBuildTool === "none") return "Spring Boot requires Maven or Gradle";
1460
+ }
1461
+ if (category === "javaBuildTool") {
1462
+ if (optionId === "none") {
1463
+ if (currentStack.javaWebFramework === "spring-boot") return "Spring Boot requires Maven or Gradle";
1464
+ if (currentStack.javaOrm !== "none") return "Java ORM support requires Maven or Gradle";
1465
+ if (currentStack.javaAuth !== "none") return "Java auth support requires Maven or Gradle";
1466
+ if (currentStack.javaLibraries.some((library) => library !== "none")) return "Java libraries require Maven or Gradle";
1467
+ if (currentStack.javaTestingLibraries.some((library) => library !== "none")) return "Java testing libraries require Maven or Gradle";
1468
+ }
1469
+ }
1470
+ if (category === "javaOrm") {
1471
+ if (optionId !== "none" && currentStack.javaWebFramework !== "spring-boot") return "Java ORM support currently requires Spring Boot";
1472
+ if (optionId !== "none" && currentStack.javaBuildTool === "none") return "Java ORM support requires Maven or Gradle";
1473
+ }
1474
+ if (category === "javaAuth") {
1475
+ if (optionId !== "none" && currentStack.javaWebFramework !== "spring-boot") return "Java auth support currently requires Spring Boot";
1476
+ if (optionId !== "none" && currentStack.javaBuildTool === "none") return "Java auth support requires Maven or Gradle";
1477
+ }
1478
+ if (category === "javaLibraries") {
1479
+ if (optionId !== "none" && currentStack.javaWebFramework !== "spring-boot") return "Spring libraries currently require Spring Boot in the Java scaffold";
1480
+ if (optionId !== "none" && currentStack.javaBuildTool === "none") return "Java libraries require Maven or Gradle";
1481
+ if (optionId === "flyway" && currentStack.javaOrm !== "spring-data-jpa") return "Flyway currently requires Spring Data JPA in the Java scaffold";
1482
+ }
1483
+ if (category === "javaTestingLibraries") {
1484
+ if (optionId !== "none" && currentStack.javaBuildTool === "none") return "Java testing libraries require Maven or Gradle";
1485
+ }
1371
1486
  return null;
1372
1487
  };
1373
1488
  const isOptionCompatible = (currentStack, category, optionId) => {
@@ -1730,12 +1845,21 @@ function allowedApisForFrontends(frontends = [], astroIntegration) {
1730
1845
  "orpc",
1731
1846
  "ts-rest",
1732
1847
  "garph",
1848
+ "graphql-yoga",
1733
1849
  "none"
1734
1850
  ];
1735
- if (includesQwik || includesAngular || includesRedwood || includesFresh) return ["none"];
1851
+ if (includesQwik || includesAngular || includesRedwood || includesFresh) return ["graphql-yoga", "none"];
1736
1852
  const includesSolidStartApi = frontends.includes("solid-start");
1737
- if (includesNuxt || includesSvelte || includesSolid || includesSolidStartApi) return ["orpc", "none"];
1738
- if (includesAstro && astroIntegration && astroIntegration !== "react") return ["orpc", "none"];
1853
+ if (includesNuxt || includesSvelte || includesSolid || includesSolidStartApi) return [
1854
+ "orpc",
1855
+ "graphql-yoga",
1856
+ "none"
1857
+ ];
1858
+ if (includesAstro && astroIntegration && astroIntegration !== "react") return [
1859
+ "orpc",
1860
+ "graphql-yoga",
1861
+ "none"
1862
+ ];
1739
1863
  return base;
1740
1864
  }
1741
1865
  function isFrontendAllowedWithBackend(frontend, backend, auth) {
@@ -1747,7 +1871,7 @@ function isFrontendAllowedWithBackend(frontend, backend, auth) {
1747
1871
  if (backend === "convex" && frontend === "redwood") return false;
1748
1872
  if (backend === "convex" && frontend === "fresh") return false;
1749
1873
  if (frontend === "qwik" && backend && backend !== "none") return false;
1750
- if (frontend === "angular" && backend && backend !== "none") return false;
1874
+ if (frontend === "angular" && backend === "self") return false;
1751
1875
  if (frontend === "redwood" && backend && backend !== "none") return false;
1752
1876
  if (frontend === "fresh" && backend && backend !== "none") return false;
1753
1877
  if (auth && auth !== "none") return getCapabilityDisabledReason("auth", {
@@ -1886,7 +2010,11 @@ function evaluateCompatibility(input) {
1886
2010
  ["forms", input.forms],
1887
2011
  ["stateManagement", input.stateManagement],
1888
2012
  ["animation", input.animation],
1889
- ["ai", input.aiSdk]
2013
+ ["ai", input.aiSdk],
2014
+ ["javaWebFramework", input.javaWebFramework],
2015
+ ["javaBuildTool", input.javaBuildTool],
2016
+ ["javaOrm", input.javaOrm],
2017
+ ["javaAuth", input.javaAuth]
1890
2018
  ];
1891
2019
  for (const [category, optionId] of scalarChecks) {
1892
2020
  const reason = getDisabledReason(input, category, optionId);
@@ -1919,6 +2047,24 @@ function evaluateCompatibility(input) {
1919
2047
  optionId: addon
1920
2048
  });
1921
2049
  }
2050
+ for (const javaLibrary of input.javaLibraries) {
2051
+ const reason = getDisabledReason(input, "javaLibraries", javaLibrary);
2052
+ if (reason) issues.push({
2053
+ code: "INCOMPATIBLE_JAVA_LIBRARY",
2054
+ message: reason,
2055
+ category: "javaLibraries",
2056
+ optionId: javaLibrary
2057
+ });
2058
+ }
2059
+ for (const testingLibrary of input.javaTestingLibraries) {
2060
+ const reason = getDisabledReason(input, "javaTestingLibraries", testingLibrary);
2061
+ if (reason) issues.push({
2062
+ code: "INCOMPATIBLE_JAVA_TESTING_LIBRARY",
2063
+ message: reason,
2064
+ category: "javaTestingLibraries",
2065
+ optionId: testingLibrary
2066
+ });
2067
+ }
1922
2068
  return { issues };
1923
2069
  }
1924
2070
 
@@ -2000,7 +2146,11 @@ const MULTI_SELECT_CATEGORIES = new Set([
2000
2146
  "documentation",
2001
2147
  "appPlatforms",
2002
2148
  "examples",
2003
- "aiDocs"
2149
+ "aiDocs",
2150
+ "rustLibraries",
2151
+ "pythonAi",
2152
+ "javaLibraries",
2153
+ "javaTestingLibraries"
2004
2154
  ]);
2005
2155
  const CATEGORY_VALUE_IDS = {
2006
2156
  api: API_VALUES,
@@ -2028,6 +2178,7 @@ const CATEGORY_VALUE_IDS = {
2028
2178
  realtime: REALTIME_VALUES,
2029
2179
  jobQueue: JOB_QUEUE_VALUES,
2030
2180
  caching: CACHING_VALUES,
2181
+ i18n: I18N_VALUES,
2031
2182
  search: SEARCH_VALUES,
2032
2183
  fileStorage: FILE_STORAGE_VALUES,
2033
2184
  animation: ANIMATION_VALUES,
@@ -2061,22 +2212,35 @@ const CATEGORY_VALUE_IDS = {
2061
2212
  rustCli: RUST_CLI_VALUES,
2062
2213
  rustLibraries: RUST_LIBRARIES_VALUES,
2063
2214
  rustLogging: RUST_LOGGING_VALUES,
2215
+ rustErrorHandling: RUST_ERROR_HANDLING_VALUES,
2216
+ rustCaching: RUST_CACHING_VALUES,
2217
+ rustAuth: RUST_AUTH_VALUES,
2064
2218
  pythonWebFramework: PYTHON_WEB_FRAMEWORK_VALUES,
2065
2219
  pythonOrm: PYTHON_ORM_VALUES,
2066
2220
  pythonValidation: PYTHON_VALIDATION_VALUES,
2067
2221
  pythonAi: PYTHON_AI_VALUES,
2222
+ pythonAuth: PYTHON_AUTH_VALUES,
2068
2223
  pythonTaskQueue: PYTHON_TASK_QUEUE_VALUES,
2224
+ pythonGraphql: PYTHON_GRAPHQL_VALUES,
2069
2225
  pythonQuality: PYTHON_QUALITY_VALUES,
2070
2226
  goWebFramework: GO_WEB_FRAMEWORK_VALUES,
2071
2227
  goOrm: GO_ORM_VALUES,
2072
2228
  goApi: GO_API_VALUES,
2073
2229
  goCli: GO_CLI_VALUES,
2074
- goLogging: GO_LOGGING_VALUES
2230
+ goLogging: GO_LOGGING_VALUES,
2231
+ goAuth: GO_AUTH_VALUES,
2232
+ javaWebFramework: JAVA_WEB_FRAMEWORK_VALUES,
2233
+ javaBuildTool: JAVA_BUILD_TOOL_VALUES,
2234
+ javaOrm: JAVA_ORM_VALUES,
2235
+ javaAuth: JAVA_AUTH_VALUES,
2236
+ javaLibraries: JAVA_LIBRARIES_VALUES,
2237
+ javaTestingLibraries: JAVA_TESTING_LIBRARIES_VALUES
2075
2238
  };
2076
2239
  const EXACT_LABEL_OVERRIDES = {
2077
2240
  api: {
2078
2241
  trpc: "tRPC",
2079
- orpc: "oRPC"
2242
+ orpc: "oRPC",
2243
+ "graphql-yoga": "GraphQL Yoga"
2080
2244
  },
2081
2245
  webFrontend: {
2082
2246
  next: "Next.js",
@@ -2124,12 +2288,14 @@ const EXACT_LABEL_OVERRIDES = {
2124
2288
  webDeploy: {
2125
2289
  cloudflare: "Cloudflare",
2126
2290
  fly: "Fly.io",
2127
- sst: "SST"
2291
+ sst: "SST",
2292
+ vercel: "Vercel"
2128
2293
  },
2129
2294
  serverDeploy: {
2130
2295
  cloudflare: "Cloudflare",
2131
2296
  fly: "Fly.io",
2132
- sst: "SST"
2297
+ sst: "SST",
2298
+ vercel: "Vercel"
2133
2299
  },
2134
2300
  cms: { tinacms: "TinaCMS" },
2135
2301
  auth: {},
@@ -2177,6 +2343,10 @@ const EXACT_LABEL_OVERRIDES = {
2177
2343
  bullmq: "BullMQ",
2178
2344
  "trigger-dev": "Trigger.dev"
2179
2345
  },
2346
+ i18n: {
2347
+ i18next: "i18next",
2348
+ "next-intl": "next-intl"
2349
+ },
2180
2350
  search: {
2181
2351
  meilisearch: "Meilisearch",
2182
2352
  typesense: "Typesense",
@@ -2306,7 +2476,8 @@ const EXACT_LABEL_OVERRIDES = {
2306
2476
  shadcnRadius: { default: "Default" },
2307
2477
  rustWebFramework: {
2308
2478
  axum: "Axum",
2309
- "actix-web": "Actix-web"
2479
+ "actix-web": "Actix-web",
2480
+ rocket: "Rocket"
2310
2481
  },
2311
2482
  rustFrontend: {
2312
2483
  leptos: "Leptos",
@@ -2314,7 +2485,8 @@ const EXACT_LABEL_OVERRIDES = {
2314
2485
  },
2315
2486
  rustOrm: {
2316
2487
  "sea-orm": "SeaORM",
2317
- sqlx: "SQLx"
2488
+ sqlx: "SQLx",
2489
+ diesel: "Diesel"
2318
2490
  },
2319
2491
  rustApi: {
2320
2492
  "async-graphql": "async-graphql",
@@ -2336,14 +2508,25 @@ const EXACT_LABEL_OVERRIDES = {
2336
2508
  tracing: "Tracing",
2337
2509
  "env-logger": "env_logger"
2338
2510
  },
2511
+ rustErrorHandling: {
2512
+ "anyhow-thiserror": "anyhow + thiserror",
2513
+ eyre: "eyre + color-eyre"
2514
+ },
2515
+ rustCaching: {
2516
+ moka: "Moka",
2517
+ redis: "Redis"
2518
+ },
2519
+ rustAuth: { oauth2: "OAuth2" },
2339
2520
  pythonWebFramework: {
2340
2521
  fastapi: "FastAPI",
2341
2522
  django: "Django",
2342
- flask: "Flask"
2523
+ flask: "Flask",
2524
+ litestar: "Litestar"
2343
2525
  },
2344
2526
  pythonOrm: {
2345
2527
  sqlalchemy: "SQLAlchemy",
2346
- sqlmodel: "SQLModel"
2528
+ sqlmodel: "SQLModel",
2529
+ "tortoise-orm": "Tortoise ORM"
2347
2530
  },
2348
2531
  pythonValidation: { pydantic: "Pydantic" },
2349
2532
  pythonAi: {
@@ -2354,23 +2537,51 @@ const EXACT_LABEL_OVERRIDES = {
2354
2537
  langgraph: "LangGraph",
2355
2538
  crewai: "CrewAI"
2356
2539
  },
2540
+ pythonAuth: {
2541
+ authlib: "Authlib",
2542
+ jwt: "JWT (python-jose)"
2543
+ },
2357
2544
  pythonTaskQueue: { celery: "Celery" },
2545
+ pythonGraphql: { strawberry: "Strawberry" },
2358
2546
  pythonQuality: { ruff: "Ruff" },
2359
2547
  goWebFramework: {
2360
2548
  gin: "Gin",
2361
2549
  echo: "Echo",
2362
- fiber: "Fiber"
2550
+ fiber: "Fiber",
2551
+ chi: "Chi"
2363
2552
  },
2364
2553
  goOrm: {
2365
2554
  gorm: "GORM",
2366
- sqlc: "sqlc"
2555
+ sqlc: "sqlc",
2556
+ ent: "Ent"
2367
2557
  },
2368
2558
  goApi: { "grpc-go": "gRPC-Go" },
2369
2559
  goCli: {
2370
2560
  cobra: "Cobra",
2371
2561
  bubbletea: "Bubble Tea"
2372
2562
  },
2373
- goLogging: { zap: "Zap" }
2563
+ goLogging: {
2564
+ zap: "Zap",
2565
+ zerolog: "Zerolog",
2566
+ slog: "slog"
2567
+ },
2568
+ goAuth: {
2569
+ casbin: "Casbin",
2570
+ jwt: "golang-jwt"
2571
+ },
2572
+ javaWebFramework: { "spring-boot": "Spring Boot" },
2573
+ javaBuildTool: { maven: "Maven" },
2574
+ javaOrm: { "spring-data-jpa": "Spring Data JPA" },
2575
+ javaAuth: { "spring-security": "Spring Security" },
2576
+ javaLibraries: {
2577
+ "spring-actuator": "Spring Boot Actuator",
2578
+ "spring-validation": "Spring Validation"
2579
+ },
2580
+ javaTestingLibraries: {
2581
+ junit5: "JUnit 5",
2582
+ mockito: "Mockito",
2583
+ testcontainers: "Testcontainers"
2584
+ }
2374
2585
  };
2375
2586
  const OPTION_ALIASES = {
2376
2587
  webFrontend: { svelte: ["sveltekit"] },
@@ -2455,6 +2666,7 @@ const OPTION_CATEGORY_METADATA = {
2455
2666
  realtime: buildCategoryMetadata("realtime"),
2456
2667
  jobQueue: buildCategoryMetadata("jobQueue"),
2457
2668
  caching: buildCategoryMetadata("caching"),
2669
+ i18n: buildCategoryMetadata("i18n"),
2458
2670
  search: buildCategoryMetadata("search"),
2459
2671
  fileStorage: buildCategoryMetadata("fileStorage"),
2460
2672
  animation: buildCategoryMetadata("animation"),
@@ -2488,17 +2700,29 @@ const OPTION_CATEGORY_METADATA = {
2488
2700
  rustCli: buildCategoryMetadata("rustCli"),
2489
2701
  rustLibraries: buildCategoryMetadata("rustLibraries"),
2490
2702
  rustLogging: buildCategoryMetadata("rustLogging"),
2703
+ rustErrorHandling: buildCategoryMetadata("rustErrorHandling"),
2704
+ rustCaching: buildCategoryMetadata("rustCaching"),
2705
+ rustAuth: buildCategoryMetadata("rustAuth"),
2491
2706
  pythonWebFramework: buildCategoryMetadata("pythonWebFramework"),
2492
2707
  pythonOrm: buildCategoryMetadata("pythonOrm"),
2493
2708
  pythonValidation: buildCategoryMetadata("pythonValidation"),
2494
2709
  pythonAi: buildCategoryMetadata("pythonAi"),
2710
+ pythonAuth: buildCategoryMetadata("pythonAuth"),
2495
2711
  pythonTaskQueue: buildCategoryMetadata("pythonTaskQueue"),
2712
+ pythonGraphql: buildCategoryMetadata("pythonGraphql"),
2496
2713
  pythonQuality: buildCategoryMetadata("pythonQuality"),
2497
2714
  goWebFramework: buildCategoryMetadata("goWebFramework"),
2498
2715
  goOrm: buildCategoryMetadata("goOrm"),
2499
2716
  goApi: buildCategoryMetadata("goApi"),
2500
2717
  goCli: buildCategoryMetadata("goCli"),
2501
- goLogging: buildCategoryMetadata("goLogging")
2718
+ goLogging: buildCategoryMetadata("goLogging"),
2719
+ goAuth: buildCategoryMetadata("goAuth"),
2720
+ javaWebFramework: buildCategoryMetadata("javaWebFramework"),
2721
+ javaBuildTool: buildCategoryMetadata("javaBuildTool"),
2722
+ javaOrm: buildCategoryMetadata("javaOrm"),
2723
+ javaAuth: buildCategoryMetadata("javaAuth"),
2724
+ javaLibraries: buildCategoryMetadata("javaLibraries"),
2725
+ javaTestingLibraries: buildCategoryMetadata("javaTestingLibraries")
2502
2726
  };
2503
2727
  const OPTION_LOOKUP = Object.fromEntries(Object.entries(OPTION_CATEGORY_METADATA).map(([category, metadata]) => [category, new Map(metadata.options.flatMap((option) => [[option.id.toLowerCase(), option.id], ...option.aliases.map((alias) => [alias.toLowerCase(), option.id])]))]));
2504
2728
  function isMultiSelectCategory(category) {
@@ -2525,10 +2749,13 @@ const VITE_WEB_FRONTENDS = new Set([
2525
2749
  "svelte",
2526
2750
  "fresh"
2527
2751
  ]);
2752
+ const ASTRO_WEB_FRONTENDS = new Set(["astro"]);
2528
2753
  function getLocalWebDevPort(frontend) {
2529
- return frontend.some((entry) => VITE_WEB_FRONTENDS.has(entry)) ? 5173 : 3001;
2754
+ if (frontend.some((entry) => VITE_WEB_FRONTENDS.has(entry))) return 5173;
2755
+ if (frontend.some((entry) => ASTRO_WEB_FRONTENDS.has(entry))) return 4321;
2756
+ return 3001;
2530
2757
  }
2531
2758
 
2532
2759
  //#endregion
2533
- export { ADDONS_VALUES, AISchema, AI_DOCS_VALUES, AI_VALUES, ANALYTICS_VALUES, ANIMATION_VALUES, APISchema, API_VALUES, ASTRO_INTEGRATION_VALUES, AUTH_VALUES, AddInputSchema, AddonsSchema, AiDocsSchema, AnalyticsSchema, AnimationSchema, AstroIntegrationSchema, AuthSchema, BACKEND_VALUES, BackendSchema, BetterTStackConfigFileSchema, BetterTStackConfigSchema, CACHING_VALUES, CLIInputSchema, CMSSchema, CMS_VALUES, CSSFrameworkSchema, CSS_FRAMEWORK_VALUES, CachingSchema, CreateInputSchema, DATABASE_SETUP_VALUES, DATABASE_VALUES, DIRECTORY_CONFLICT_VALUES, DatabaseSchema, DatabaseSetupSchema, DirectoryConflictSchema, ECOSYSTEM_VALUES, EFFECT_VALUES, EMAIL_VALUES, EXAMPLES_VALUES, EcosystemSchema, EffectSchema, EmailSchema, ExamplesSchema, FEATURE_FLAGS_VALUES, FILE_STORAGE_VALUES, FILE_UPLOAD_VALUES, FORMS_VALUES, FRONTEND_VALUES, FeatureFlagsSchema, FileStorageSchema, FileUploadSchema, FormsSchema, FrontendSchema, GO_API_VALUES, GO_CLI_VALUES, GO_LOGGING_VALUES, GO_ORM_VALUES, GO_WEB_FRAMEWORK_VALUES, GoApiSchema, GoCliSchema, GoLoggingSchema, GoOrmSchema, GoWebFrameworkSchema, InitResultSchema, JOB_QUEUE_VALUES, JobQueueSchema, LOGGING_VALUES, LoggingSchema, OBSERVABILITY_VALUES, OPTION_CATEGORY_METADATA, ORMSchema, ORM_VALUES, ObservabilitySchema, PACKAGE_MANAGER_VALUES, PAYMENTS_VALUES, PYTHON_AI_VALUES, PYTHON_ORM_VALUES, PYTHON_QUALITY_VALUES, PYTHON_TASK_QUEUE_VALUES, PYTHON_VALIDATION_VALUES, PYTHON_WEB_FRAMEWORK_VALUES, PackageManagerSchema, PaymentsSchema, ProjectConfigSchema, ProjectNameSchema, PythonAiSchema, PythonOrmSchema, PythonQualitySchema, PythonTaskQueueSchema, PythonValidationSchema, PythonWebFrameworkSchema, REALTIME_VALUES, RUNTIME_VALUES, RUST_API_VALUES, RUST_CLI_VALUES, RUST_FRONTEND_VALUES, RUST_LIBRARIES_VALUES, RUST_LOGGING_VALUES, RUST_ORM_VALUES, RUST_WEB_FRAMEWORK_VALUES, RealtimeSchema, RuntimeSchema, RustApiSchema, RustCliSchema, RustFrontendSchema, RustLibrariesSchema, RustLoggingSchema, RustOrmSchema, RustWebFrameworkSchema, SEARCH_VALUES, SERVER_DEPLOY_VALUES, SHADCN_BASE_COLOR_VALUES, SHADCN_BASE_VALUES, SHADCN_COLOR_THEME_VALUES, SHADCN_FONT_VALUES, SHADCN_ICON_LIBRARY_VALUES, SHADCN_RADIUS_VALUES, SHADCN_STYLE_VALUES, STATE_MANAGEMENT_VALUES, SearchSchema, ServerDeploySchema, ShadcnBaseColorSchema, ShadcnBaseSchema, ShadcnColorThemeSchema, ShadcnFontSchema, ShadcnIconLibrarySchema, ShadcnRadiusSchema, ShadcnStyleSchema, StateManagementSchema, TEMPLATE_VALUES, TESTING_VALUES, TemplateSchema, TestingSchema, UILibrarySchema, UI_LIBRARY_VALUES, VALIDATION_VALUES, VERSION_CHANNEL_VALUES, ValidationSchema, VersionChannelSchema, WEB_DEPLOY_VALUES, WebDeploySchema, allowedApisForFrontends, analyzeStackCompatibility, evaluateCompatibility, getCapabilityDefinitions, getCapabilityDisabledReason, getCategoryCliValues, getCategoryDisplayName, getCategoryOptionIds, getCompatibleAddons, getCompatibleCSSFrameworks, getCompatibleFormLibraries, getCompatibleUILibraries, getDisabledReason, getLocalWebDevPort, getOptionMetadata, getSupportedCapabilityOptions, hasPWACompatibleFrontend, hasTauriCompatibleFrontend, hasWebStyling, isExampleAIAllowed, isExampleChatSdkAllowed, isFrontendAllowedWithBackend, isMultiSelectCategory, isOptionCompatible, isWebFrontend, normalizeCapabilitySelection, normalizeOptionId, requiresChatSdkVercelAI, requiresChatSdkVercelAIForSelection, splitFrontends, validateAddonCompatibility, validateProjectName };
2760
+ export { ADDONS_VALUES, AISchema, AI_DOCS_VALUES, AI_VALUES, ANALYTICS_VALUES, ANIMATION_VALUES, APISchema, API_VALUES, ASTRO_INTEGRATION_VALUES, AUTH_VALUES, AddInputSchema, AddonsSchema, AiDocsSchema, AnalyticsSchema, AnimationSchema, AstroIntegrationSchema, AuthSchema, BACKEND_VALUES, BackendSchema, BetterTStackConfigFileSchema, BetterTStackConfigSchema, CACHING_VALUES, CLIInputSchema, CMSSchema, CMS_VALUES, CSSFrameworkSchema, CSS_FRAMEWORK_VALUES, CachingSchema, CreateInputSchema, DATABASE_SETUP_VALUES, DATABASE_VALUES, DIRECTORY_CONFLICT_VALUES, DatabaseSchema, DatabaseSetupSchema, DirectoryConflictSchema, ECOSYSTEM_VALUES, EFFECT_VALUES, EMAIL_VALUES, EXAMPLES_VALUES, EcosystemSchema, EffectSchema, EmailSchema, ExamplesSchema, FEATURE_FLAGS_VALUES, FILE_STORAGE_VALUES, FILE_UPLOAD_VALUES, FORMS_VALUES, FRONTEND_VALUES, FeatureFlagsSchema, FileStorageSchema, FileUploadSchema, FormsSchema, FrontendSchema, GO_API_VALUES, GO_AUTH_VALUES, GO_CLI_VALUES, GO_LOGGING_VALUES, GO_ORM_VALUES, GO_WEB_FRAMEWORK_VALUES, GoApiSchema, GoAuthSchema, GoCliSchema, GoLoggingSchema, GoOrmSchema, GoWebFrameworkSchema, I18N_VALUES, I18nSchema, InitResultSchema, JAVA_AUTH_VALUES, JAVA_BUILD_TOOL_VALUES, JAVA_LIBRARIES_VALUES, JAVA_ORM_VALUES, JAVA_TESTING_LIBRARIES_VALUES, JAVA_WEB_FRAMEWORK_VALUES, JOB_QUEUE_VALUES, JavaAuthSchema, JavaBuildToolSchema, JavaLibrariesSchema, JavaOrmSchema, JavaTestingLibrariesSchema, JavaWebFrameworkSchema, JobQueueSchema, LOGGING_VALUES, LoggingSchema, OBSERVABILITY_VALUES, OPTION_CATEGORY_METADATA, ORMSchema, ORM_VALUES, ObservabilitySchema, PACKAGE_MANAGER_VALUES, PAYMENTS_VALUES, PYTHON_AI_VALUES, PYTHON_AUTH_VALUES, PYTHON_GRAPHQL_VALUES, PYTHON_ORM_VALUES, PYTHON_QUALITY_VALUES, PYTHON_TASK_QUEUE_VALUES, PYTHON_VALIDATION_VALUES, PYTHON_WEB_FRAMEWORK_VALUES, PackageManagerSchema, PaymentsSchema, ProjectConfigSchema, ProjectNameSchema, PythonAiSchema, PythonAuthSchema, PythonGraphqlSchema, PythonOrmSchema, PythonQualitySchema, PythonTaskQueueSchema, PythonValidationSchema, PythonWebFrameworkSchema, REALTIME_VALUES, RUNTIME_VALUES, RUST_API_VALUES, RUST_AUTH_VALUES, RUST_CACHING_VALUES, RUST_CLI_VALUES, RUST_ERROR_HANDLING_VALUES, RUST_FRONTEND_VALUES, RUST_LIBRARIES_VALUES, RUST_LOGGING_VALUES, RUST_ORM_VALUES, RUST_WEB_FRAMEWORK_VALUES, RealtimeSchema, RuntimeSchema, RustApiSchema, RustAuthSchema, RustCachingSchema, RustCliSchema, RustErrorHandlingSchema, RustFrontendSchema, RustLibrariesSchema, RustLoggingSchema, RustOrmSchema, RustWebFrameworkSchema, SEARCH_VALUES, SERVER_DEPLOY_VALUES, SHADCN_BASE_COLOR_VALUES, SHADCN_BASE_VALUES, SHADCN_COLOR_THEME_VALUES, SHADCN_FONT_VALUES, SHADCN_ICON_LIBRARY_VALUES, SHADCN_RADIUS_VALUES, SHADCN_STYLE_VALUES, STATE_MANAGEMENT_VALUES, SearchSchema, ServerDeploySchema, ShadcnBaseColorSchema, ShadcnBaseSchema, ShadcnColorThemeSchema, ShadcnFontSchema, ShadcnIconLibrarySchema, ShadcnRadiusSchema, ShadcnStyleSchema, StateManagementSchema, TEMPLATE_VALUES, TESTING_VALUES, TemplateSchema, TestingSchema, UILibrarySchema, UI_LIBRARY_VALUES, VALIDATION_VALUES, VERSION_CHANNEL_VALUES, ValidationSchema, VersionChannelSchema, WEB_DEPLOY_VALUES, WebDeploySchema, allowedApisForFrontends, analyzeStackCompatibility, createCliDefaultProjectConfigBase, evaluateCompatibility, getCapabilityDefinitions, getCapabilityDisabledReason, getCategoryCliValues, getCategoryDisplayName, getCategoryOptionIds, getCompatibleAddons, getCompatibleCSSFrameworks, getCompatibleFormLibraries, getCompatibleUILibraries, getDisabledReason, getLocalWebDevPort, getOptionMetadata, getSupportedCapabilityOptions, hasPWACompatibleFrontend, hasTauriCompatibleFrontend, hasWebStyling, isExampleAIAllowed, isExampleChatSdkAllowed, isFrontendAllowedWithBackend, isMultiSelectCategory, isOptionCompatible, isWebFrontend, normalizeCapabilitySelection, normalizeOptionId, requiresChatSdkVercelAI, requiresChatSdkVercelAIForSelection, splitFrontends, validateAddonCompatibility, validateProjectName };
2534
2761
  //# sourceMappingURL=index.mjs.map