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.
Files changed (156) hide show
  1. package/.dockerignore +10 -0
  2. package/Rte.zip +0 -0
  3. package/cli/app/config.ts +54 -0
  4. package/cli/app/index.ts +195 -0
  5. package/cli/bin.js +11 -0
  6. package/cli/commands/build.ts +34 -0
  7. package/cli/commands/deploy/app.ts +29 -0
  8. package/cli/commands/deploy/web.ts +60 -0
  9. package/cli/commands/dev.ts +109 -0
  10. package/cli/commands/init.ts +85 -0
  11. package/cli/compiler/client/identite.ts +72 -0
  12. package/cli/compiler/client/index.ts +334 -0
  13. package/cli/compiler/common/babel/index.ts +170 -0
  14. package/cli/compiler/common/babel/plugins/index.ts +0 -0
  15. package/cli/compiler/common/babel/plugins/services.ts +579 -0
  16. package/cli/compiler/common/babel/routes/imports.ts +127 -0
  17. package/cli/compiler/common/babel/routes/routes.ts +1130 -0
  18. package/cli/compiler/common/files/autres.ts +39 -0
  19. package/cli/compiler/common/files/images.ts +35 -0
  20. package/cli/compiler/common/files/style.ts +78 -0
  21. package/cli/compiler/common/index.ts +154 -0
  22. package/cli/compiler/index.ts +532 -0
  23. package/cli/compiler/server/index.ts +211 -0
  24. package/cli/index.ts +189 -0
  25. package/cli/paths.ts +165 -0
  26. package/cli/print.ts +12 -0
  27. package/cli/tsconfig.json +38 -0
  28. package/cli/utils/index.ts +22 -0
  29. package/cli/utils/keyboard.ts +78 -0
  30. package/client/app/component.tsx +54 -0
  31. package/client/app/index.ts +142 -0
  32. package/client/app/service.ts +34 -0
  33. package/client/app.tsconfig.json +28 -0
  34. package/client/components/Button.tsx +298 -0
  35. package/client/components/Dialog/Manager.tsx +309 -0
  36. package/client/components/Dialog/card.tsx +208 -0
  37. package/client/components/Dialog/index.less +151 -0
  38. package/client/components/Dialog/status.less +176 -0
  39. package/client/components/Dialog/status.tsx +48 -0
  40. package/client/components/index.ts +2 -0
  41. package/client/components/types.d.ts +3 -0
  42. package/client/data/input.ts +32 -0
  43. package/client/global.d.ts +5 -0
  44. package/client/hooks.ts +22 -0
  45. package/client/index.ts +6 -0
  46. package/client/pages/_layout/index.less +6 -0
  47. package/client/pages/_layout/index.tsx +43 -0
  48. package/client/pages/bug.tsx.old +60 -0
  49. package/client/pages/useHeader.tsx +50 -0
  50. package/client/services/captcha/index.ts +67 -0
  51. package/client/services/router/components/Link.tsx +46 -0
  52. package/client/services/router/components/Page.tsx +55 -0
  53. package/client/services/router/components/router.tsx +218 -0
  54. package/client/services/router/index.tsx +521 -0
  55. package/client/services/router/request/api.ts +267 -0
  56. package/client/services/router/request/history.ts +5 -0
  57. package/client/services/router/request/index.ts +53 -0
  58. package/client/services/router/request/multipart.ts +147 -0
  59. package/client/services/router/response/index.tsx +128 -0
  60. package/client/services/router/response/page.ts +86 -0
  61. package/client/services/socket/index.ts +147 -0
  62. package/client/utils/dom.ts +77 -0
  63. package/common/app/index.ts +9 -0
  64. package/common/data/chaines/index.ts +54 -0
  65. package/common/data/dates.ts +179 -0
  66. package/common/data/markdown.ts +73 -0
  67. package/common/data/rte/nodes.ts +83 -0
  68. package/common/data/stats.ts +90 -0
  69. package/common/errors/index.tsx +326 -0
  70. package/common/router/index.ts +213 -0
  71. package/common/router/layouts.ts +93 -0
  72. package/common/router/register.ts +55 -0
  73. package/common/router/request/api.ts +77 -0
  74. package/common/router/request/index.ts +35 -0
  75. package/common/router/response/index.ts +45 -0
  76. package/common/router/response/page.ts +128 -0
  77. package/common/utils/rte.ts +183 -0
  78. package/common/utils.ts +7 -0
  79. package/doc/TODO.md +71 -0
  80. package/doc/front/router.md +27 -0
  81. package/doc/workspace/workspace.png +0 -0
  82. package/doc/workspace/workspace2.png +0 -0
  83. package/doc/workspace/workspace_26.01.22.png +0 -0
  84. package/package.json +171 -0
  85. package/server/app/commands.ts +141 -0
  86. package/server/app/container/config.ts +203 -0
  87. package/server/app/container/console/index.ts +550 -0
  88. package/server/app/container/index.ts +137 -0
  89. package/server/app/index.ts +273 -0
  90. package/server/app/service/container.ts +88 -0
  91. package/server/app/service/index.ts +235 -0
  92. package/server/app.tsconfig.json +28 -0
  93. package/server/context.ts +4 -0
  94. package/server/index.ts +4 -0
  95. package/server/services/auth/index.ts +250 -0
  96. package/server/services/auth/old.ts +277 -0
  97. package/server/services/auth/router/index.ts +95 -0
  98. package/server/services/auth/router/request.ts +54 -0
  99. package/server/services/auth/router/service.json +6 -0
  100. package/server/services/auth/service.json +6 -0
  101. package/server/services/cache/commands.ts +41 -0
  102. package/server/services/cache/index.ts +297 -0
  103. package/server/services/cache/service.json +6 -0
  104. package/server/services/cron/CronTask.ts +86 -0
  105. package/server/services/cron/index.ts +112 -0
  106. package/server/services/cron/service.json +6 -0
  107. package/server/services/disks/driver.ts +103 -0
  108. package/server/services/disks/drivers/local/index.ts +188 -0
  109. package/server/services/disks/drivers/local/service.json +6 -0
  110. package/server/services/disks/drivers/s3/index.ts +301 -0
  111. package/server/services/disks/drivers/s3/service.json +6 -0
  112. package/server/services/disks/index.ts +90 -0
  113. package/server/services/disks/service.json +6 -0
  114. package/server/services/email/index.ts +188 -0
  115. package/server/services/email/utils.ts +53 -0
  116. package/server/services/fetch/index.ts +201 -0
  117. package/server/services/fetch/service.json +7 -0
  118. package/server/services/models.7z +0 -0
  119. package/server/services/prisma/Facet.ts +142 -0
  120. package/server/services/prisma/index.ts +201 -0
  121. package/server/services/prisma/service.json +6 -0
  122. package/server/services/router/http/index.ts +217 -0
  123. package/server/services/router/http/multipart.ts +102 -0
  124. package/server/services/router/http/session.ts.old +40 -0
  125. package/server/services/router/index.ts +801 -0
  126. package/server/services/router/request/api.ts +87 -0
  127. package/server/services/router/request/index.ts +184 -0
  128. package/server/services/router/request/service.ts +21 -0
  129. package/server/services/router/request/validation/zod.ts +180 -0
  130. package/server/services/router/response/index.ts +338 -0
  131. package/server/services/router/response/mask/Filter.ts +323 -0
  132. package/server/services/router/response/mask/index.ts +60 -0
  133. package/server/services/router/response/mask/selecteurs.ts +92 -0
  134. package/server/services/router/response/page/document.tsx +160 -0
  135. package/server/services/router/response/page/index.tsx +196 -0
  136. package/server/services/router/service.json +6 -0
  137. package/server/services/router/service.ts +36 -0
  138. package/server/services/schema/index.ts +44 -0
  139. package/server/services/schema/request.ts +49 -0
  140. package/server/services/schema/router/index.ts +28 -0
  141. package/server/services/schema/router/service.json +6 -0
  142. package/server/services/schema/service.json +6 -0
  143. package/server/services/security/encrypt/aes/index.ts +85 -0
  144. package/server/services/security/encrypt/aes/service.json +6 -0
  145. package/server/services/socket/index.ts +162 -0
  146. package/server/services/socket/scope.ts +226 -0
  147. package/server/services/socket/service.json +6 -0
  148. package/server/services_old/SocketClient.ts +92 -0
  149. package/server/services_old/Token.old.ts +97 -0
  150. package/server/utils/slug.ts +79 -0
  151. package/tsconfig.common.json +45 -0
  152. package/tsconfig.json +3 -0
  153. package/types/aliases.d.ts +54 -0
  154. package/types/global/modules.d.ts +49 -0
  155. package/types/global/utils.d.ts +103 -0
  156. 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
+ }