alepha 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/api/jobs/index.d.ts +20 -20
  2. package/dist/api/jobs/index.d.ts.map +1 -1
  3. package/dist/api/keys/index.d.ts +6 -6
  4. package/dist/api/users/index.d.ts +43 -9
  5. package/dist/api/users/index.d.ts.map +1 -1
  6. package/dist/api/users/index.js +24 -3
  7. package/dist/api/users/index.js.map +1 -1
  8. package/dist/api/verifications/index.d.ts +13 -13
  9. package/dist/cli/core/index.d.ts +46 -40
  10. package/dist/cli/core/index.d.ts.map +1 -1
  11. package/dist/cli/core/index.js +51 -101
  12. package/dist/cli/core/index.js.map +1 -1
  13. package/dist/cli/i18n/index.d.ts +12 -5
  14. package/dist/cli/i18n/index.d.ts.map +1 -1
  15. package/dist/cli/i18n/index.js +45 -11
  16. package/dist/cli/i18n/index.js.map +1 -1
  17. package/dist/cli/platform-lib/index.d.ts +32 -6
  18. package/dist/cli/platform-lib/index.d.ts.map +1 -1
  19. package/dist/cli/platform-lib/index.js +82 -19
  20. package/dist/cli/platform-lib/index.js.map +1 -1
  21. package/dist/command/index.d.ts +1 -1
  22. package/dist/mcp/index.d.ts +9 -0
  23. package/dist/mcp/index.d.ts.map +1 -1
  24. package/dist/mcp/index.js +23 -0
  25. package/dist/mcp/index.js.map +1 -1
  26. package/dist/react/form/index.d.ts +0 -1
  27. package/dist/react/form/index.d.ts.map +1 -1
  28. package/dist/react/form/index.js +16 -15
  29. package/dist/react/form/index.js.map +1 -1
  30. package/dist/react/i18n/index.d.ts +43 -0
  31. package/dist/react/i18n/index.d.ts.map +1 -1
  32. package/dist/react/i18n/index.js +114 -10
  33. package/dist/react/i18n/index.js.map +1 -1
  34. package/dist/react/router/index.browser.js +128 -5
  35. package/dist/react/router/index.browser.js.map +1 -1
  36. package/dist/react/router/index.d.ts +108 -1
  37. package/dist/react/router/index.d.ts.map +1 -1
  38. package/dist/react/router/index.js +184 -6
  39. package/dist/react/router/index.js.map +1 -1
  40. package/dist/react/sitemap/index.browser.js +35 -0
  41. package/dist/react/sitemap/index.browser.js.map +1 -0
  42. package/dist/react/sitemap/index.d.ts +92 -0
  43. package/dist/react/sitemap/index.d.ts.map +1 -0
  44. package/dist/react/sitemap/index.js +131 -0
  45. package/dist/react/sitemap/index.js.map +1 -0
  46. package/dist/server/auth/index.d.ts +105 -1
  47. package/dist/server/auth/index.d.ts.map +1 -1
  48. package/dist/server/auth/index.js +1604 -7
  49. package/dist/server/auth/index.js.map +1 -1
  50. package/dist/server/cookies/index.d.ts +15 -0
  51. package/dist/server/cookies/index.d.ts.map +1 -1
  52. package/dist/server/cookies/index.js +22 -3
  53. package/dist/server/cookies/index.js.map +1 -1
  54. package/dist/server/core/index.d.ts +18 -0
  55. package/dist/server/core/index.d.ts.map +1 -1
  56. package/dist/server/core/index.js +25 -0
  57. package/dist/server/core/index.js.map +1 -1
  58. package/package.json +16 -3
  59. package/src/api/users/controllers/RealmController.ts +1 -0
  60. package/src/api/users/primitives/$realm.ts +26 -0
  61. package/src/api/users/providers/RealmProvider.ts +15 -0
  62. package/src/api/users/schemas/realmConfigSchema.ts +14 -0
  63. package/src/cli/core/atoms/buildOptions.ts +0 -12
  64. package/src/cli/core/commands/build.ts +0 -10
  65. package/src/cli/core/index.ts +0 -3
  66. package/src/cli/core/tasks/BuildCloudflareTask.ts +37 -17
  67. package/src/cli/core/tasks/BuildPrerenderTask.ts +44 -7
  68. package/src/cli/i18n/__tests__/I18nCheckService.spec.ts +48 -0
  69. package/src/cli/i18n/services/I18nCheckService.ts +65 -11
  70. package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +128 -36
  71. package/src/mcp/__tests__/McpServerProvider.spec.ts +71 -0
  72. package/src/mcp/providers/McpServerProvider.ts +55 -0
  73. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +71 -0
  74. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +96 -0
  75. package/src/react/form/services/FormModel.ts +57 -39
  76. package/src/react/i18n/__tests__/I18nProvider.spec.ts +89 -0
  77. package/src/react/i18n/__tests__/locale-routing.spec.ts +107 -0
  78. package/src/react/i18n/providers/I18nProvider.ts +171 -12
  79. package/src/react/router/__tests__/RouterLocaleProvider.spec.ts +127 -0
  80. package/src/react/router/index.browser.ts +4 -0
  81. package/src/react/router/index.shared.ts +1 -0
  82. package/src/react/router/index.ts +9 -0
  83. package/src/react/router/providers/ReactBrowserRouterProvider.ts +15 -1
  84. package/src/react/router/providers/ReactPageProvider.ts +12 -1
  85. package/src/react/router/providers/ReactServerProvider.ts +92 -1
  86. package/src/react/router/providers/RootComponentsProvider.ts +13 -0
  87. package/src/react/router/providers/RouterLocaleProvider.ts +125 -0
  88. package/src/react/router/providers/__tests__/RootComponentsProvider.spec.ts +15 -0
  89. package/src/react/router/providers/__tests__/rootComponents.ssr.browser.spec.tsx +67 -0
  90. package/src/react/sitemap/__tests__/$sitemap.spec.ts +131 -0
  91. package/src/react/sitemap/index.browser.ts +21 -0
  92. package/src/react/sitemap/index.ts +25 -0
  93. package/src/react/sitemap/primitives/$sitemap.browser.ts +26 -0
  94. package/src/react/sitemap/primitives/$sitemap.ts +196 -0
  95. package/src/server/auth/__tests__/appleClientSecret.spec.ts +34 -0
  96. package/src/server/auth/__tests__/authFederationClient.spec.ts +40 -0
  97. package/src/server/auth/__tests__/federationAssertion.spec.ts +146 -0
  98. package/src/server/auth/__tests__/federationRedirectReplay.spec.ts +44 -0
  99. package/src/server/auth/helpers/appleClientSecret.ts +24 -0
  100. package/src/server/auth/helpers/federationAssertion.ts +74 -0
  101. package/src/server/auth/helpers/jtiReplayGuard.ts +41 -0
  102. package/src/server/auth/helpers/safeRedirectPath.ts +19 -0
  103. package/src/server/auth/index.ts +4 -0
  104. package/src/server/auth/primitives/$authFederationBroker.ts +273 -0
  105. package/src/server/auth/primitives/$authFederationClient.ts +89 -0
  106. package/src/server/auth/providers/ServerAuthProvider.ts +18 -4
  107. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +70 -0
  108. package/src/server/cookies/providers/ServerCookiesProvider.ts +23 -3
  109. package/src/server/core/interfaces/ServerRequest.ts +8 -0
  110. package/src/server/core/primitives/$route.ts +27 -0
  111. package/src/cli/core/tasks/BuildSitemapTask.ts +0 -130
@@ -1,130 +0,0 @@
1
- import { $inject } from "alepha";
2
- import { FileSystemProvider } from "alepha/system";
3
- import { BuildTask, type BuildTaskContext } from "./BuildTask.ts";
4
-
5
- /**
6
- * Generate sitemap.xml from Alepha page primitives.
7
- *
8
- * Queries all page primitives and generates a sitemap.xml
9
- * containing URLs for all accessible pages.
10
- */
11
- export class BuildSitemapTask extends BuildTask {
12
- protected readonly fs = $inject(FileSystemProvider);
13
-
14
- async run(ctx: BuildTaskContext): Promise<void> {
15
- const hostname = ctx.options.sitemap?.hostname;
16
- if (!hostname) {
17
- return;
18
- }
19
-
20
- const pages = this.getSitemapPages(ctx);
21
- if (pages.length === 0) {
22
- return;
23
- }
24
-
25
- const distDir = ctx.options.output?.dist ?? "dist";
26
- const publicDir = ctx.options.output?.public ?? "public";
27
- const output = this.fs.join(ctx.root, distDir, publicDir, "sitemap.xml");
28
-
29
- await ctx.run({
30
- name: "generate sitemap",
31
- handler: async () => {
32
- const xml = this.generateSitemapFromPages(pages, hostname);
33
- await this.fs.writeFile(output, xml);
34
- },
35
- });
36
- }
37
-
38
- protected getSitemapPages(ctx: BuildTaskContext): any[] {
39
- const pages = ctx.alepha.primitives("page") as any[];
40
- return pages.filter((page) => {
41
- const options = page.options;
42
- const path: string = options.path ?? "";
43
- if (options.children) {
44
- return false;
45
- }
46
- if (path.includes("*")) {
47
- return false;
48
- }
49
- if (path === "/404") {
50
- return false;
51
- }
52
- if (!options.schema?.params) {
53
- return true;
54
- }
55
- if (
56
- options.static &&
57
- typeof options.static === "object" &&
58
- options.static.entries
59
- ) {
60
- return true;
61
- }
62
- return false;
63
- });
64
- }
65
-
66
- protected generateSitemapFromPages(pages: any[], baseUrl: string): string {
67
- const urls: string[] = [];
68
- const normalizedBaseUrl = baseUrl.replace(/\/$/, "");
69
-
70
- for (const page of pages) {
71
- const options = page.options;
72
-
73
- if (!options.schema?.params) {
74
- const path = options.path || "";
75
- const url = `${normalizedBaseUrl}${path === "" ? "/" : path}`;
76
- urls.push(url);
77
- } else if (
78
- options.static &&
79
- typeof options.static === "object" &&
80
- options.static.entries
81
- ) {
82
- for (const entry of options.static.entries) {
83
- const path = this.buildPathFromParams(
84
- options.path || "",
85
- entry.params || {},
86
- );
87
- const url = `${normalizedBaseUrl}${path}`;
88
- urls.push(url);
89
- }
90
- }
91
- }
92
-
93
- return this.buildSitemapXml(urls);
94
- }
95
-
96
- protected buildPathFromParams(
97
- pathPattern: string,
98
- params: Record<string, any>,
99
- ): string {
100
- let path = pathPattern;
101
- for (const [key, value] of Object.entries(params)) {
102
- path = path.replace(`:${key}`, String(value));
103
- }
104
- return path || "/";
105
- }
106
-
107
- protected buildSitemapXml(urls: string[]): string {
108
- const lastMod = new Date().toISOString().split("T")[0];
109
- const urlEntries = urls
110
- .map(
111
- (url) =>
112
- ` <url>\n <loc>${this.escapeXml(url)}</loc>\n <lastmod>${lastMod}</lastmod>\n </url>`,
113
- )
114
- .join("\n");
115
-
116
- return `<?xml version="1.0" encoding="UTF-8"?>
117
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
118
- ${urlEntries}
119
- </urlset>`;
120
- }
121
-
122
- protected escapeXml(str: string): string {
123
- return str
124
- .replace(/&/g, "&amp;")
125
- .replace(/</g, "&lt;")
126
- .replace(/>/g, "&gt;")
127
- .replace(/"/g, "&quot;")
128
- .replace(/'/g, "&#39;");
129
- }
130
- }