5htp-core 0.1.2 → 0.2.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 (148) hide show
  1. package/changelog.md +5 -0
  2. package/doc/TODO.md +71 -0
  3. package/package.json +5 -4
  4. package/src/client/{App.tsx → app/component.tsx} +15 -11
  5. package/src/client/app/index.ts +128 -0
  6. package/src/client/app/service.ts +34 -0
  7. package/src/client/app.tsconfig.json +0 -4
  8. package/src/client/assets/css/components.less +52 -0
  9. package/src/client/assets/css/core.less +7 -28
  10. package/src/client/assets/css/theme.less +1 -1
  11. package/src/client/assets/css/{borders.less → utils/borders.less} +0 -0
  12. package/src/client/assets/css/{layouts.less → utils/layouts.less} +0 -0
  13. package/src/client/assets/css/{medias.less → utils/medias.less} +14 -1
  14. package/src/client/assets/css/{sizing.less → utils/sizing.less} +0 -0
  15. package/src/client/assets/css/{spacing.less → utils/spacing.less} +0 -0
  16. package/src/client/components/Card/index.tsx +13 -7
  17. package/src/client/components/Dialog/Manager.tsx +41 -14
  18. package/src/client/components/Dialog/index.less +2 -4
  19. package/src/client/components/Form/index.tsx +1 -1
  20. package/src/client/components/Row/index.less +0 -2
  21. package/src/client/components/Table/index.tsx +3 -2
  22. package/src/client/components/button.tsx +2 -2
  23. package/src/client/components/containers/Popover/index.tsx +1 -1
  24. package/src/client/components/containers/champs.less +0 -2
  25. package/src/client/components/data/spintext/index.tsx +1 -1
  26. package/src/client/components/dropdown/index.tsx +1 -1
  27. package/src/client/components/index.ts +23 -0
  28. package/src/client/components/input/BaseV2/index.less +0 -2
  29. package/src/client/components/input/BaseV2/index.tsx +1 -1
  30. package/src/client/components/input/Date/index.less +0 -2
  31. package/src/client/components/input/Periode/index.less +0 -2
  32. package/src/client/components/input/Radio/index.less +0 -2
  33. package/src/client/components/input/UploadImage/index.less +0 -2
  34. package/src/client/components/input/UploadImage/index.tsx +1 -1
  35. package/src/client/hooks/index.ts +5 -0
  36. package/src/client/hooks/useState/index.tsx +2 -2
  37. package/src/client/hooks.ts +22 -0
  38. package/src/client/index.ts +5 -0
  39. package/src/client/pages/_layout/landing/index.tsx +0 -2
  40. package/src/client/pages/_messages/400.tsx +2 -2
  41. package/src/client/pages/_messages/401.tsx +2 -2
  42. package/src/client/pages/_messages/403.tsx +2 -2
  43. package/src/client/pages/_messages/404.tsx +2 -2
  44. package/src/client/pages/_messages/500.tsx +2 -2
  45. package/src/client/pages/bug.tsx +1 -1
  46. package/src/client/pages/useHeader.tsx +1 -1
  47. package/src/client/{context/captcha.ts → services/captcha/index.ts} +0 -0
  48. package/src/client/services/metrics/index.ts +37 -0
  49. package/src/client/{router → services/router/components}/Link.tsx +1 -1
  50. package/src/client/services/router/components/Page.tsx +59 -0
  51. package/src/client/{router/component.tsx → services/router/components/router.tsx} +52 -74
  52. package/src/client/services/router/index.tsx +453 -0
  53. package/src/client/services/router/request/api.ts +227 -0
  54. package/src/client/{router → services/router}/request/history.ts +0 -0
  55. package/src/client/services/router/request/index.ts +52 -0
  56. package/src/client/services/router/response/index.tsx +107 -0
  57. package/src/client/services/router/response/page.ts +90 -0
  58. package/src/client/{context/socket.ts → services/socket/index.ts} +2 -2
  59. package/src/client/utils/dom.ts +1 -1
  60. package/src/common/app/index.ts +9 -0
  61. package/src/common/data/chaines/index.ts +9 -6
  62. package/src/common/data/input/validate.ts +3 -166
  63. package/src/common/data/objets.ts +25 -0
  64. package/src/common/data/tableaux.ts +8 -0
  65. package/src/common/errors/index.ts +3 -1
  66. package/src/common/router/index.ts +67 -88
  67. package/src/common/router/layouts.ts +50 -0
  68. package/src/common/router/register.ts +62 -0
  69. package/src/common/router/request/api.ts +72 -0
  70. package/src/common/router/request/index.ts +31 -0
  71. package/src/common/router/{response.ts → response/index.ts} +9 -13
  72. package/src/common/router/response/page.ts +46 -54
  73. package/src/common/validation/index.ts +3 -0
  74. package/src/common/validation/schema.ts +185 -0
  75. package/src/common/validation/validator.ts +95 -0
  76. package/src/common/validation/validators.ts +313 -0
  77. package/src/server/app/config.ts +9 -27
  78. package/src/server/app/index.ts +81 -124
  79. package/src/server/app/service.ts +98 -0
  80. package/src/server/app.tsconfig.json +0 -8
  81. package/src/server/index.ts +5 -0
  82. package/src/server/patch.ts +0 -6
  83. package/src/server/{data/Cache.ts → services/cache/index.ts} +79 -47
  84. package/src/server/services/console/bugReporter.ts +26 -16
  85. package/src/server/services/console/index.ts +59 -51
  86. package/src/server/services/cron/index.ts +12 -26
  87. package/src/server/services/database/bucket.ts +40 -0
  88. package/src/server/services/database/connection.ts +213 -80
  89. package/src/server/services/database/datatypes.ts +63 -40
  90. package/src/server/services/database/debug.ts +20 -0
  91. package/src/server/services/database/index.ts +295 -272
  92. package/src/server/services/database/metas.ts +246 -135
  93. package/src/server/services/database/stats.ts +151 -126
  94. package/src/server/services/email/index.ts +30 -62
  95. package/src/server/services/email/transporter.ts +38 -0
  96. package/src/server/services/{router/request/services → metrics}/detect.ts +8 -10
  97. package/src/server/services/{router/request/services/tracking.ts → metrics/index.ts} +68 -45
  98. package/src/server/services/{http → router/http}/index.ts +28 -70
  99. package/src/server/services/{http → router/http}/multipart.ts +0 -0
  100. package/src/server/services/{http → router/http}/session.ts.old +0 -0
  101. package/src/server/services/router/index.ts +273 -202
  102. package/src/server/services/router/request/api.ts +76 -0
  103. package/src/server/services/router/request/index.ts +16 -97
  104. package/src/server/services/router/request/service.ts +21 -0
  105. package/src/server/services/router/response/index.ts +131 -65
  106. package/src/server/services/router/response/{filter → mask}/Filter.ts +0 -0
  107. package/src/server/services/router/response/{filter → mask}/index.ts +0 -2
  108. package/src/server/services/router/response/{filter → mask}/selecteurs.ts +0 -0
  109. package/src/server/services/router/response/page/document.tsx +194 -0
  110. package/src/server/services/router/response/page/index.tsx +157 -0
  111. package/src/server/{libs/pages → services/router/response/page}/schemaGenerator.ts +0 -0
  112. package/src/server/services/router/service.ts +48 -0
  113. package/src/server/services/schema/index.ts +47 -0
  114. package/src/server/services/schema/request.ts +55 -0
  115. package/src/server/services/schema/router.ts +33 -0
  116. package/src/server/services/socket/index.ts +38 -43
  117. package/src/server/services/socket/scope.ts +6 -4
  118. package/src/server/services/users/index.ts +203 -0
  119. package/src/server/services/{auth/base.ts → users/old.ts} +28 -112
  120. package/src/server/services/users/router/index.ts +72 -0
  121. package/src/server/services/users/router/request.ts +49 -0
  122. package/src/server/{data → services_old}/SocketClient.ts +0 -0
  123. package/src/server/{data/Token.olg.ts → services_old/Token.old.ts} +0 -0
  124. package/src/server/{data → services_old}/aes.ts +0 -0
  125. package/src/types/aliases.d.ts +43 -2
  126. package/templates/composant.tsx +1 -1
  127. package/templates/modal.tsx +1 -1
  128. package/templates/page.tsx +1 -1
  129. package/tsconfig.common.json +0 -4
  130. package/src/client/assets/css/components/components.less +0 -31
  131. package/src/client/context/api.ts +0 -92
  132. package/src/client/context/index.ts +0 -246
  133. package/src/client/index.tsx +0 -129
  134. package/src/client/router/index.ts +0 -286
  135. package/src/client/router/request/index.ts +0 -106
  136. package/src/client/router/response/index.ts +0 -38
  137. package/src/client/router/route.ts +0 -75
  138. package/src/common/data/input/validators/basic.ts +0 -299
  139. package/src/common/data/input/validators/build.ts +0 -63
  140. package/src/common/router/request.ts +0 -83
  141. package/src/server/data/ApiClient.ts +0 -119
  142. package/src/server/data/input.ts +0 -41
  143. package/src/server/libs/pages/document.static.tsx +0 -41
  144. package/src/server/libs/pages/document.tsx +0 -203
  145. package/src/server/libs/pages/render.tsx +0 -90
  146. package/src/server/routes/auth.ts +0 -151
  147. package/src/server/services/redis/index.ts +0 -71
  148. package/src/server/services/router/request/services/auth.ts +0 -177
@@ -13,7 +13,7 @@ import { propsDefautChampForm, TBasePropsChamp } from '@client/components/input/
13
13
  import { TSchema, TRetourValidation, initDonnees, validate as validerSchema, TSchemaChampComplet } from '@common/data/input/validate';
14
14
  import { simpleDeepCopy, chemin } from '@common/data/objets';
15
15
  import { ContexteOnglets } from '@client/components/containers/tabs';
16
- import useContext from '@client/context';
16
+ import useContext from '@/client/context';
17
17
 
18
18
  /*----------------------------------
19
19
  - TYPES ENTREE
@@ -1,5 +1,3 @@
1
- @import (reference) "~@/client/assets/theme.less";
2
-
3
1
  @hideeWidth: 10em;
4
2
 
5
3
  .scrollable-row {
@@ -1,3 +1,4 @@
1
+
1
2
  /*----------------------------------
2
3
  - DEPENDANCES
3
4
  ----------------------------------*/
@@ -22,7 +23,7 @@ export type Props<TRow> = {
22
23
  columns: (row: TRow, rows: TRow[], index: number) => TColumn[];
23
24
 
24
25
  setData?: (rows: TRow[]) => void,
25
- vide?: ComponentChild,
26
+ empty?: ComponentChild,
26
27
  className?: string,
27
28
 
28
29
  actions?: TAction<TRow>[]
@@ -39,7 +40,7 @@ export type TColumn = {
39
40
  - COMPOSANTS
40
41
  ----------------------------------*/
41
42
  export default function Liste<TRow extends TDonneeInconnue>({
42
- data: rows, setData, vide ,
43
+ data: rows, setData, empty ,
43
44
  columns, actions, ...props
44
45
  }: Props<TRow>) {
45
46
 
@@ -7,8 +7,8 @@ import React from 'react';
7
7
  import { VNode, RefObject,ComponentChild } from 'preact';
8
8
 
9
9
  // Core
10
- import { history } from '@client/router/request/history';
11
- import useContext from '@client/context';
10
+ import { history } from '@client/services/router/request/history';
11
+ import useContext from '@/client/context';
12
12
 
13
13
  /*----------------------------------
14
14
  - TYPES
@@ -15,7 +15,7 @@ import Bouton, { Props as PropsBouton } from '@client/components/button';
15
15
  // Libs
16
16
  import getPosition, { TSide } from './getPosition';
17
17
  import { blurable, deepContains } from '@client/utils/dom';
18
- import useContexte from '@client/context';
18
+ import useContexte from '@/client/context';
19
19
 
20
20
  /*----------------------------------
21
21
  - TYPES
@@ -1,5 +1,3 @@
1
- @import '~@/general/client/assets/css/vars.less';
2
-
3
1
  @plugin "~@client/components/_base/plugin-less.js";
4
2
 
5
3
  /*----------------------------------
@@ -7,7 +7,7 @@ import React from 'react';
7
7
  import { ComponentChild } from 'preact';
8
8
 
9
9
  // Core
10
- import { useState } from '@client/context';
10
+ import { useState } from '@/client/context';
11
11
 
12
12
  /*----------------------------------
13
13
  - TYPES
@@ -12,7 +12,7 @@ import { TDialogControls } from '../Dialog/Manager';
12
12
  export type { TDialogControls } from '../Dialog/Manager';
13
13
 
14
14
  // Libs
15
- import useContexte from '@client/context';
15
+ import useContexte from '@/client/context';
16
16
 
17
17
  /*----------------------------------
18
18
  - TYPES
@@ -0,0 +1,23 @@
1
+ export { default as Button } from './button';
2
+ export { default as Row } from './row';
3
+ export { default as Card } from './card';
4
+ export { default as Table } from './Table';
5
+ export { default as Select } from './Select';
6
+ export { default as Amount } from './Amount';
7
+ export { default as Logo } from './Logo';
8
+
9
+ export { default as Input } from './input';
10
+ export { default as Textarea } from './input/Textarea';
11
+ export { default as Number } from './input/Number';
12
+ export { default as Slider } from './input/Slider';
13
+ export { default as Upload } from './input/Upload';
14
+ export { default as Radio } from './input/Radio';
15
+
16
+ // TOD: fix popover component
17
+ //export { default as Date } from './input/Date';
18
+ //export { default as Periode } from './input/Periode';
19
+
20
+ // TODO: adapt
21
+ //export { default as Couleur } from './input/Couleur';
22
+ //export { default as Code } from './input/Code';
23
+ //export { default as Rte } from './input/Rte';
@@ -1,5 +1,3 @@
1
- @import (reference) '~@/client/assets/theme.less';
2
-
3
1
  @hInput: @sizeComponent;
4
2
 
5
3
  // TODO: Adapter textarea à input/basev2
@@ -7,7 +7,7 @@ import React from 'react';
7
7
  import { ComponentChild } from 'preact';
8
8
 
9
9
  // Core libs
10
- import { useState } from '@client/context';
10
+ import { useState } from '@client/hooks';
11
11
 
12
12
  /*----------------------------------
13
13
  - TYPES
@@ -1,5 +1,3 @@
1
- @import (reference) '~@/general/client/assets/css/vars.less';
2
-
3
1
  .champ.periode {
4
2
 
5
3
  display: flex;
@@ -1,5 +1,3 @@
1
- @import (reference) '~@/general/client/assets/css/vars.less';
2
-
3
1
  .champ.periode {
4
2
 
5
3
  display: flex;
@@ -1,5 +1,3 @@
1
- @import '~@/general/client/assets/css/vars.less';
2
-
3
1
  @hRadio: 40px;
4
2
  @margeRadio: 5px;
5
3
 
@@ -1,5 +1,3 @@
1
- @import (reference) '~@/client/assets/theme.less';
2
-
3
1
  .uploadImg {
4
2
  position: relative;
5
3
  overflow: hidden;
@@ -9,7 +9,7 @@ import { ComponentChild } from 'preact';
9
9
  import Bouton from '@client/components/button';
10
10
 
11
11
  // Libs
12
- import useContext, { useState } from '@client/context';
12
+ import useContext, { useState } from '@/client/context';
13
13
  import NormalisedFile from '@common/data/file';
14
14
 
15
15
  // Ressources
@@ -0,0 +1,5 @@
1
+ export { default as useState } from './useState';
2
+ export { default as useActivity } from './useActivity';
3
+ export { default as useComponent } from './useComponent';
4
+ export { default as useScript } from './useScript';
5
+ export { default as useVisible } from './useVisible';
@@ -6,7 +6,7 @@
6
6
  import { useState as reactUseState, useEffect as reactUseEffect } from 'preact/hooks';
7
7
 
8
8
  // Libs
9
- import useContexte from '@client/context';
9
+ import useContexte from '@/client/context';
10
10
 
11
11
  // Libs spécifiques
12
12
  import { execFetchersState, initStateAsync } from './fetchers';
@@ -18,7 +18,7 @@ import { execFetchersState, initStateAsync } from './fetchers';
18
18
 
19
19
  import TRequeteApi, { TOptionsRequete } from '@common/api';
20
20
 
21
- import { TDataResolved } from '@client/router';
21
+ import { TDataResolved } from '@client/services/router';
22
22
 
23
23
  /*----------------------------------
24
24
  - TYPES: DEFINITIONS
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import type { ComponentChild } from 'preact';
3
+
4
+ // Hooks
5
+ /*export { default as useState } from '@client/hooks/useState';
6
+ export type { TActions as TActionsState } from '@client/hooks/useState';
7
+ export { default as useComponent } from '@client/hooks/useComponent';
8
+ export { default as useScript } from '@client/hooks/useScript';*/
9
+
10
+ // Utils
11
+ export const Switch = (val: string | number, options: { [cle: string]: ComponentChild }) => {
12
+ return (val in options) ? options[val] : null;
13
+ }
14
+
15
+ export const useState = <TData extends TObjetDonnees>(initial: TData): [
16
+ TData,
17
+ (data: Partial<TData>) => void
18
+ ] => {
19
+ const [state, setState] = React.useState<TData>(initial);
20
+ const setPartialState = (data: Partial<TData>) => setState(current => ({ ...current, ...data }));
21
+ return [state, setPartialState]
22
+ }
@@ -0,0 +1,5 @@
1
+ import Application from '@/client';
2
+
3
+ const app = new Application();
4
+
5
+ app.start();
@@ -6,8 +6,6 @@
6
6
  import React from 'react';
7
7
 
8
8
  // Core
9
- import route from '@router';
10
- import { useState } from '@client/context';
11
9
 
12
10
  // Core components
13
11
  import Button, { Props as ButtonProps } from '@client/components/button';
@@ -6,7 +6,7 @@
6
6
  import React from 'react';
7
7
 
8
8
  // Core
9
- import route from '@router';
9
+ import { router } from '@app';
10
10
  import Button from '@client/components/button';
11
11
 
12
12
  // App
@@ -15,7 +15,7 @@ import useHeader from '@client/pages/useHeader';
15
15
  /*----------------------------------
16
16
  - CONTROLEUR
17
17
  ----------------------------------*/
18
- route.error(400, {}, ({ message }, { modal }) => {
18
+ router.error(400, {}, ({ message, modal }) => {
19
19
 
20
20
  if (!message)
21
21
  message = "The request you made is incorrect.";
@@ -6,7 +6,7 @@
6
6
  import React from 'react';
7
7
 
8
8
  // Core
9
- import route from '@router';
9
+ import { router } from '@app';
10
10
  import Button from '@client/components/button';
11
11
 
12
12
  // App
@@ -18,7 +18,7 @@ import Button from '@client/components/button';
18
18
  /*----------------------------------
19
19
  - CONTROLEUR
20
20
  ----------------------------------*/
21
- route.error(401, { }, ({ }, { api, toast, modal, request, page }) => {
21
+ router.error(401, { }, ({ api, toast, modal, request, page }) => {
22
22
 
23
23
  request.response?.redirect('/');
24
24
 
@@ -6,7 +6,7 @@
6
6
  import React from 'react';
7
7
 
8
8
  // Core
9
- import route from '@router';
9
+ import { router } from '@app';
10
10
  import Button from '@client/components/button';
11
11
 
12
12
  // App
@@ -15,7 +15,7 @@ import useHeader from '@client/pages/useHeader';
15
15
  /*----------------------------------
16
16
  - CONTROLEUR
17
17
  ----------------------------------*/
18
- route.error( 403, {}, ({ message }, { modal }) => {
18
+ router.error( 403, {}, ({ message, modal }) => {
19
19
 
20
20
  if (!message)
21
21
  message = "You do not have sufficient permissions to access this content.";
@@ -6,7 +6,7 @@
6
6
  import React from 'react';
7
7
 
8
8
  // Core
9
- import route from '@router';
9
+ import { router } from '@app';
10
10
  import Button from '@client/components/button';
11
11
 
12
12
  // App
@@ -15,7 +15,7 @@ import useHeader from '@client/pages/useHeader';
15
15
  /*----------------------------------
16
16
  - CONTROLEUR
17
17
  ----------------------------------*/
18
- route.error( 404, {}, ({ message }, { modal }) => {
18
+ router.error( 404, {}, ({ message, modal }) => {
19
19
 
20
20
  if (!message)
21
21
  message = "The content you asked for was not found.";
@@ -6,7 +6,7 @@
6
6
  import React from 'react';
7
7
 
8
8
  // Core
9
- import route from '@router';
9
+ import { router } from '@app';
10
10
  import Button from '@client/components/button';
11
11
 
12
12
  // App
@@ -15,7 +15,7 @@ import useHeader from '@client/pages/useHeader';
15
15
  /*----------------------------------
16
16
  - CONTROLEUR
17
17
  ----------------------------------*/
18
- route.error( 500, {}, ({ message }) => {
18
+ router.error( 500, {}, ({ message }) => {
19
19
 
20
20
  if (!message)
21
21
  message = "A technical error occurred.";
@@ -10,7 +10,7 @@ import Textarea from '@client/components/input/Textarea';
10
10
  import Card, { Props as CardProps } from '@client/components/Dialog/card';
11
11
 
12
12
  // Core libs
13
- import useContext from '@client/context';
13
+ import useContext from '@/client/context';
14
14
 
15
15
  /*----------------------------------
16
16
  - TYPES
@@ -3,7 +3,7 @@
3
3
  ----------------------------------*/
4
4
 
5
5
  // Core
6
- import useContext from '@client/context';
6
+ import useContext from '@/client/context';
7
7
 
8
8
  /*----------------------------------
9
9
  - TYPES
@@ -0,0 +1,37 @@
1
+ /*----------------------------------
2
+ - DEPENDANCES
3
+ ----------------------------------*/
4
+
5
+ // Npm
6
+
7
+ // Core
8
+ import type ClientApplication from '@client/app';
9
+
10
+ /*----------------------------------
11
+ - TYPES
12
+ ----------------------------------*/
13
+
14
+
15
+
16
+ /*----------------------------------
17
+ - SERVICE
18
+ ----------------------------------*/
19
+ export default class ClientMetrics {
20
+
21
+ public constructor( public app: ClientApplication ) {
22
+
23
+ }
24
+
25
+ public start() {
26
+
27
+ }
28
+
29
+ // Tracking
30
+ public event( name: string, params?: object ) {
31
+ if (!window.gtag) return;
32
+ if (name === 'pageview')
33
+ window.gtag('send', name);
34
+ else
35
+ window.gtag('event', name, params);
36
+ }
37
+ }
@@ -5,7 +5,7 @@
5
5
  // Npm
6
6
  import React from 'react';
7
7
  import type { ComponentChild } from 'preact';
8
- import { history } from './request/history';
8
+ import { history } from '../request/history';
9
9
 
10
10
  /*----------------------------------
11
11
  - COMPONENT
@@ -0,0 +1,59 @@
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 Page from '../response/page';
12
+
13
+ /*----------------------------------
14
+ - PAGE STATE
15
+ ----------------------------------*/
16
+
17
+ export default ({ page, isCurrent }: { page: Page, isCurrent?: boolean }) => {
18
+
19
+ const context = useContext();
20
+
21
+ const [apiData, setApiData] = React.useState<{[k: string]: any} | null>(
22
+ page.loading ? null : page.data
23
+ );
24
+ page.setAllData = setApiData;
25
+
26
+ React.useEffect(() => {
27
+
28
+ // Fetch the data asynchronously for the first time
29
+ if (/*apiData === null && */isCurrent)
30
+ page.fetchData().then( loadedData => {
31
+ page.loading = false;
32
+ setApiData(loadedData);
33
+ })
34
+
35
+ }, [page]);
36
+
37
+ return (
38
+ <div
39
+ class={"page" + (isCurrent ? ' current' : '')}
40
+ id={page.chunkId === undefined ? undefined : 'page_' + page.chunkId}
41
+ >
42
+
43
+ {/* Make request parameters and api data accessible from the page component */}
44
+ {page.renderer ? (
45
+
46
+ <page.renderer
47
+ // Services
48
+ {...context}
49
+ // URL params
50
+ {...context.request.data}
51
+ // API data
52
+ {...apiData}
53
+ />
54
+
55
+ ) : null}
56
+
57
+ </div>
58
+ )
59
+ }