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.
- package/AGENTS.md +101 -0
- package/agents/codex/AGENTS.md +95 -0
- package/agents/codex/CODING_STYLE.md +71 -0
- package/agents/codex/agents.md.zip +0 -0
- package/agents/codex/client/AGENTS.md +102 -0
- package/agents/codex/client/pages/AGENTS.md +35 -0
- package/agents/codex/server/routes/AGENTS.md +12 -0
- package/agents/codex/server/services/AGENTS.md +137 -0
- package/agents/codex/tests/AGENTS.md +8 -0
- package/cli/app/config.ts +13 -11
- package/cli/app/index.ts +74 -82
- package/cli/bin.js +1 -1
- package/cli/commands/build.ts +51 -14
- package/cli/commands/check.ts +19 -0
- package/cli/commands/deploy/app.ts +4 -8
- package/cli/commands/deploy/web.ts +16 -20
- package/cli/commands/dev.ts +189 -64
- package/cli/commands/devEvents.ts +106 -0
- package/cli/commands/init.ts +63 -57
- package/cli/commands/lint.ts +21 -0
- package/cli/commands/refresh.ts +18 -0
- package/cli/commands/typecheck.ts +18 -0
- package/cli/compiler/client/identite.ts +80 -53
- package/cli/compiler/client/index.ts +139 -213
- package/cli/compiler/common/bundleAnalysis.ts +94 -0
- package/cli/compiler/common/clientManifest.ts +67 -0
- package/cli/compiler/common/controllers.ts +288 -0
- package/cli/compiler/common/files/autres.ts +7 -18
- package/cli/compiler/common/files/images.ts +40 -37
- package/cli/compiler/common/files/style.ts +11 -22
- package/cli/compiler/common/generatedRouteModules.ts +368 -0
- package/cli/compiler/common/index.ts +31 -65
- package/cli/compiler/common/loaders/forbid-ssr-import.js +13 -0
- package/cli/compiler/common/rspackAliases.ts +13 -0
- package/cli/compiler/common/scripts.ts +37 -0
- package/cli/compiler/index.ts +781 -230
- package/cli/compiler/server/index.ts +59 -75
- package/cli/compiler/writeIfChanged.ts +21 -0
- package/cli/index.ts +71 -72
- package/cli/paths.ts +51 -57
- package/cli/print.ts +17 -11
- package/cli/tsconfig.json +5 -4
- package/cli/utils/agents.ts +100 -0
- package/cli/utils/check.ts +71 -0
- package/cli/utils/index.ts +1 -3
- package/cli/utils/keyboard.ts +8 -25
- package/cli/utils/runProcess.ts +30 -0
- package/client/app/component.tsx +29 -29
- package/client/app/index.ts +36 -57
- package/client/app/service.ts +7 -12
- package/client/app.tsconfig.json +2 -2
- package/client/components/Dialog/Manager.ssr.tsx +40 -0
- package/client/components/Dialog/Manager.tsx +119 -150
- package/client/components/Dialog/status.tsx +3 -3
- package/client/components/index.ts +1 -1
- package/client/components/types.d.ts +1 -3
- package/client/dev/hmr.ts +65 -0
- package/client/global.d.ts +2 -2
- package/client/hooks.ts +6 -9
- package/client/index.ts +2 -1
- package/client/islands/index.ts +7 -0
- package/client/islands/useDeferredModule.ts +199 -0
- package/client/pages/_layout/index.tsx +4 -12
- package/client/pages/useHeader.tsx +14 -21
- package/client/router.ts +27 -0
- package/client/services/router/components/Link.tsx +34 -27
- package/client/services/router/components/Page.tsx +6 -14
- package/client/services/router/components/router.ssr.tsx +36 -0
- package/client/services/router/components/router.tsx +63 -83
- package/client/services/router/index.tsx +185 -220
- package/client/services/router/request/api.ts +97 -119
- package/client/services/router/request/history.ts +2 -2
- package/client/services/router/request/index.ts +13 -12
- package/client/services/router/request/multipart.ts +72 -62
- package/client/services/router/response/index.tsx +68 -61
- package/client/services/router/response/page.ts +28 -32
- package/client/utils/dom.ts +17 -33
- package/common/app/index.ts +3 -3
- package/common/data/chaines/index.ts +22 -23
- package/common/data/dates.ts +35 -70
- package/common/data/markdown.ts +42 -39
- package/common/dev/serverHotReload.ts +26 -0
- package/common/errors/index.tsx +110 -142
- package/common/router/contracts.ts +29 -0
- package/common/router/index.ts +89 -108
- package/common/router/layouts.ts +34 -47
- package/common/router/pageSetup.ts +50 -0
- package/common/router/register.ts +53 -24
- package/common/router/request/api.ts +30 -36
- package/common/router/request/index.ts +2 -8
- package/common/router/response/index.ts +8 -15
- package/common/router/response/page.ts +70 -58
- package/common/utils.ts +1 -1
- package/doc/TODO.md +1 -1
- package/eslint.js +62 -0
- package/package.json +12 -47
- package/prettier.config.cjs +9 -0
- package/scripts/cleanup-generated-controllers.ts +62 -0
- package/scripts/fix-reference-app-typing.ts +490 -0
- package/scripts/refactor-client-app-imports.ts +244 -0
- package/scripts/refactor-client-pages.ts +587 -0
- package/scripts/refactor-server-controllers.ts +470 -0
- package/scripts/refactor-server-runtime-aliases.ts +360 -0
- package/scripts/restore-client-app-import-files.ts +41 -0
- package/scripts/restore-files-from-git-head.ts +20 -0
- package/scripts/update-codex-agents.ts +35 -0
- package/server/app/commands.ts +35 -64
- package/server/app/container/config.ts +48 -59
- package/server/app/container/console/index.ts +202 -248
- package/server/app/container/index.ts +33 -71
- package/server/app/controller/index.ts +61 -0
- package/server/app/index.ts +39 -105
- package/server/app/service/container.ts +41 -42
- package/server/app/service/index.ts +120 -147
- package/server/context.ts +1 -1
- package/server/index.ts +25 -1
- package/server/services/auth/index.ts +75 -115
- package/server/services/auth/router/index.ts +31 -32
- package/server/services/auth/router/request.ts +14 -16
- package/server/services/cron/CronTask.ts +13 -26
- package/server/services/cron/index.ts +14 -36
- package/server/services/disks/driver.ts +40 -58
- package/server/services/disks/drivers/local/index.ts +79 -90
- package/server/services/disks/drivers/s3/index.ts +116 -163
- package/server/services/disks/index.ts +23 -38
- package/server/services/email/index.ts +45 -104
- package/server/services/email/utils.ts +14 -27
- package/server/services/fetch/index.ts +53 -85
- package/server/services/prisma/Facet.ts +39 -91
- package/server/services/prisma/index.ts +74 -110
- package/server/services/router/generatedRuntime.ts +29 -0
- package/server/services/router/http/index.ts +78 -73
- package/server/services/router/http/multipart.ts +19 -42
- package/server/services/router/index.ts +378 -365
- package/server/services/router/request/api.ts +26 -25
- package/server/services/router/request/index.ts +44 -51
- package/server/services/router/request/service.ts +7 -11
- package/server/services/router/request/validation/zod.ts +111 -148
- package/server/services/router/response/index.ts +110 -125
- package/server/services/router/response/mask/Filter.ts +31 -72
- package/server/services/router/response/mask/index.ts +8 -15
- package/server/services/router/response/mask/selecteurs.ts +11 -25
- package/server/services/router/response/page/clientManifest.ts +25 -0
- package/server/services/router/response/page/document.tsx +199 -127
- package/server/services/router/response/page/index.tsx +89 -94
- package/server/services/router/service.ts +13 -15
- package/server/services/schema/index.ts +17 -26
- package/server/services/schema/request.ts +19 -33
- package/server/services/schema/router/index.ts +8 -11
- package/server/services/security/encrypt/aes/index.ts +15 -35
- package/server/utils/slug.ts +29 -35
- package/skills/clean-project-code/SKILL.md +63 -0
- package/skills/clean-project-code/agents/openai.yaml +4 -0
- package/tsconfig.common.json +4 -3
- package/tsconfig.json +4 -1
- package/types/aliases.d.ts +17 -21
- package/types/controller-input.test.ts +48 -0
- package/types/express-extra.d.ts +6 -0
- package/types/global/constants.d.ts +13 -0
- package/types/global/express-extra.d.ts +6 -0
- package/types/global/modules.d.ts +13 -16
- package/types/global/utils.d.ts +17 -49
- package/types/global/vendors.d.ts +62 -0
- package/types/icons.d.ts +65 -1
- package/types/uuid.d.ts +3 -0
- package/types/vendors.d.ts +62 -0
- package/cli/compiler/common/babel/index.ts +0 -170
- package/cli/compiler/common/babel/plugins/index.ts +0 -0
- package/cli/compiler/common/babel/plugins/services.ts +0 -586
- package/cli/compiler/common/babel/routes/imports.ts +0 -127
- package/cli/compiler/common/babel/routes/routes.ts +0 -1130
- package/client/services/captcha/index.ts +0 -67
- package/client/services/socket/index.ts +0 -147
- package/common/data/rte/nodes.ts +0 -83
- package/common/data/stats.ts +0 -90
- package/common/utils/rte.ts +0 -183
- package/server/services/auth/old.ts +0 -277
- package/server/services/cache/commands.ts +0 -41
- package/server/services/cache/index.ts +0 -297
- package/server/services/cache/service.json +0 -6
- package/server/services/socket/index.ts +0 -162
- package/server/services/socket/scope.ts +0 -226
- package/server/services/socket/service.json +0 -6
- package/server/services_old/SocketClient.ts +0 -92
- 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
|
-
-
|
|
27
|
+
- HELPERS
|
|
33
28
|
----------------------------------*/
|
|
34
29
|
|
|
35
|
-
const LogPrefix = `[router][component]
|
|
30
|
+
const LogPrefix = `[router][component]`;
|
|
36
31
|
|
|
37
|
-
const PageLoading = ({
|
|
38
|
-
clientRouter
|
|
39
|
-
loaderComponent
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
:
|
|
50
|
-
<
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
-
|
|
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,
|
|
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(
|
|
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
|
-
|
|
165
|
-
|
|
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
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
+
};
|