proteum 1.0.0-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +10 -0
- package/Rte.zip +0 -0
- package/cli/app/config.ts +54 -0
- package/cli/app/index.ts +195 -0
- package/cli/bin.js +11 -0
- package/cli/commands/build.ts +34 -0
- package/cli/commands/deploy/app.ts +29 -0
- package/cli/commands/deploy/web.ts +60 -0
- package/cli/commands/dev.ts +109 -0
- package/cli/commands/init.ts +85 -0
- package/cli/compiler/client/identite.ts +72 -0
- package/cli/compiler/client/index.ts +334 -0
- package/cli/compiler/common/babel/index.ts +170 -0
- package/cli/compiler/common/babel/plugins/index.ts +0 -0
- package/cli/compiler/common/babel/plugins/services.ts +579 -0
- package/cli/compiler/common/babel/routes/imports.ts +127 -0
- package/cli/compiler/common/babel/routes/routes.ts +1130 -0
- package/cli/compiler/common/files/autres.ts +39 -0
- package/cli/compiler/common/files/images.ts +35 -0
- package/cli/compiler/common/files/style.ts +78 -0
- package/cli/compiler/common/index.ts +154 -0
- package/cli/compiler/index.ts +532 -0
- package/cli/compiler/server/index.ts +211 -0
- package/cli/index.ts +189 -0
- package/cli/paths.ts +165 -0
- package/cli/print.ts +12 -0
- package/cli/tsconfig.json +38 -0
- package/cli/utils/index.ts +22 -0
- package/cli/utils/keyboard.ts +78 -0
- package/client/app/component.tsx +54 -0
- package/client/app/index.ts +142 -0
- package/client/app/service.ts +34 -0
- package/client/app.tsconfig.json +28 -0
- package/client/components/Button.tsx +298 -0
- package/client/components/Dialog/Manager.tsx +309 -0
- package/client/components/Dialog/card.tsx +208 -0
- package/client/components/Dialog/index.less +151 -0
- package/client/components/Dialog/status.less +176 -0
- package/client/components/Dialog/status.tsx +48 -0
- package/client/components/index.ts +2 -0
- package/client/components/types.d.ts +3 -0
- package/client/data/input.ts +32 -0
- package/client/global.d.ts +5 -0
- package/client/hooks.ts +22 -0
- package/client/index.ts +6 -0
- package/client/pages/_layout/index.less +6 -0
- package/client/pages/_layout/index.tsx +43 -0
- package/client/pages/bug.tsx.old +60 -0
- package/client/pages/useHeader.tsx +50 -0
- package/client/services/captcha/index.ts +67 -0
- package/client/services/router/components/Link.tsx +46 -0
- package/client/services/router/components/Page.tsx +55 -0
- package/client/services/router/components/router.tsx +218 -0
- package/client/services/router/index.tsx +521 -0
- package/client/services/router/request/api.ts +267 -0
- package/client/services/router/request/history.ts +5 -0
- package/client/services/router/request/index.ts +53 -0
- package/client/services/router/request/multipart.ts +147 -0
- package/client/services/router/response/index.tsx +128 -0
- package/client/services/router/response/page.ts +86 -0
- package/client/services/socket/index.ts +147 -0
- package/client/utils/dom.ts +77 -0
- package/common/app/index.ts +9 -0
- package/common/data/chaines/index.ts +54 -0
- package/common/data/dates.ts +179 -0
- package/common/data/markdown.ts +73 -0
- package/common/data/rte/nodes.ts +83 -0
- package/common/data/stats.ts +90 -0
- package/common/errors/index.tsx +326 -0
- package/common/router/index.ts +213 -0
- package/common/router/layouts.ts +93 -0
- package/common/router/register.ts +55 -0
- package/common/router/request/api.ts +77 -0
- package/common/router/request/index.ts +35 -0
- package/common/router/response/index.ts +45 -0
- package/common/router/response/page.ts +128 -0
- package/common/utils/rte.ts +183 -0
- package/common/utils.ts +7 -0
- package/doc/TODO.md +71 -0
- package/doc/front/router.md +27 -0
- package/doc/workspace/workspace.png +0 -0
- package/doc/workspace/workspace2.png +0 -0
- package/doc/workspace/workspace_26.01.22.png +0 -0
- package/package.json +171 -0
- package/server/app/commands.ts +141 -0
- package/server/app/container/config.ts +203 -0
- package/server/app/container/console/index.ts +550 -0
- package/server/app/container/index.ts +137 -0
- package/server/app/index.ts +273 -0
- package/server/app/service/container.ts +88 -0
- package/server/app/service/index.ts +235 -0
- package/server/app.tsconfig.json +28 -0
- package/server/context.ts +4 -0
- package/server/index.ts +4 -0
- package/server/services/auth/index.ts +250 -0
- package/server/services/auth/old.ts +277 -0
- package/server/services/auth/router/index.ts +95 -0
- package/server/services/auth/router/request.ts +54 -0
- package/server/services/auth/router/service.json +6 -0
- package/server/services/auth/service.json +6 -0
- package/server/services/cache/commands.ts +41 -0
- package/server/services/cache/index.ts +297 -0
- package/server/services/cache/service.json +6 -0
- package/server/services/cron/CronTask.ts +86 -0
- package/server/services/cron/index.ts +112 -0
- package/server/services/cron/service.json +6 -0
- package/server/services/disks/driver.ts +103 -0
- package/server/services/disks/drivers/local/index.ts +188 -0
- package/server/services/disks/drivers/local/service.json +6 -0
- package/server/services/disks/drivers/s3/index.ts +301 -0
- package/server/services/disks/drivers/s3/service.json +6 -0
- package/server/services/disks/index.ts +90 -0
- package/server/services/disks/service.json +6 -0
- package/server/services/email/index.ts +188 -0
- package/server/services/email/utils.ts +53 -0
- package/server/services/fetch/index.ts +201 -0
- package/server/services/fetch/service.json +7 -0
- package/server/services/models.7z +0 -0
- package/server/services/prisma/Facet.ts +142 -0
- package/server/services/prisma/index.ts +201 -0
- package/server/services/prisma/service.json +6 -0
- package/server/services/router/http/index.ts +217 -0
- package/server/services/router/http/multipart.ts +102 -0
- package/server/services/router/http/session.ts.old +40 -0
- package/server/services/router/index.ts +801 -0
- package/server/services/router/request/api.ts +87 -0
- package/server/services/router/request/index.ts +184 -0
- package/server/services/router/request/service.ts +21 -0
- package/server/services/router/request/validation/zod.ts +180 -0
- package/server/services/router/response/index.ts +338 -0
- package/server/services/router/response/mask/Filter.ts +323 -0
- package/server/services/router/response/mask/index.ts +60 -0
- package/server/services/router/response/mask/selecteurs.ts +92 -0
- package/server/services/router/response/page/document.tsx +160 -0
- package/server/services/router/response/page/index.tsx +196 -0
- package/server/services/router/service.json +6 -0
- package/server/services/router/service.ts +36 -0
- package/server/services/schema/index.ts +44 -0
- package/server/services/schema/request.ts +49 -0
- package/server/services/schema/router/index.ts +28 -0
- package/server/services/schema/router/service.json +6 -0
- package/server/services/schema/service.json +6 -0
- package/server/services/security/encrypt/aes/index.ts +85 -0
- package/server/services/security/encrypt/aes/service.json +6 -0
- package/server/services/socket/index.ts +162 -0
- package/server/services/socket/scope.ts +226 -0
- package/server/services/socket/service.json +6 -0
- package/server/services_old/SocketClient.ts +92 -0
- package/server/services_old/Token.old.ts +97 -0
- package/server/utils/slug.ts +79 -0
- package/tsconfig.common.json +45 -0
- package/tsconfig.json +3 -0
- package/types/aliases.d.ts +54 -0
- package/types/global/modules.d.ts +49 -0
- package/types/global/utils.d.ts +103 -0
- package/types/icons.d.ts +1 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/*----------------------------------
|
|
2
|
+
- DEPENDANCES
|
|
3
|
+
----------------------------------*/
|
|
4
|
+
// Npm
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
// Core
|
|
8
|
+
import useContext from '@/client/context';
|
|
9
|
+
|
|
10
|
+
// Specific
|
|
11
|
+
import type ClientRouter from '..';
|
|
12
|
+
import PageComponent from './Page';
|
|
13
|
+
import ClientRequest from '../request';
|
|
14
|
+
import { history, location, Update } from '../request/history';
|
|
15
|
+
//import initTooltips from '@client/components/Donnees/Tooltip';
|
|
16
|
+
import type Page from '../response/page';
|
|
17
|
+
|
|
18
|
+
/*----------------------------------
|
|
19
|
+
- TYPES
|
|
20
|
+
----------------------------------*/
|
|
21
|
+
|
|
22
|
+
export type PropsPage<TParams extends { [cle: string]: unknown }> = TParams & {
|
|
23
|
+
data: {[cle: string]: unknown}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type TProps = {
|
|
27
|
+
service?: ClientRouter,
|
|
28
|
+
loaderComponent?: React.ComponentType<{ isLoading: boolean }>,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/*----------------------------------
|
|
32
|
+
- PAGE STATE
|
|
33
|
+
----------------------------------*/
|
|
34
|
+
|
|
35
|
+
const LogPrefix = `[router][component]`
|
|
36
|
+
|
|
37
|
+
const PageLoading = ({ clientRouter, loaderComponent: LoaderComponent }: {
|
|
38
|
+
clientRouter?: ClientRouter,
|
|
39
|
+
loaderComponent?: React.ComponentType<{ isLoading: boolean }>,
|
|
40
|
+
}) => {
|
|
41
|
+
|
|
42
|
+
const [isLoading, setLoading] = React.useState(false);
|
|
43
|
+
|
|
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
|
+
})
|
|
62
|
+
|
|
63
|
+
/*----------------------------------
|
|
64
|
+
- COMPONENT
|
|
65
|
+
----------------------------------*/
|
|
66
|
+
export default ({ service: clientRouter, loaderComponent }: TProps) => {
|
|
67
|
+
|
|
68
|
+
/*----------------------------------
|
|
69
|
+
- INIT
|
|
70
|
+
----------------------------------*/
|
|
71
|
+
|
|
72
|
+
const context = useContext();
|
|
73
|
+
|
|
74
|
+
const [currentPage, setCurrentPage] = React.useState<undefined | Page>(context.page);
|
|
75
|
+
|
|
76
|
+
// Bind context object to client router
|
|
77
|
+
if (clientRouter !== undefined) {
|
|
78
|
+
clientRouter.context = context;
|
|
79
|
+
clientRouter.navigate = changePage;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/*----------------------------------
|
|
83
|
+
- ACTIONS
|
|
84
|
+
----------------------------------*/
|
|
85
|
+
const resolvePage = async (request: ClientRequest, data: {} = {}) => {
|
|
86
|
+
|
|
87
|
+
if (!clientRouter) return;
|
|
88
|
+
|
|
89
|
+
const currentRequest = context.request;
|
|
90
|
+
context.request = request;
|
|
91
|
+
|
|
92
|
+
// WARNING: Don"t try to play with pages here, since the object will not be updated
|
|
93
|
+
// If needed to play with pages, do it in the setPages callback below
|
|
94
|
+
// Unchanged path
|
|
95
|
+
if (
|
|
96
|
+
request.path === currentRequest.path
|
|
97
|
+
&&
|
|
98
|
+
request.hash !== currentRequest.hash
|
|
99
|
+
&&
|
|
100
|
+
request.hash !== undefined
|
|
101
|
+
) {
|
|
102
|
+
scrollToElement(request.hash);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Set loading state
|
|
107
|
+
clientRouter.runHook('page.change', request);
|
|
108
|
+
window.scrollTo({
|
|
109
|
+
top: 0,
|
|
110
|
+
behavior: 'smooth'
|
|
111
|
+
});
|
|
112
|
+
clientRouter.setLoading(true);
|
|
113
|
+
const newpage = context.page = await clientRouter.resolve(request);
|
|
114
|
+
|
|
115
|
+
// Unable to load (no connection, server error, ....)
|
|
116
|
+
if (newpage === null) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return await changePage(newpage, data, request);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async function changePage(newpage: Page, data?: {}, request?: ClientRequest) {
|
|
124
|
+
|
|
125
|
+
// Fetch API data to hydrate the page
|
|
126
|
+
try {
|
|
127
|
+
await newpage.preRender();
|
|
128
|
+
} catch (error) {
|
|
129
|
+
console.error(LogPrefix, "Unable to fetch data:", error);
|
|
130
|
+
clientRouter?.setLoading(false);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Add additional data
|
|
135
|
+
if (data)
|
|
136
|
+
newpage.data = { ...newpage.data, ...data };
|
|
137
|
+
|
|
138
|
+
// Add page container
|
|
139
|
+
setCurrentPage( page => {
|
|
140
|
+
|
|
141
|
+
// WARN: Don't cancel navigation if same page as before, as we already instanciated the new page and bound the context with it
|
|
142
|
+
// Otherwise it would cause reference issues (ex: page.setAllData makes ref to the new context)
|
|
143
|
+
|
|
144
|
+
// If if the layout changed
|
|
145
|
+
const curLayout = currentPage?.layout;
|
|
146
|
+
const newLayout = newpage?.layout;
|
|
147
|
+
if (newLayout && curLayout && newLayout.path !== curLayout.path) {
|
|
148
|
+
|
|
149
|
+
// TEMPORARY FIX: reload everything when we change layout
|
|
150
|
+
// Because layout can have a different CSS theme
|
|
151
|
+
// But when we call setLayout, the style of the previous layout are still oaded and applied
|
|
152
|
+
// Find a way to unload the previous layout / page resources before to load the new one
|
|
153
|
+
console.log(LogPrefix, `Changing layout. Before:`, curLayout, 'New layout:', newLayout);
|
|
154
|
+
/*window.location.replace( request ? request.url : window.location.href );
|
|
155
|
+
return page; // Don't spread since it's an instance*/
|
|
156
|
+
|
|
157
|
+
context.app.setLayout(newLayout);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return newpage;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const restoreScroll = (currentPage?: Page) => currentPage?.scrollToId
|
|
165
|
+
&& scrollToElement( currentPage.scrollToId.substring(1) )
|
|
166
|
+
|
|
167
|
+
// First render
|
|
168
|
+
React.useEffect(() => {
|
|
169
|
+
|
|
170
|
+
// Resolve page if it wasn't done via SSR
|
|
171
|
+
if (context.page === undefined)
|
|
172
|
+
resolvePage(context.request);
|
|
173
|
+
|
|
174
|
+
// Foreach URL change (Ex: bowser' back buttton)
|
|
175
|
+
return history?.listen(async (locationUpdate) => {
|
|
176
|
+
|
|
177
|
+
// Load the concerned route
|
|
178
|
+
const request = new ClientRequest(locationUpdate.location, context.Router);
|
|
179
|
+
await resolvePage(request);
|
|
180
|
+
})
|
|
181
|
+
}, []);
|
|
182
|
+
|
|
183
|
+
// On every page change
|
|
184
|
+
React.useEffect(() => {
|
|
185
|
+
|
|
186
|
+
if (!clientRouter) return;
|
|
187
|
+
|
|
188
|
+
// Page loaded
|
|
189
|
+
clientRouter.setLoading(false);
|
|
190
|
+
|
|
191
|
+
// Reset scroll
|
|
192
|
+
window.scrollTo(0, 0);
|
|
193
|
+
// Should be called AFTER rendering the page (so after the state change)
|
|
194
|
+
currentPage?.updateClient();
|
|
195
|
+
// Scroll to the selected content via url hash
|
|
196
|
+
restoreScroll(currentPage);
|
|
197
|
+
|
|
198
|
+
// Hooks
|
|
199
|
+
clientRouter.runHook('page.changed', currentPage)
|
|
200
|
+
|
|
201
|
+
}, [currentPage]);
|
|
202
|
+
|
|
203
|
+
/*----------------------------------
|
|
204
|
+
- RENDER
|
|
205
|
+
----------------------------------*/
|
|
206
|
+
// 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
|
+
}
|