proteum 1.0.2 → 2.0.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 (185) hide show
  1. package/AGENTS.md +101 -0
  2. package/agents/codex/AGENTS.md +95 -0
  3. package/agents/codex/CODING_STYLE.md +71 -0
  4. package/agents/codex/agents.md.zip +0 -0
  5. package/agents/codex/client/AGENTS.md +102 -0
  6. package/agents/codex/client/pages/AGENTS.md +35 -0
  7. package/agents/codex/server/routes/AGENTS.md +12 -0
  8. package/agents/codex/server/services/AGENTS.md +137 -0
  9. package/agents/codex/tests/AGENTS.md +8 -0
  10. package/cli/app/config.ts +13 -11
  11. package/cli/app/index.ts +74 -82
  12. package/cli/bin.js +1 -1
  13. package/cli/commands/build.ts +51 -14
  14. package/cli/commands/check.ts +19 -0
  15. package/cli/commands/deploy/app.ts +4 -8
  16. package/cli/commands/deploy/web.ts +16 -20
  17. package/cli/commands/dev.ts +189 -64
  18. package/cli/commands/devEvents.ts +106 -0
  19. package/cli/commands/init.ts +63 -57
  20. package/cli/commands/lint.ts +21 -0
  21. package/cli/commands/refresh.ts +18 -0
  22. package/cli/commands/typecheck.ts +18 -0
  23. package/cli/compiler/client/identite.ts +80 -53
  24. package/cli/compiler/client/index.ts +139 -213
  25. package/cli/compiler/common/bundleAnalysis.ts +94 -0
  26. package/cli/compiler/common/clientManifest.ts +67 -0
  27. package/cli/compiler/common/controllers.ts +288 -0
  28. package/cli/compiler/common/files/autres.ts +7 -18
  29. package/cli/compiler/common/files/images.ts +40 -37
  30. package/cli/compiler/common/files/style.ts +11 -22
  31. package/cli/compiler/common/generatedRouteModules.ts +368 -0
  32. package/cli/compiler/common/index.ts +31 -65
  33. package/cli/compiler/common/loaders/forbid-ssr-import.js +13 -0
  34. package/cli/compiler/common/rspackAliases.ts +13 -0
  35. package/cli/compiler/common/scripts.ts +37 -0
  36. package/cli/compiler/index.ts +781 -230
  37. package/cli/compiler/server/index.ts +59 -75
  38. package/cli/compiler/writeIfChanged.ts +21 -0
  39. package/cli/index.ts +71 -72
  40. package/cli/paths.ts +51 -57
  41. package/cli/print.ts +17 -11
  42. package/cli/tsconfig.json +5 -4
  43. package/cli/utils/agents.ts +100 -0
  44. package/cli/utils/check.ts +71 -0
  45. package/cli/utils/index.ts +1 -3
  46. package/cli/utils/keyboard.ts +8 -25
  47. package/cli/utils/runProcess.ts +30 -0
  48. package/client/app/component.tsx +29 -29
  49. package/client/app/index.ts +36 -57
  50. package/client/app/service.ts +7 -12
  51. package/client/app.tsconfig.json +2 -2
  52. package/client/components/Dialog/Manager.ssr.tsx +40 -0
  53. package/client/components/Dialog/Manager.tsx +119 -150
  54. package/client/components/Dialog/status.tsx +3 -3
  55. package/client/components/index.ts +1 -1
  56. package/client/components/types.d.ts +1 -3
  57. package/client/dev/hmr.ts +65 -0
  58. package/client/global.d.ts +2 -2
  59. package/client/hooks.ts +6 -9
  60. package/client/index.ts +2 -1
  61. package/client/islands/index.ts +7 -0
  62. package/client/islands/useDeferredModule.ts +199 -0
  63. package/client/pages/_layout/index.tsx +4 -12
  64. package/client/pages/useHeader.tsx +14 -21
  65. package/client/router.ts +27 -0
  66. package/client/services/router/components/Link.tsx +34 -27
  67. package/client/services/router/components/Page.tsx +6 -14
  68. package/client/services/router/components/router.ssr.tsx +36 -0
  69. package/client/services/router/components/router.tsx +63 -83
  70. package/client/services/router/index.tsx +185 -220
  71. package/client/services/router/request/api.ts +97 -119
  72. package/client/services/router/request/history.ts +2 -2
  73. package/client/services/router/request/index.ts +13 -12
  74. package/client/services/router/request/multipart.ts +72 -62
  75. package/client/services/router/response/index.tsx +68 -61
  76. package/client/services/router/response/page.ts +28 -32
  77. package/client/utils/dom.ts +17 -33
  78. package/common/app/index.ts +3 -3
  79. package/common/data/chaines/index.ts +22 -23
  80. package/common/data/dates.ts +35 -70
  81. package/common/data/markdown.ts +42 -39
  82. package/common/dev/serverHotReload.ts +26 -0
  83. package/common/errors/index.tsx +110 -142
  84. package/common/router/contracts.ts +29 -0
  85. package/common/router/index.ts +89 -108
  86. package/common/router/layouts.ts +34 -47
  87. package/common/router/pageSetup.ts +50 -0
  88. package/common/router/register.ts +53 -24
  89. package/common/router/request/api.ts +30 -36
  90. package/common/router/request/index.ts +2 -8
  91. package/common/router/response/index.ts +8 -15
  92. package/common/router/response/page.ts +70 -58
  93. package/common/utils.ts +1 -1
  94. package/doc/TODO.md +1 -1
  95. package/eslint.js +62 -0
  96. package/package.json +12 -47
  97. package/prettier.config.cjs +9 -0
  98. package/scripts/cleanup-generated-controllers.ts +62 -0
  99. package/scripts/fix-reference-app-typing.ts +490 -0
  100. package/scripts/refactor-client-app-imports.ts +244 -0
  101. package/scripts/refactor-client-pages.ts +587 -0
  102. package/scripts/refactor-server-controllers.ts +470 -0
  103. package/scripts/refactor-server-runtime-aliases.ts +360 -0
  104. package/scripts/restore-client-app-import-files.ts +41 -0
  105. package/scripts/restore-files-from-git-head.ts +20 -0
  106. package/scripts/update-codex-agents.ts +35 -0
  107. package/server/app/commands.ts +35 -64
  108. package/server/app/container/config.ts +48 -59
  109. package/server/app/container/console/index.ts +202 -248
  110. package/server/app/container/index.ts +33 -71
  111. package/server/app/controller/index.ts +61 -0
  112. package/server/app/index.ts +39 -105
  113. package/server/app/service/container.ts +41 -42
  114. package/server/app/service/index.ts +120 -147
  115. package/server/context.ts +1 -1
  116. package/server/index.ts +25 -1
  117. package/server/services/auth/index.ts +75 -115
  118. package/server/services/auth/router/index.ts +31 -32
  119. package/server/services/auth/router/request.ts +14 -16
  120. package/server/services/cron/CronTask.ts +13 -26
  121. package/server/services/cron/index.ts +14 -36
  122. package/server/services/disks/driver.ts +40 -58
  123. package/server/services/disks/drivers/local/index.ts +79 -90
  124. package/server/services/disks/drivers/s3/index.ts +116 -163
  125. package/server/services/disks/index.ts +23 -38
  126. package/server/services/email/index.ts +45 -104
  127. package/server/services/email/utils.ts +14 -27
  128. package/server/services/fetch/index.ts +53 -85
  129. package/server/services/prisma/Facet.ts +39 -91
  130. package/server/services/prisma/index.ts +74 -110
  131. package/server/services/router/generatedRuntime.ts +29 -0
  132. package/server/services/router/http/index.ts +78 -73
  133. package/server/services/router/http/multipart.ts +19 -42
  134. package/server/services/router/index.ts +378 -365
  135. package/server/services/router/request/api.ts +26 -25
  136. package/server/services/router/request/index.ts +44 -51
  137. package/server/services/router/request/service.ts +7 -11
  138. package/server/services/router/request/validation/zod.ts +111 -148
  139. package/server/services/router/response/index.ts +110 -125
  140. package/server/services/router/response/mask/Filter.ts +31 -72
  141. package/server/services/router/response/mask/index.ts +8 -15
  142. package/server/services/router/response/mask/selecteurs.ts +11 -25
  143. package/server/services/router/response/page/clientManifest.ts +25 -0
  144. package/server/services/router/response/page/document.tsx +199 -127
  145. package/server/services/router/response/page/index.tsx +89 -94
  146. package/server/services/router/service.ts +13 -15
  147. package/server/services/schema/index.ts +17 -26
  148. package/server/services/schema/request.ts +19 -33
  149. package/server/services/schema/router/index.ts +8 -11
  150. package/server/services/security/encrypt/aes/index.ts +15 -35
  151. package/server/utils/slug.ts +29 -35
  152. package/skills/clean-project-code/SKILL.md +63 -0
  153. package/skills/clean-project-code/agents/openai.yaml +4 -0
  154. package/tsconfig.common.json +4 -3
  155. package/tsconfig.json +4 -1
  156. package/types/aliases.d.ts +17 -21
  157. package/types/controller-input.test.ts +48 -0
  158. package/types/express-extra.d.ts +6 -0
  159. package/types/global/constants.d.ts +13 -0
  160. package/types/global/express-extra.d.ts +6 -0
  161. package/types/global/modules.d.ts +13 -16
  162. package/types/global/utils.d.ts +17 -49
  163. package/types/global/vendors.d.ts +62 -0
  164. package/types/icons.d.ts +65 -1
  165. package/types/uuid.d.ts +3 -0
  166. package/types/vendors.d.ts +62 -0
  167. package/cli/compiler/common/babel/index.ts +0 -170
  168. package/cli/compiler/common/babel/plugins/index.ts +0 -0
  169. package/cli/compiler/common/babel/plugins/services.ts +0 -586
  170. package/cli/compiler/common/babel/routes/imports.ts +0 -127
  171. package/cli/compiler/common/babel/routes/routes.ts +0 -1130
  172. package/client/services/captcha/index.ts +0 -67
  173. package/client/services/socket/index.ts +0 -147
  174. package/common/data/rte/nodes.ts +0 -83
  175. package/common/data/stats.ts +0 -90
  176. package/common/utils/rte.ts +0 -183
  177. package/server/services/auth/old.ts +0 -277
  178. package/server/services/cache/commands.ts +0 -41
  179. package/server/services/cache/index.ts +0 -297
  180. package/server/services/cache/service.json +0 -6
  181. package/server/services/socket/index.ts +0 -162
  182. package/server/services/socket/scope.ts +0 -226
  183. package/server/services/socket/service.json +0 -6
  184. package/server/services_old/SocketClient.ts +0 -92
  185. package/server/services_old/Token.old.ts +0 -97
@@ -19,125 +19,104 @@ import type Page from '../response/page';
19
19
  - TYPES
20
20
  ----------------------------------*/
21
21
 
22
- export type PropsPage<TParams extends { [cle: string]: unknown }> = TParams & {
23
- data: {[cle: string]: unknown}
24
- }
22
+ export type PropsPage<TParams extends { [cle: string]: unknown }> = TParams & { data: { [cle: string]: unknown } };
25
23
 
26
- export type TProps = {
27
- service?: ClientRouter,
28
- loaderComponent?: React.ComponentType<{ isLoading: boolean }>,
29
- }
24
+ export type TProps = { service?: ClientRouter; loaderComponent?: React.ComponentType<{ isLoading: boolean }> };
30
25
 
31
26
  /*----------------------------------
32
- - PAGE STATE
27
+ - HELPERS
33
28
  ----------------------------------*/
34
29
 
35
- const LogPrefix = `[router][component]`
30
+ const LogPrefix = `[router][component]`;
36
31
 
37
- const PageLoading = ({ clientRouter, loaderComponent: LoaderComponent }: {
38
- clientRouter?: ClientRouter,
39
- loaderComponent?: React.ComponentType<{ isLoading: boolean }>,
32
+ const PageLoading = ({
33
+ clientRouter,
34
+ loaderComponent: LoaderComponent,
35
+ }: {
36
+ clientRouter?: ClientRouter;
37
+ loaderComponent?: React.ComponentType<{ isLoading: boolean }>;
40
38
  }) => {
41
-
42
39
  const [isLoading, setLoading] = React.useState(false);
43
40
 
44
- if (clientRouter)
45
- clientRouter.setLoading = setLoading;
46
-
47
- return LoaderComponent
48
- ? <LoaderComponent isLoading={isLoading} />
49
- : (
50
- <div id="loading" class={isLoading ? 'display' : ''}>
51
- <i src="spin" />
52
- </div>
53
- )
54
- }
55
-
56
- const scrollToElement = (selector: string) => document.querySelector( selector )
57
- ?.scrollIntoView({
58
- behavior: "smooth",
59
- block: "start",
60
- inline: "nearest"
61
- })
41
+ if (clientRouter) clientRouter.setLoading = setLoading;
42
+
43
+ return LoaderComponent ? (
44
+ <LoaderComponent isLoading={isLoading} />
45
+ ) : (
46
+ <div id="loading" class={isLoading ? 'display' : ''}>
47
+ <i class="spin" />
48
+ </div>
49
+ );
50
+ };
51
+
52
+ const scrollToElement = (selector: string) =>
53
+ document.querySelector(selector)?.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });
62
54
 
63
55
  /*----------------------------------
64
56
  - COMPONENT
65
57
  ----------------------------------*/
66
58
  export default ({ service: clientRouter, loaderComponent }: TProps) => {
67
-
68
59
  /*----------------------------------
69
- - INIT
60
+ - CONTEXT
70
61
  ----------------------------------*/
71
62
 
72
63
  const context = useContext();
73
-
74
- const [currentPage, setCurrentPage] = React.useState<undefined | Page>(context.page);
64
+ const [currentPage, setCurrentPage] = React.useState<undefined | Page>(context.page as Page | undefined);
75
65
 
76
66
  // Bind context object to client router
77
67
  if (clientRouter !== undefined) {
78
68
  clientRouter.context = context;
79
69
  clientRouter.navigate = changePage;
80
70
  }
81
-
71
+
82
72
  /*----------------------------------
83
73
  - ACTIONS
84
74
  ----------------------------------*/
85
75
  const resolvePage = async (request: ClientRequest, data: {} = {}) => {
86
-
87
76
  if (!clientRouter) return;
88
77
 
89
- const currentRequest = context.request;
90
- context.request = request;
78
+ const currentRequest = context.request as ClientRequest;
79
+ context.request = request as typeof context.request;
91
80
 
92
81
  // WARNING: Don"t try to play with pages here, since the object will not be updated
93
82
  // If needed to play with pages, do it in the setPages callback below
94
83
  // Unchanged path
95
84
  if (
96
- request.path === currentRequest.path
97
- &&
98
- request.hash !== currentRequest.hash
99
- &&
85
+ request.path === currentRequest.path &&
86
+ request.hash !== currentRequest.hash &&
100
87
  request.hash !== undefined
101
88
  ) {
102
89
  scrollToElement(request.hash);
103
90
  return;
104
91
  }
105
-
92
+
106
93
  // Set loading state
107
94
  clientRouter.runHook('page.change', request);
108
- window.scrollTo({
109
- top: 0,
110
- behavior: 'smooth'
111
- });
95
+ window.scrollTo({ top: 0, behavior: 'smooth' });
112
96
  clientRouter.setLoading(true);
113
- const newpage = context.page = await clientRouter.resolve(request);
97
+ const newpage = (context.page = await clientRouter.resolve(request));
114
98
 
115
99
  // Unable to load (no connection, server error, ....)
116
- if (newpage === null) {
117
- return;
118
- }
100
+ if (newpage === null) return;
119
101
 
120
102
  return await changePage(newpage, data, request);
121
- }
103
+ };
122
104
 
123
105
  async function changePage(newpage: Page, data?: {}, request?: ClientRequest) {
124
-
125
106
  // Fetch API data to hydrate the page
126
107
  try {
127
108
  await newpage.preRender();
128
109
  } catch (error) {
129
- console.error(LogPrefix, "Unable to fetch data:", error);
110
+ console.error(LogPrefix, 'Unable to fetch data:', error);
130
111
  clientRouter?.setLoading(false);
131
112
  return;
132
113
  }
133
114
 
134
115
  // Add additional data
135
- if (data)
136
- newpage.data = { ...newpage.data, ...data };
116
+ if (data) newpage.data = { ...newpage.data, ...data };
137
117
 
138
118
  // Add page container
139
- setCurrentPage( page => {
140
-
119
+ setCurrentPage((page) => {
141
120
  // WARN: Don't cancel navigation if same page as before, as we already instanciated the new page and bound the context with it
142
121
  // Otherwise it would cause reference issues (ex: page.setAllData makes ref to the new context)
143
122
 
@@ -145,7 +124,6 @@ export default ({ service: clientRouter, loaderComponent }: TProps) => {
145
124
  const curLayout = currentPage?.layout;
146
125
  const newLayout = newpage?.layout;
147
126
  if (newLayout && curLayout && newLayout.path !== curLayout.path) {
148
-
149
127
  // TEMPORARY FIX: reload everything when we change layout
150
128
  // Because layout can have a different CSS theme
151
129
  // But when we call setLayout, the style of the previous layout are still oaded and applied
@@ -154,35 +132,35 @@ export default ({ service: clientRouter, loaderComponent }: TProps) => {
154
132
  /*window.location.replace( request ? request.url : window.location.href );
155
133
  return page; // Don't spread since it's an instance*/
156
134
 
157
- context.app.setLayout(newLayout);
135
+ (context.app as { setLayout?: (layout: NonNullable<typeof newLayout>) => void }).setLayout?.(newLayout);
158
136
  }
159
137
 
160
138
  return newpage;
161
139
  });
162
140
  }
163
141
 
164
- const restoreScroll = (currentPage?: Page) => currentPage?.scrollToId
165
- && scrollToElement( currentPage.scrollToId.substring(1) )
142
+ /*----------------------------------
143
+ - HOOKS
144
+ ----------------------------------*/
145
+
146
+ const restoreScroll = (currentPage?: Page) =>
147
+ currentPage?.scrollToId && scrollToElement(currentPage.scrollToId.substring(1));
166
148
 
167
149
  // First render
168
150
  React.useEffect(() => {
169
-
170
151
  // Resolve page if it wasn't done via SSR
171
- if (context.page === undefined)
172
- resolvePage(context.request);
152
+ if (context.page === undefined) resolvePage(context.request as ClientRequest);
173
153
 
174
154
  // Foreach URL change (Ex: bowser' back buttton)
175
155
  return history?.listen(async (locationUpdate) => {
176
-
177
156
  // Load the concerned route
178
157
  const request = new ClientRequest(locationUpdate.location, context.Router);
179
158
  await resolvePage(request);
180
- })
159
+ });
181
160
  }, []);
182
161
 
183
162
  // On every page change
184
163
  React.useEffect(() => {
185
-
186
164
  if (!clientRouter) return;
187
165
 
188
166
  // Page loaded
@@ -196,23 +174,25 @@ export default ({ service: clientRouter, loaderComponent }: TProps) => {
196
174
  restoreScroll(currentPage);
197
175
 
198
176
  // Hooks
199
- clientRouter.runHook('page.changed', currentPage)
200
-
177
+ clientRouter.runHook('page.changed', (currentPage?.context.request || context.request) as ClientRequest);
201
178
  }, [currentPage]);
202
179
 
203
180
  /*----------------------------------
204
181
  - RENDER
205
182
  ----------------------------------*/
206
183
  // Render the page component
207
- return <>
208
- {currentPage && (
209
- <PageComponent page={currentPage}
210
- /* Create a new instance of the Page component every time the page change
211
- Otherwise the page will memorise the data of the previous page */
212
- key={currentPage.chunkId === undefined ? undefined : 'page_' + currentPage.chunkId}
213
- />
214
- )}
215
-
216
- <PageLoading clientRouter={clientRouter} loaderComponent={loaderComponent} />
217
- </>
218
- }
184
+ return (
185
+ <>
186
+ {currentPage && (
187
+ <PageComponent
188
+ page={currentPage as Parameters<typeof PageComponent>[0]['page']}
189
+ /* Create a new instance of the Page component every time the page change
190
+ Otherwise the page will memorise the data of the previous page */
191
+ key={currentPage.chunkId === undefined ? undefined : 'page_' + currentPage.chunkId}
192
+ />
193
+ )}
194
+
195
+ <PageLoading clientRouter={clientRouter} loaderComponent={loaderComponent} />
196
+ </>
197
+ );
198
+ };