gemi 0.4.41 → 0.4.43

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 (146) hide show
  1. package/dist/app/App.d.ts +1 -0
  2. package/dist/app/App.d.ts.map +1 -1
  3. package/dist/app/createFlatApiRoutes.d.ts +6 -4
  4. package/dist/app/createFlatApiRoutes.d.ts.map +1 -1
  5. package/dist/app/createFlatViewRoutes.d.ts +6 -4
  6. package/dist/app/createFlatViewRoutes.d.ts.map +1 -1
  7. package/dist/app/index.js +65 -65
  8. package/dist/chunk-00935722c776a294.js +2 -0
  9. package/dist/chunk-00e9dad0734d9761.js +2 -0
  10. package/dist/chunk-01052ff9d1c07ef8.js +1 -1
  11. package/dist/chunk-030b4fb955329860.js +16 -0
  12. package/dist/chunk-03c8e645c994d40a.js +1 -1
  13. package/dist/chunk-08539d08fa7362f7.js +2 -0
  14. package/dist/chunk-09dd89e1046786a5.js +2 -0
  15. package/dist/chunk-1900e90c372bb1d6.js +1 -1
  16. package/dist/chunk-29c46abebbc0f09b.js +2 -0
  17. package/dist/chunk-2b3eabd01b2ae3f8.js +2 -0
  18. package/dist/chunk-2ecc077efab285b4.js +2 -0
  19. package/dist/chunk-2f6867d08b95f2d2.js +2 -0
  20. package/dist/chunk-3567e8e424a60c99.js +18 -0
  21. package/dist/chunk-3a3092db69408490.js +2 -0
  22. package/dist/chunk-3aecba8553e036bf.js +6 -0
  23. package/dist/chunk-40c21fe243675250.js +2 -0
  24. package/dist/chunk-487b7c0cb388d533.js +6 -0
  25. package/dist/chunk-488b4db0c522d44a.js +1 -0
  26. package/dist/chunk-4960e27e19bbe42a.js +2 -0
  27. package/dist/chunk-4cb19a9e82653084.js +1 -1
  28. package/dist/chunk-51bad63147c3be4e.js +6 -0
  29. package/dist/chunk-584e33c96b1a78e4.js +2 -0
  30. package/dist/chunk-5fd67245740e3908.js +9 -0
  31. package/dist/chunk-61abf77c3eee8698.js +2 -0
  32. package/dist/chunk-68af0a6f6be163ce.js +2 -0
  33. package/dist/chunk-6a28d299b5726bba.js +2 -0
  34. package/dist/chunk-6e415d0e12fc9539.js +1 -0
  35. package/dist/chunk-76a525af0575486d.js +5 -0
  36. package/dist/chunk-798f550643937b6d.js +2 -0
  37. package/dist/chunk-7ce930fe69575c87.js +2 -0
  38. package/dist/chunk-7e9d5eea3aa359ad.js +2 -0
  39. package/dist/chunk-7ffe2ce59a054e35.js +2 -0
  40. package/dist/chunk-8133ed564834cff3.js +2 -0
  41. package/dist/chunk-81ce9b491b290639.js +1 -0
  42. package/dist/chunk-8a993922ea970923.js +2 -0
  43. package/dist/chunk-901e700a2c2d43f3.js +18 -0
  44. package/dist/chunk-9113f22a5215c639.js +3 -0
  45. package/dist/chunk-9326224d1e4c1a64.js +2 -0
  46. package/dist/chunk-9501e589e3e86a96.js +2 -0
  47. package/dist/chunk-a0003b7feea6fae6.js +2 -0
  48. package/dist/chunk-a2fcc46e344ae7ae.js +2 -0
  49. package/dist/chunk-a3f85d0d3261ae44.js +9 -0
  50. package/dist/chunk-a693f8ec2e8af8ca.js +2 -0
  51. package/dist/chunk-ae373c8ae2d526ae.js +18 -0
  52. package/dist/chunk-b05e4833f4bb2f8f.js +9 -0
  53. package/dist/chunk-b0cc82fa84d5362d.js +2 -0
  54. package/dist/chunk-b3bfe533d66f6a17.js +2 -0
  55. package/dist/chunk-b5d6eb761760b2a7.js +6 -0
  56. package/dist/chunk-b7b365f7e6038104.js +2 -0
  57. package/dist/chunk-be095501304df604.js +9 -0
  58. package/dist/chunk-bf92f3127474b56a.js +3 -0
  59. package/dist/chunk-bfccfb070c1630e9.js +2 -0
  60. package/dist/chunk-c041f058dc3d571b.js +1 -0
  61. package/dist/chunk-c0bd8e19395d722b.js +2 -0
  62. package/dist/chunk-c124bf801cec12d9.js +2 -0
  63. package/dist/chunk-c153b192112b0d44.js +2 -0
  64. package/dist/chunk-c1813278ccdc04b8.js +2 -0
  65. package/dist/chunk-c3eaa877d3aab9db.js +18 -0
  66. package/dist/chunk-c609d06153ed09ce.js +1 -1
  67. package/dist/chunk-c72bfaa252a03f6f.js +2 -0
  68. package/dist/chunk-c85fc7168a708cb6.js +3 -0
  69. package/dist/chunk-d0806df6defd9dce.js +2 -0
  70. package/dist/chunk-d26ffb7722e6df54.js +1 -0
  71. package/dist/chunk-d2e057b6f3f9d500.js +2 -0
  72. package/dist/chunk-d33a0e61ccf1bab5.js +2 -0
  73. package/dist/chunk-d5ddfacbfc84a47d.js +6 -0
  74. package/dist/chunk-da1c673d9685624e.js +2 -0
  75. package/dist/chunk-dc7b0cf226ba3afa.js +1 -1
  76. package/dist/chunk-dcc432bd72fb7e46.js +3 -0
  77. package/dist/chunk-dfc390f0bbdf5a81.js +1 -0
  78. package/dist/chunk-e1a08bb52ee7ea09.js +2 -0
  79. package/dist/chunk-e53fdd0a1888c5e8.js +2 -0
  80. package/dist/chunk-e9695f3cdafee20b.js +2 -0
  81. package/dist/chunk-edeefd833c30a5ed.js +2 -0
  82. package/dist/chunk-f08ca4bd263b132b.js +2 -0
  83. package/dist/chunk-f5a4295176f9b1c1.js +2 -0
  84. package/dist/chunk-f5e313cc7d724fbe.js +2 -0
  85. package/dist/chunk-f9e6a0a946ebb032.js +2 -0
  86. package/dist/chunk-ffe161a589b4c44b.js +1 -0
  87. package/dist/client/ClientRouter.d.ts.map +1 -1
  88. package/dist/client/ClientRouterContext.d.ts +1 -0
  89. package/dist/client/ClientRouterContext.d.ts.map +1 -1
  90. package/dist/client/Mutation.d.ts +9 -13
  91. package/dist/client/Mutation.d.ts.map +1 -1
  92. package/dist/client/ServerDataProvider.d.ts +2 -0
  93. package/dist/client/ServerDataProvider.d.ts.map +1 -1
  94. package/dist/client/auth/useForgotPassword.d.ts.map +1 -1
  95. package/dist/client/auth/useResetPassword.d.ts.map +1 -1
  96. package/dist/client/auth/useSignIn.d.ts.map +1 -1
  97. package/dist/client/auth/useSignOut.d.ts.map +1 -1
  98. package/dist/client/auth/useUser.d.ts.map +1 -1
  99. package/dist/client/i18n/I18nContext.d.ts +18 -0
  100. package/dist/client/i18n/I18nContext.d.ts.map +1 -0
  101. package/dist/client/i18n/useLocale.d.ts +2 -0
  102. package/dist/client/i18n/useLocale.d.ts.map +1 -0
  103. package/dist/client/i18n/useScopedTranslator.d.ts +8 -0
  104. package/dist/client/i18n/useScopedTranslator.d.ts.map +1 -0
  105. package/dist/client/i18n/useTranslator.d.ts +2 -0
  106. package/dist/client/i18n/useTranslator.d.ts.map +1 -0
  107. package/dist/client/index.d.ts +3 -1
  108. package/dist/client/index.d.ts.map +1 -1
  109. package/dist/client/index.js +221 -68
  110. package/dist/client/rpc.d.ts +6 -5
  111. package/dist/client/rpc.d.ts.map +1 -1
  112. package/dist/client/types.d.ts +1 -0
  113. package/dist/client/types.d.ts.map +1 -1
  114. package/dist/client/useRouter.d.ts.map +1 -1
  115. package/dist/client/useSearchParams.d.ts +20 -1
  116. package/dist/client/useSearchParams.d.ts.map +1 -1
  117. package/dist/email/index.js +1 -1
  118. package/dist/facades/I18n.d.ts +5 -0
  119. package/dist/facades/I18n.d.ts.map +1 -0
  120. package/dist/facades/index.d.ts +1 -0
  121. package/dist/facades/index.d.ts.map +1 -1
  122. package/dist/facades/index.js +1 -1
  123. package/dist/http/ApiRouter.d.ts +4 -5
  124. package/dist/http/ApiRouter.d.ts.map +1 -1
  125. package/dist/http/HttpRequest.d.ts +2 -0
  126. package/dist/http/HttpRequest.d.ts.map +1 -1
  127. package/dist/http/I18nServiceContainer.d.ts +31 -0
  128. package/dist/http/I18nServiceContainer.d.ts.map +1 -0
  129. package/dist/http/I18nServiceProvider.d.ts +10 -0
  130. package/dist/http/I18nServiceProvider.d.ts.map +1 -0
  131. package/dist/http/index.d.ts +1 -0
  132. package/dist/http/index.d.ts.map +1 -1
  133. package/dist/http/index.js +1 -1
  134. package/dist/http/requestContext.d.ts +2 -0
  135. package/dist/http/requestContext.d.ts.map +1 -1
  136. package/dist/kernel/Kernel.d.ts +5 -0
  137. package/dist/kernel/Kernel.d.ts.map +1 -1
  138. package/dist/kernel/context.d.ts +6 -2
  139. package/dist/kernel/context.d.ts.map +1 -1
  140. package/dist/kernel/index.js +2 -2
  141. package/dist/server/index.js +1 -1
  142. package/dist/storage/index.js +1 -10
  143. package/dist/utils/type.d.ts +1 -0
  144. package/dist/utils/type.d.ts.map +1 -1
  145. package/dist/vite/index.js +1 -1
  146. package/package.json +1 -1
@@ -7,7 +7,7 @@ export { useRouter } from "./useRouter";
7
7
  export { Link } from "./Link";
8
8
  export { init } from "./init";
9
9
  export { createRoot } from "./createRoot";
10
- export type { RPC, ViewRPC } from "./rpc";
10
+ export type { RPC, ViewRPC, I18nDictionary } from "./rpc";
11
11
  export { type ViewProps, type LayoutProps } from "./types";
12
12
  export { Image } from "./Image";
13
13
  export { useForgotPassword } from "./auth/useForgotPassword";
@@ -16,4 +16,6 @@ export { useSignUp } from "./auth/useSignUp";
16
16
  export { useSignOut } from "./auth/useSignOut";
17
17
  export { useResetPassword } from "./auth/useResetPassword";
18
18
  export { useUser } from "./auth/useUser";
19
+ export { useScopedTranslator } from "./i18n/useScopedTranslator";
20
+ export { useLocale } from "./i18n/useLocale";
19
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -33,7 +33,7 @@ class Subject {
33
33
  return this.value;
34
34
  }
35
35
  }
36
- function applyParams$1(url, params) {
36
+ function applyParams$2(url, params) {
37
37
  return url.replace(/:([^/]+)/g, (_2, key) => {
38
38
  const isOptional = key.endsWith("?");
39
39
  const paramName = isOptional ? key.slice(0, -1) : key;
@@ -93,7 +93,7 @@ class Resource {
93
93
  const { query, params } = options;
94
94
  const url = key.split("GET:")[1];
95
95
  const searchParams = new URLSearchParams(query);
96
- const finalUrl = [applyParams$1(url, params), searchParams.toString()].filter((s) => s.length > 0).join("?");
96
+ const finalUrl = [applyParams$2(url, params), searchParams.toString()].filter((s) => s.length > 0).join("?");
97
97
  const { data, error } = this.state.getValue();
98
98
  this.state.next({
99
99
  data,
@@ -187,7 +187,7 @@ function useQuery(url, ...args) {
187
187
  mutate: resource.mutate.bind(resource)
188
188
  };
189
189
  }
190
- function applyParams(url, params = {}) {
190
+ function applyParams$1(url, params = {}) {
191
191
  let out = url;
192
192
  for (const [key, value] of Object.entries(params)) {
193
193
  out = out.replace(`:${key}?`, value).replace(`:${key}`, value);
@@ -222,7 +222,7 @@ function useMutation(url, ...args) {
222
222
  const params = "params" in inputs ? inputs.params : {};
223
223
  const [method] = String(url).split(":");
224
224
  const finalUrl = [
225
- applyParams(String(url).replace(`${method}:`, ""), params),
225
+ applyParams$1(String(url).replace(`${method}:`, ""), params),
226
226
  new URLSearchParams(query).toString()
227
227
  ].join("?");
228
228
  let body = null;
@@ -1347,24 +1347,35 @@ const ClientRouterProvider = (props) => {
1347
1347
  window.scrollY
1348
1348
  );
1349
1349
  };
1350
- const getViewPathsFromPathname = (pathname2) => {
1351
- for (const [route, views] of Object.entries(routeManifest)) {
1352
- const urlPattern = new me({ pathname: route });
1350
+ const findMatchingRouteFromParams = (pathname2) => {
1351
+ const candidates = [];
1352
+ for (const route2 of Object.keys(routeManifest)) {
1353
+ const urlPattern = new me({ pathname: route2 });
1353
1354
  if (urlPattern.test({ pathname: pathname2 })) {
1354
- return views;
1355
+ candidates.push(route2);
1355
1356
  }
1356
1357
  }
1357
- return [];
1358
+ const sortedCandidates = candidates.sort((a, b2) => {
1359
+ const x2 = a.split("/").length + a.split(":").length;
1360
+ const y2 = b2.split("/").length + b2.split(":").length;
1361
+ return x2 - y2;
1362
+ });
1363
+ const [route] = sortedCandidates ?? [];
1364
+ return route;
1365
+ };
1366
+ const getViewPathsFromPathname = (pathname2) => {
1367
+ const route = findMatchingRouteFromParams(pathname2);
1368
+ return routeManifest[route] ?? [];
1369
+ };
1370
+ const getRoutePathnameFromHref = (href) => {
1371
+ const route = findMatchingRouteFromParams(href);
1372
+ return route;
1358
1373
  };
1359
1374
  const getParams = (pathname2) => {
1360
1375
  var _a2;
1361
- for (const route of Object.keys(routeManifest)) {
1362
- const urlPattern = new me({ pathname: route });
1363
- if (urlPattern.test({ pathname: pathname2 })) {
1364
- return (_a2 = urlPattern.exec({ pathname: pathname2 })) == null ? void 0 : _a2.pathname.groups;
1365
- }
1366
- }
1367
- return {};
1376
+ const route = findMatchingRouteFromParams(pathname2);
1377
+ const urlPattern = new me({ pathname: route });
1378
+ return (_a2 = urlPattern.exec({ pathname: pathname2 })) == null ? void 0 : _a2.pathname.groups;
1368
1379
  };
1369
1380
  useEffect(() => {
1370
1381
  history == null ? void 0 : history.listen(({ location }) => {
@@ -1409,7 +1420,8 @@ const ClientRouterProvider = (props) => {
1409
1420
  },
1410
1421
  viewEntriesSubject: viewEntriesSubject.current,
1411
1422
  updatePageData,
1412
- getPageData
1423
+ getPageData,
1424
+ getRoutePathnameFromHref
1413
1425
  },
1414
1426
  children
1415
1427
  }
@@ -1435,8 +1447,92 @@ function useParams() {
1435
1447
  const { params } = useContext(ClientRouterContext);
1436
1448
  return params;
1437
1449
  }
1450
+ const ServerDataContext = createContext({});
1451
+ const ServerDataProvider = (props) => {
1452
+ let _value = props.value;
1453
+ if (props.value) {
1454
+ _value = props.value;
1455
+ } else {
1456
+ _value = window.__GEMI_DATA__;
1457
+ }
1458
+ return /* @__PURE__ */ jsx(ServerDataContext.Provider, { value: _value, children: props.children });
1459
+ };
1460
+ const I18nContext = createContext({});
1461
+ const I18nProvider = (props) => {
1462
+ const { i18n } = useContext(ServerDataContext);
1463
+ const locale = Object.keys(i18n)[0];
1464
+ const [currentLocale, setCurrentLocale] = useState(locale);
1465
+ const [dictionary] = useState(() => {
1466
+ const dictionary2 = /* @__PURE__ */ new Map();
1467
+ for (const [locale2, value] of Object.entries(i18n)) {
1468
+ const scopes = /* @__PURE__ */ new Map();
1469
+ for (const [scope, translations] of Object.entries(value)) {
1470
+ scopes.set(scope, translations);
1471
+ }
1472
+ dictionary2.set(locale2, scopes);
1473
+ }
1474
+ return dictionary2;
1475
+ });
1476
+ const [currentTranslations, setCurrentTranslations] = useState(() => {
1477
+ if (!dictionary.has(currentLocale)) {
1478
+ return {};
1479
+ }
1480
+ return Object.fromEntries(dictionary.get(currentLocale).entries());
1481
+ });
1482
+ function updateDictionary(translations) {
1483
+ for (const [locale2, value] of Object.entries(translations)) {
1484
+ if (!dictionary.has(locale2)) {
1485
+ dictionary.set(locale2, /* @__PURE__ */ new Map());
1486
+ }
1487
+ const scopes = dictionary.get(locale2);
1488
+ for (const [scope, translations2] of Object.entries(value)) {
1489
+ if (!scopes.has(scope)) {
1490
+ scopes.set(scope, {});
1491
+ }
1492
+ scopes.set(scope, translations2);
1493
+ }
1494
+ }
1495
+ setCurrentTranslations(
1496
+ Object.fromEntries(dictionary.get(currentLocale).entries())
1497
+ );
1498
+ }
1499
+ const changeLocale = (locale2) => {
1500
+ if (dictionary.has(locale2)) {
1501
+ setCurrentLocale(locale2);
1502
+ setCurrentTranslations(
1503
+ Object.fromEntries(dictionary.get(locale2).entries())
1504
+ );
1505
+ }
1506
+ };
1507
+ const fetchTranslations = async (pathname, locale2) => {
1508
+ const response = await fetch(
1509
+ `/api/__gemi__/services/i18n/translations?scope=${pathname}&locale=${locale2 || currentLocale}`
1510
+ );
1511
+ const translations = await response.json();
1512
+ updateDictionary(translations);
1513
+ };
1514
+ return /* @__PURE__ */ jsx(
1515
+ I18nContext.Provider,
1516
+ {
1517
+ value: {
1518
+ locale: currentLocale,
1519
+ translations: currentTranslations,
1520
+ changeLocale,
1521
+ updateDictionary,
1522
+ fetchTranslations
1523
+ },
1524
+ children: props.children
1525
+ }
1526
+ );
1527
+ };
1438
1528
  function useRouter() {
1439
- const { updatePageData, history, getViewPathsFromPathname } = useContext(ClientRouterContext);
1529
+ const {
1530
+ updatePageData,
1531
+ history,
1532
+ getViewPathsFromPathname,
1533
+ getRoutePathnameFromHref
1534
+ } = useContext(ClientRouterContext);
1535
+ const { fetchTranslations } = useContext(I18nContext);
1440
1536
  function action(pushOrReplace) {
1441
1537
  return async (path, ...args) => {
1442
1538
  const [options = {}] = args;
@@ -1450,9 +1546,9 @@ function useRouter() {
1450
1546
  ...options
1451
1547
  };
1452
1548
  const urlSearchParams = new URLSearchParams(search);
1453
- const basePath = applyParams$1(path, params);
1549
+ const basePath = applyParams$2(path, params);
1454
1550
  const navigationPath = [
1455
- applyParams$1(path, params),
1551
+ applyParams$2(path, params),
1456
1552
  urlSearchParams.toString()
1457
1553
  ].join("?");
1458
1554
  const components = getViewPathsFromPathname(path);
@@ -1464,8 +1560,10 @@ function useRouter() {
1464
1560
  history == null ? void 0 : history[pushOrReplace](navigationPath);
1465
1561
  return;
1466
1562
  }
1563
+ const routePathname = getRoutePathnameFromHref(path);
1467
1564
  const [res] = await Promise.all([
1468
1565
  fetch(fetchPath),
1566
+ fetchTranslations(routePathname),
1469
1567
  ...components.map((component) => window.loaders[component]())
1470
1568
  ]);
1471
1569
  if (res.ok) {
@@ -1481,23 +1579,67 @@ function useRouter() {
1481
1579
  replace: action("replace")
1482
1580
  };
1483
1581
  }
1582
+ class SearchParams {
1583
+ constructor(searchParams, callback) {
1584
+ this.searchParams = searchParams;
1585
+ this.callback = callback;
1586
+ }
1587
+ get(key) {
1588
+ return this.searchParams.get(key);
1589
+ }
1590
+ set(key, value) {
1591
+ let entries = {};
1592
+ if (typeof key === "string") {
1593
+ entries[key] = value;
1594
+ } else {
1595
+ entries = key ?? {};
1596
+ }
1597
+ for (const [key2, value2] of Object.entries(entries)) {
1598
+ this.searchParams.set(key2, value2);
1599
+ }
1600
+ return this;
1601
+ }
1602
+ append(key, value) {
1603
+ this.searchParams.append(key, value);
1604
+ return this;
1605
+ }
1606
+ sort() {
1607
+ this.searchParams.sort();
1608
+ return this;
1609
+ }
1610
+ clear() {
1611
+ this.searchParams = new URLSearchParams();
1612
+ return this;
1613
+ }
1614
+ delete(key) {
1615
+ const keys = Array.isArray(key) ? key : [key];
1616
+ for (const key2 of keys) {
1617
+ this.searchParams.delete(key2);
1618
+ }
1619
+ return this;
1620
+ }
1621
+ toJSON() {
1622
+ return Object.fromEntries(this.searchParams.entries());
1623
+ }
1624
+ toString() {
1625
+ return this.searchParams.toString();
1626
+ }
1627
+ push(mode = "hard") {
1628
+ this.callback(this.toJSON(), mode === "soft");
1629
+ }
1630
+ }
1484
1631
  function useSearchParams() {
1485
1632
  const { push } = useRouter();
1486
1633
  const location = useLocation();
1487
- const searchParams = new URLSearchParams(location.search);
1488
- const setSearchParams = (newSearchParams, shallow = false) => {
1489
- let nextSearchParams = newSearchParams;
1490
- if (typeof newSearchParams === "function") {
1491
- nextSearchParams = newSearchParams(searchParams);
1492
- }
1493
- push(location.pathname, {
1494
- search: Object.fromEntries(
1495
- nextSearchParams.entries()
1496
- ),
1497
- shallow
1498
- });
1499
- };
1500
- return [searchParams, setSearchParams];
1634
+ const callback = (search, shallow) => push(location.pathname, {
1635
+ search,
1636
+ shallow
1637
+ });
1638
+ const searchParams = new SearchParams(
1639
+ new URLSearchParams(location.search),
1640
+ callback
1641
+ );
1642
+ return searchParams;
1501
1643
  }
1502
1644
  const Link = (props) => {
1503
1645
  const {
@@ -1510,7 +1652,7 @@ const Link = (props) => {
1510
1652
  } = { params: {}, ...props };
1511
1653
  const { push } = useRouter();
1512
1654
  const { pathname } = useLocation();
1513
- const path = applyParams$1(href, params);
1655
+ const path = applyParams$2(href, params);
1514
1656
  return /* @__PURE__ */ jsx(
1515
1657
  "a",
1516
1658
  {
@@ -30160,16 +30302,6 @@ if (process.env.NODE_ENV === "production") {
30160
30302
  client.exports = requireReactDomClient_development();
30161
30303
  }
30162
30304
  var clientExports = client.exports;
30163
- const ServerDataContext = createContext({});
30164
- const ServerDataProvider = (props) => {
30165
- let _value = props.value;
30166
- if (props.value) {
30167
- _value = props.value;
30168
- } else {
30169
- _value = window.__GEMI_DATA__;
30170
- }
30171
- return /* @__PURE__ */ jsx(ServerDataContext.Provider, { value: _value, children: props.children });
30172
- };
30173
30305
  function flattenComponentTree(componentTree) {
30174
30306
  let out = [];
30175
30307
  for (const [root, branches] of componentTree) {
@@ -30234,7 +30366,7 @@ const Routes = (props) => {
30234
30366
  const ClientRouter = (props) => {
30235
30367
  const { RootLayout } = props;
30236
30368
  const { routeManifest, router, componentTree, pageData, auth } = useContext(ServerDataContext);
30237
- return /* @__PURE__ */ jsx(QueryManagerProvider, { children: /* @__PURE__ */ jsx(ComponentsProvider, { viewImportMap: props.viewImportMap, children: /* @__PURE__ */ jsx(
30369
+ return /* @__PURE__ */ jsx(I18nProvider, { children: /* @__PURE__ */ jsx(QueryManagerProvider, { children: /* @__PURE__ */ jsx(ComponentsProvider, { viewImportMap: props.viewImportMap, children: /* @__PURE__ */ jsx(
30238
30370
  ClientRouterProvider,
30239
30371
  {
30240
30372
  searchParams: router.searchParams,
@@ -30246,7 +30378,7 @@ const ClientRouter = (props) => {
30246
30378
  routeManifest,
30247
30379
  children: /* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsx(RootLayout, { children: /* @__PURE__ */ jsx(Routes, { componentTree }) }) })
30248
30380
  }
30249
- ) }) });
30381
+ ) }) }) });
30250
30382
  };
30251
30383
  function init(RootLayout) {
30252
30384
  clientExports.hydrateRoot(
@@ -30322,10 +30454,9 @@ const defaultArgs$3 = {
30322
30454
  };
30323
30455
  function useForgotPassword(args = defaultArgs$3) {
30324
30456
  return useMutation(
30325
- "POST:/forgot-password",
30457
+ "POST:/auth/forgot-password",
30326
30458
  {},
30327
30459
  {
30328
- pathPrefix: "/auth",
30329
30460
  onSuccess: () => {
30330
30461
  args.onSuccess();
30331
30462
  }
@@ -30337,16 +30468,11 @@ const defaultArgs$2 = {
30337
30468
  }
30338
30469
  };
30339
30470
  function useSignIn(args = defaultArgs$2) {
30340
- const { mutate } = useQuery(
30341
- "GET:/me",
30342
- { params: {}, query: {} },
30343
- { pathPrefix: "/auth" }
30344
- );
30471
+ const { mutate } = useQuery("GET:/auth/me", { params: {}, query: {} });
30345
30472
  return useMutation(
30346
- "POST:/sign-in",
30473
+ "POST:/auth/sign-in",
30347
30474
  {},
30348
30475
  {
30349
- pathPrefix: "/auth",
30350
30476
  onSuccess: ({ user }) => {
30351
30477
  args.onSuccess(user);
30352
30478
  mutate(user);
@@ -30355,23 +30481,18 @@ function useSignIn(args = defaultArgs$2) {
30355
30481
  );
30356
30482
  }
30357
30483
  function useSignUp() {
30358
- return useMutation("POST:/sign-up", {}, { pathPrefix: "/auth" });
30484
+ return useMutation("POST:/auth/sign-up", {});
30359
30485
  }
30360
30486
  const defaultArgs$1 = {
30361
30487
  onSuccess: () => {
30362
30488
  }
30363
30489
  };
30364
30490
  function useSignOut(args = defaultArgs$1) {
30365
- const { mutate } = useQuery(
30366
- "GET:/me",
30367
- { params: {}, query: {} },
30368
- { pathPrefix: "/auth" }
30369
- );
30491
+ const { mutate } = useQuery("GET:/auth/me", { params: {}, query: {} });
30370
30492
  return useMutation(
30371
- "POST:/sign-out",
30493
+ "POST:/auth/sign-out",
30372
30494
  {},
30373
30495
  {
30374
- pathPrefix: "/auth",
30375
30496
  onSuccess: () => {
30376
30497
  args.onSuccess();
30377
30498
  mutate(null);
@@ -30385,10 +30506,9 @@ const defaultArgs = {
30385
30506
  };
30386
30507
  function useResetPassword(args = defaultArgs) {
30387
30508
  return useMutation(
30388
- "POST:/reset-password",
30509
+ "POST:/auth/reset-password",
30389
30510
  {},
30390
30511
  {
30391
- pathPrefix: "/auth",
30392
30512
  onSuccess: () => {
30393
30513
  args.onSuccess();
30394
30514
  }
@@ -30398,10 +30518,9 @@ function useResetPassword(args = defaultArgs) {
30398
30518
  function useUser() {
30399
30519
  const { auth } = useContext(ServerDataContext);
30400
30520
  const { data, loading, error } = useQuery(
30401
- "GET:/me",
30521
+ "GET:/auth/me",
30402
30522
  { params: {}, query: {} },
30403
30523
  {
30404
- pathPrefix: "/auth",
30405
30524
  fallbackData: auth.user ? { user: auth == null ? void 0 : auth.user } : null
30406
30525
  }
30407
30526
  );
@@ -30410,6 +30529,38 @@ function useUser() {
30410
30529
  }
30411
30530
  return { user: data == null ? void 0 : data.user, loading, error };
30412
30531
  }
30532
+ function useScopedTranslator(scope) {
30533
+ const { translations } = useContext(I18nContext);
30534
+ return (key, ...args) => {
30535
+ const [params = {}] = args;
30536
+ const _scope = translations[scope];
30537
+ const translation = _scope == null ? void 0 : _scope[key];
30538
+ if (!translation) {
30539
+ return key;
30540
+ }
30541
+ return applyParams(translation, params);
30542
+ };
30543
+ }
30544
+ function applyParams(str, params) {
30545
+ return str.replace(/{([^}]+)}/g, (_2, key) => {
30546
+ const value = params[key];
30547
+ if (value === void 0) {
30548
+ throw new Error(`Missing parameter: ${key}`);
30549
+ }
30550
+ return value;
30551
+ });
30552
+ }
30553
+ function useLocale() {
30554
+ const { changeLocale, locale, fetchTranslations } = useContext(I18nContext);
30555
+ const { getRoutePathnameFromHref } = useContext(ClientRouterContext);
30556
+ const { pathname } = useLocation();
30557
+ const setLocale = async (locale2) => {
30558
+ const x2 = getRoutePathnameFromHref(pathname);
30559
+ await fetchTranslations(x2, locale2);
30560
+ changeLocale(locale2);
30561
+ };
30562
+ return [locale, setLocale];
30563
+ }
30413
30564
  export {
30414
30565
  Form,
30415
30566
  FormError,
@@ -30420,6 +30571,7 @@ export {
30420
30571
  createRoot,
30421
30572
  init,
30422
30573
  useForgotPassword,
30574
+ useLocale,
30423
30575
  useLocation,
30424
30576
  useMutation,
30425
30577
  useMutationStatus,
@@ -30427,6 +30579,7 @@ export {
30427
30579
  useQuery,
30428
30580
  useResetPassword,
30429
30581
  useRouter,
30582
+ useScopedTranslator,
30430
30583
  useSearchParams,
30431
30584
  useSignIn,
30432
30585
  useSignOut,
@@ -1,9 +1,10 @@
1
- import { type AuthApiRouter } from "../auth/AuthenticationServiceProvider";
2
- import { type ViewHandler } from "../http/ViewRouter";
1
+ import { type AuthApiRouter, type AuthViewRouter } from "../auth/AuthenticationServiceProvider";
3
2
  import type { CreateRPC } from "../http/ApiRouter";
4
- export interface RPC extends CreateRPC<AuthApiRouter> {
3
+ import type { CreateViewRPC } from "../http/ViewRouter";
4
+ export interface RPC extends CreateRPC<AuthApiRouter, "/auth"> {
5
5
  }
6
- export interface ViewRPC {
6
+ export interface ViewRPC extends CreateViewRPC<AuthViewRouter, "/auth"> {
7
+ }
8
+ export interface I18nDictionary {
7
9
  }
8
- export type ViewProps<T extends keyof ViewRPC> = ViewRPC[T] extends ViewHandler<infer I, infer O, infer P> ? O : never;
9
10
  //# sourceMappingURL=rpc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../client/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD,MAAM,WAAW,GAAI,SAAQ,SAAS,CAAC,aAAa,CAAC;CAAG;AAExD,MAAM,WAAW,OAAO;CAAG;AAE3B,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,OAAO,IAC3C,OAAO,CAAC,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../client/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,GAAI,SAAQ,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC;CAAG;AAEjE,MAAM,WAAW,OAAQ,SAAQ,aAAa,CAAC,cAAc,EAAE,OAAO,CAAC;CAAG;AAE1E,MAAM,WAAW,cAAc;CAAG"}
@@ -5,6 +5,7 @@ import type { ViewRPC } from "./rpc";
5
5
  type ComponentBranch = [string, ComponentBranch[]];
6
6
  export type ComponentTree = ComponentBranch[];
7
7
  export type ViewPaths = ViewKeys<keyof ViewRPC>;
8
+ export type ViewRoute = keyof ViewRPC;
8
9
  type ViewKeys<T> = T extends keyof ViewRPC ? T extends `view:${infer K}` ? K : never : never;
9
10
  type LayoutKeys<T> = T extends keyof ViewRPC ? T extends `layout:${infer K}` ? K : never : never;
10
11
  export type ViewProps<T extends ViewKeys<keyof ViewRPC>> = ViewRPC[`view:${T}`] extends ViewHandler<any, infer O, any> ? UnwrapPromise<O> : never;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC,KAAK,eAAe,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AACnD,MAAM,MAAM,aAAa,GAAG,eAAe,EAAE,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,OAAO,CAAC,CAAC;AAEhD,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,OAAO,GACtC,CAAC,SAAS,QAAQ,MAAM,CAAC,EAAE,GACzB,CAAC,GACD,KAAK,GACP,KAAK,CAAC;AAEV,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,OAAO,GACxC,CAAC,SAAS,UAAU,MAAM,CAAC,EAAE,GAC3B,CAAC,GACD,KAAK,GACP,KAAK,CAAC;AAEV,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,OAAO,CAAC,IACrD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GACvD,aAAa,CAAC,CAAC,CAAC,GAChB,KAAK,CAAC;AAEZ,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,OAAO,CAAC,IACzD,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GACzD,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GACnC,KAAK,CAAC;AAEZ,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GACtD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,CAAC,SAAS,GAAG,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,EAAE,GACxD;KAAG,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM;CAAE,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,GACjD,CAAC,SAAS,GAAG,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,GACvD;KAAG,CAAC,IAAI,KAAK,GAAG,MAAM;CAAE,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,GAChD,CAAC,SAAS,GAAG,MAAM,MAAM,KAAK,MAAM,KAAK,EAAE,GACzC;KAAG,CAAC,IAAI,KAAK,GAAG,MAAM;CAAE,GACxB,KAAK,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../client/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC,KAAK,eAAe,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AACnD,MAAM,MAAM,aAAa,GAAG,eAAe,EAAE,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,OAAO,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;AAEtC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,OAAO,GACtC,CAAC,SAAS,QAAQ,MAAM,CAAC,EAAE,GACzB,CAAC,GACD,KAAK,GACP,KAAK,CAAC;AAEV,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,OAAO,GACxC,CAAC,SAAS,UAAU,MAAM,CAAC,EAAE,GAC3B,CAAC,GACD,KAAK,GACP,KAAK,CAAC;AAEV,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,OAAO,CAAC,IACrD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GACvD,aAAa,CAAC,CAAC,CAAC,GAChB,KAAK,CAAC;AAEZ,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,OAAO,CAAC,IACzD,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GACzD,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GACnC,KAAK,CAAC;AAEZ,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GACtD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,CAAC,SAAS,GAAG,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,EAAE,GACxD;KAAG,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM;CAAE,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,GACjD,CAAC,SAAS,GAAG,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,GACvD;KAAG,CAAC,IAAI,KAAK,GAAG,MAAM;CAAE,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,GAChD,CAAC,SAAS,GAAG,MAAM,MAAM,KAAK,MAAM,KAAK,EAAE,GACzC;KAAG,CAAC,IAAI,KAAK,GAAG,MAAM;CAAE,GACxB,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useRouter.d.ts","sourceRoot":"","sources":["../../client/useRouter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpD,KAAK,OAAO,CAAC,CAAC,SAAS,SAAS,IAC9B,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,GACtB;IACE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IACE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACtE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAER,wBAAgB,SAAS;WAKP,CAAC,SAAS,SAAS,QACzB,CAAC,WACE,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,GAC/B,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GACtB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;cAJb,CAAC,SAAS,SAAS,QACzB,CAAC,WACE,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,GAC/B,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GACtB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;EAqD9B"}
1
+ {"version":3,"file":"useRouter.d.ts","sourceRoot":"","sources":["../../client/useRouter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIpD,KAAK,OAAO,CAAC,CAAC,SAAS,SAAS,IAC9B,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,GACtB;IACE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IACE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACtE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAER,wBAAgB,SAAS;WAWP,CAAC,SAAS,SAAS,QACzB,CAAC,WACE,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,GAC/B,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GACtB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;cAJb,CAAC,SAAS,SAAS,QACzB,CAAC,WACE,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,GAC/B,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GACtB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;EAwD9B"}
@@ -1,2 +1,21 @@
1
- export declare function useSearchParams(): readonly [URLSearchParams, (newSearchParams: URLSearchParams | ((searchParams: URLSearchParams) => URLSearchParams), shallow?: boolean) => void];
1
+ type SearchParamsCallback = (search: Record<string, any>, shallow: boolean) => void;
2
+ declare class SearchParams {
3
+ private searchParams;
4
+ private callback;
5
+ constructor(searchParams: URLSearchParams, callback: SearchParamsCallback);
6
+ get(key: string): string;
7
+ set(key: Record<string, string>): SearchParams;
8
+ set(key: string, value: string): SearchParams;
9
+ append(key: string, value: string): this;
10
+ sort(): this;
11
+ clear(): this;
12
+ delete(key: string | string[]): this;
13
+ toJSON(): {
14
+ [k: string]: string;
15
+ };
16
+ toString(): string;
17
+ push(mode?: "soft" | "hard"): void;
18
+ }
19
+ export declare function useSearchParams(): SearchParams;
20
+ export {};
2
21
  //# sourceMappingURL=useSearchParams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSearchParams.d.ts","sourceRoot":"","sources":["../../client/useSearchParams.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,iDAMvB,eAAe,GACf,CAAC,CAAC,YAAY,EAAE,eAAe,KAAK,eAAe,CAAC,8BAiB3D"}
1
+ {"version":3,"file":"useSearchParams.d.ts","sourceRoot":"","sources":["../../client/useSearchParams.ts"],"names":[],"mappings":"AAGA,KAAK,oBAAoB,GAAG,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,EAAE,OAAO,KACb,IAAI,CAAC;AAEV,cAAM,YAAY;IAEd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ;gBADR,YAAY,EAAE,eAAe,EAC7B,QAAQ,EAAE,oBAAoB;IAGxC,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY;IAC9C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY;IAc7C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKjC,IAAI;IAKJ,KAAK;IAKL,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAQ7B,MAAM;;;IAIN,QAAQ;IAIR,IAAI,CAAC,IAAI,GAAE,MAAM,GAAG,MAAe;CAGpC;AAED,wBAAgB,eAAe,iBAe9B"}
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import"../http/index.js";import"../facades/index.js";import{q as w,r as c} from"../kernel/index.js";import"../chunk-a5c18c07abe8fd9c.js";import{renderToStaticMarkup as u} from"react-dom/server";var x=(t)=>{return`<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">${u(t)}`};class s{static async send(t,r){const e=new t,{to:a=e.to,from:l=e.from,subject:m=e.subject,cc:p=e.cc,bcc:T=e.bcc,attachments:d=e.attachments,data:E}=r,n=x(e.render(E));if(process.env.EMAIL_DEBUG){const o=`${process.env.ROOT_DIR}/.debug/emails/${(new Date()).toISOString()}${m}.html`;await Bun.write(o,n),Bun.spawnSync(["open",o]);return}await c.getContext().emailServiceProvider.send({bcc:T,cc:p,from:l,subject:m,to:a,attachments:d,html:n})}}import{createElement as f,Fragment as g} from"react";class i{from="doe@gemijs.dev";to=["hi@gemijs.dev"];subject="Welcome";cc=[];bcc=[];attachments=[];render(t){return console.log("EmailTemplate"),f(g,null,"EmailTemplate")}}export{i as EmailTemplate,w as EmailServiceProvider,s as Email};
2
+ import"../http/index.js";import"../facades/index.js";import{r as w,s as c} from"../kernel/index.js";import"../chunk-7ce930fe69575c87.js";import{renderToStaticMarkup as u} from"react-dom/server";var x=(t)=>{return`<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">${u(t)}`};class s{static async send(t,r){const e=new t,{to:a=e.to,from:l=e.from,subject:m=e.subject,cc:p=e.cc,bcc:T=e.bcc,attachments:d=e.attachments,data:E}=r,n=x(e.render(E));if(process.env.EMAIL_DEBUG){const o=`${process.env.ROOT_DIR}/.debug/emails/${(new Date()).toISOString()}${m}.html`;await Bun.write(o,n),Bun.spawnSync(["open",o]);return}await c.getContext().emailServiceProvider.send({bcc:T,cc:p,from:l,subject:m,to:a,attachments:d,html:n})}}import{createElement as f,Fragment as g} from"react";class i{from="doe@gemijs.dev";to=["hi@gemijs.dev"];subject="Welcome";cc=[];bcc=[];attachments=[];render(t){return console.log("EmailTemplate"),f(g,null,"EmailTemplate")}}export{i as EmailTemplate,w as EmailServiceProvider,s as Email};
@@ -0,0 +1,5 @@
1
+ import type { ViewRPC } from "../client/rpc";
2
+ export declare class I18n {
3
+ static scope<T extends keyof ViewRPC>(scope: T): T;
4
+ }
5
+ //# sourceMappingURL=I18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"I18n.d.ts","sourceRoot":"","sources":["../../facades/I18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,qBAAa,IAAI;IACf,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC;CAG/C"}
@@ -1,3 +1,4 @@
1
1
  export { Auth } from "./Auth";
2
2
  export { Redirect } from "./Redirect";
3
+ export { I18n } from "./I18n";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../facades/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../facades/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{f as o,g as R,k as m,m as r} from"../http/index.js";import"../chunk-a5c18c07abe8fd9c.js";class p{static async user(){const a=R.getStore(),c=a.req.cookies.get("access_token");let d=a.user;if(!d)d=(await m.getStore().authenticationServiceProvider.adapter.findSession({token:c,userAgent:a.req.headers.get("User-Agent")}))?.user,a.setUser(d);if(d)return d;return null}static async guard(a){const c=await p.user();if(!c)throw new r;try{if(!await a(c))throw new r}catch(d){throw new r}}static async guardSafe(a){const c=await p.user();if(!c)return!1;try{return await a(c)}catch(d){return!1}}}class g extends o{constructor(a){super("Redirect error");this.name="RedirectError",this.payload={api:{status:302,data:{error:"Redirect error"}},view:{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:a}}}}}class v{static to(a){throw new g(a)}}export{v as Redirect,p as Auth};export{p};
2
+ import{f as R,g as d,k as m,m as o} from"../http/index.js";import"../chunk-7ce930fe69575c87.js";class p{static async user(){const a=d.getStore(),c=a.req.cookies.get("access_token");let r=a.user;if(!r)r=(await m.getStore().authenticationServiceProvider.adapter.findSession({token:c,userAgent:a.req.headers.get("User-Agent")}))?.user,a.setUser(r);if(r)return r;return null}static async guard(a){const c=await p.user();if(!c)throw new o;try{if(!await a(c))throw new o}catch(r){throw new o}}static async guardSafe(a){const c=await p.user();if(!c)return!1;try{return await a(c)}catch(r){return!1}}}class i extends R{constructor(a){super("Redirect error");this.name="RedirectError",this.payload={api:{status:302,data:{error:"Redirect error"}},view:{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:a}}}}}class w{static to(a){throw new i(a)}}class l{static scope(a){return a}}export{w as Redirect,l as I18n,p as Auth};export{p as q};
@@ -369,10 +369,9 @@ type RouteHandlerParser<T, Prefix extends string = ""> = T extends RouteHandler<
369
369
  type RouteHandlersParser<T, Prefix extends string = ""> = T extends RouteHandlers ? {
370
370
  [K in keyof T]: T[K] extends RouteHandler<infer Method, infer Input, infer Output, infer Params> ? KeyAndValue<`${Method & string}:${Prefix & string}`, ApiRouterHandler<Input, Output, Params>> : never;
371
371
  }[keyof T] : never;
372
- type RouterInstanceParser<T extends new () => ApiRouter, Prefix extends string> = T extends new () => ApiRouter ? RouteParser<InstanceType<T>, `${Prefix & string}`> : never;
373
- type RouteParser<T extends ApiRouter, Prefix extends PropertyKey = ""> = {
374
- [K in keyof T["routes"]]: T["routes"][K] extends RouteHandler<any, any, any, any> ? RouteHandlerParser<T["routes"][K], `${Prefix & string}${K & string}`> : T["routes"][K] extends new () => ApiRouter ? RouterInstanceParser<T["routes"][K], `${Prefix & string}${K & string}`> : T["routes"][K] extends RouteHandlers ? RouteHandlersParser<T["routes"][K], `${Prefix & string}${K extends "/" ? "" : K & string}`> : never;
375
- }[keyof T["routes"]];
376
- export type CreateRPC<T extends ApiRouter, Prefix extends PropertyKey = ""> = KeyAndValueToObject<RouteParser<T, Prefix>>;
372
+ type RouterInstanceParser<T extends new () => ApiRouter, Prefix extends string> = T extends new () => ApiRouter ? RouteParser<InstanceType<T>["routes"], `${Prefix & string}`> : never;
373
+ type ParsePrefixAndKey<P extends PropertyKey, K extends PropertyKey, U = `${P & string}${K & string}`> = U extends "//" ? "/" : U extends `${infer T1}//${infer T2}` ? `${T1}/${T2}` : U extends `${infer T1}/${infer T2}/` ? `${T1}/${T2}` : U;
374
+ type RouteParser<T extends ApiRoutes, Prefix extends PropertyKey = "", K extends keyof T = keyof T> = K extends any ? T[K] extends RouteHandler<any, any, any, any> ? RouteHandlerParser<T[K], ParsePrefixAndKey<Prefix, K>> : T[K] extends new () => ApiRouter ? RouterInstanceParser<T[K], ParsePrefixAndKey<Prefix, K>> : T[K] extends RouteHandlers ? RouteHandlersParser<T[K], `${Prefix & string}${K extends "/" ? "" : K & string}`> : never : never;
375
+ export type CreateRPC<T extends ApiRouter, Prefix extends PropertyKey = ""> = KeyAndValueToObject<RouteParser<T["routes"], Prefix>>;
377
376
  export {};
378
377
  //# sourceMappingURL=ApiRouter.d.ts.map