5htp-core 0.2.2-2 → 0.2.3
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/package.json +1 -1
- package/src/client/app/component.tsx +1 -2
- package/src/client/app/index.ts +1 -1
- package/src/client/assets/css/components/button.less +4 -3
- package/src/client/assets/css/components/card.less +26 -11
- package/src/client/assets/css/components/other.less +0 -11
- package/src/client/assets/css/components.less +17 -3
- package/src/client/assets/css/core.less +55 -0
- package/src/client/assets/css/theme.less +0 -4
- package/src/client/assets/css/utils/medias.less +0 -47
- package/src/client/components/Dialog/Manager.tsx +1 -4
- package/src/client/components/Form.ts +123 -0
- package/src/client/components/{Form → Form_old}/index.tsx +0 -0
- package/src/client/components/{Form → Form_old}/index.tsx.old +0 -0
- package/src/client/components/containers/Popover/index.tsx +38 -120
- package/src/client/components/data/progressbar/circular/index.tsx +1 -3
- package/src/client/components/inputv3/base.less +0 -1
- package/src/client/components/inputv3/base.tsx +5 -1
- package/src/client/components/inputv3/string/index.tsx +22 -9
- package/src/client/services/router/components/Page.tsx +16 -18
- package/src/client/services/router/components/router.tsx +3 -3
- package/src/client/services/router/index.tsx +17 -14
- package/src/client/services/router/request/api.ts +3 -2
- package/src/client/services/router/response/index.tsx +4 -0
- package/src/client/services/router/response/page.ts +2 -1
- package/src/common/router/index.ts +1 -1
- package/src/common/router/layouts.ts +38 -6
- package/src/common/router/register.ts +3 -9
- package/src/common/router/request/api.ts +3 -1
- package/src/common/validation/index.ts +1 -1
- package/src/common/validation/schema.ts +6 -1
- package/src/common/validation/validators.ts +1 -1
- package/src/server/services/database/index.ts +9 -13
- package/src/server/services/router/index.ts +3 -3
- package/src/server/services/router/request/api.ts +3 -0
- package/src/server/services/router/response/index.ts +7 -4
- package/src/server/services/router/response/mask/Filter.ts +16 -72
- package/src/server/services/router/response/mask/index.ts +4 -7
- package/src/server/services/router/response/page/document.tsx +2 -2
- package/src/server/services/router/response/page/index.tsx +2 -2
- package/src/server/services/schema/request.ts +4 -2
|
@@ -9,12 +9,6 @@ import { TSelecteur } from './selecteurs';
|
|
|
9
9
|
- TYPES
|
|
10
10
|
----------------------------------*/
|
|
11
11
|
|
|
12
|
-
import type Modele from '@server/services/models';
|
|
13
|
-
import type { TMetasAttribut, TControleAcces } from '@server/services/models/attributes';
|
|
14
|
-
import type { TModelMetas } from '@server/services/models/table';
|
|
15
|
-
|
|
16
|
-
import type { User } from '@models';
|
|
17
|
-
|
|
18
12
|
type TObjet = { [cle: string]: TObjet | any };
|
|
19
13
|
|
|
20
14
|
/*----------------------------------
|
|
@@ -30,21 +24,17 @@ const maxLevel = 10; // Prévention contre les références circulaires
|
|
|
30
24
|
----------------------------------*/
|
|
31
25
|
export default class Filtre {
|
|
32
26
|
|
|
33
|
-
public constructor(
|
|
34
|
-
private user?: User
|
|
35
|
-
) {
|
|
27
|
+
public constructor() {
|
|
36
28
|
|
|
37
29
|
|
|
38
30
|
}
|
|
39
31
|
|
|
40
|
-
public
|
|
32
|
+
public filtrer(
|
|
41
33
|
donnee: TObjet | Array<unknown> | Date,
|
|
42
34
|
schema?: TSelecteur,
|
|
43
|
-
|
|
44
35
|
chemin: string[] = [],
|
|
45
|
-
metasPropriete?: TMetasAttribut,
|
|
46
36
|
schemaParent?: TObjet
|
|
47
|
-
):
|
|
37
|
+
): any {
|
|
48
38
|
|
|
49
39
|
// Prévention contre les références circulaires
|
|
50
40
|
if (chemin.length > maxLevel)
|
|
@@ -57,7 +47,7 @@ export default class Filtre {
|
|
|
57
47
|
|
|
58
48
|
debug && console.log(`[requete][reponse][filtre]`, chemin.join('.'), ': Tableau');
|
|
59
49
|
|
|
60
|
-
return
|
|
50
|
+
return this.tableau(donnee, schema, chemin, schemaParent);
|
|
61
51
|
|
|
62
52
|
// Valeur: Chaque true doit être remplacé par la donnee[ nomBranche ] correspondante
|
|
63
53
|
// Si la donnée est une chaine, un nombre, etc ... On la traite comme s'il y avait un true
|
|
@@ -75,7 +65,7 @@ export default class Filtre {
|
|
|
75
65
|
|
|
76
66
|
debug && console.log(`[requete][reponse][filtre]`, chemin.join('.'), ': Valeur');
|
|
77
67
|
|
|
78
|
-
return
|
|
68
|
+
return this.valeur(
|
|
79
69
|
donnee,
|
|
80
70
|
schema,
|
|
81
71
|
chemin
|
|
@@ -86,7 +76,7 @@ export default class Filtre {
|
|
|
86
76
|
|
|
87
77
|
debug && console.log(`[requete][reponse][filtre]`, chemin.join('.'), ': Objet');
|
|
88
78
|
|
|
89
|
-
return
|
|
79
|
+
return this.objet(donnee, schema, chemin, schemaParent);
|
|
90
80
|
|
|
91
81
|
}
|
|
92
82
|
|
|
@@ -98,12 +88,11 @@ export default class Filtre {
|
|
|
98
88
|
}
|
|
99
89
|
}
|
|
100
90
|
|
|
101
|
-
private
|
|
91
|
+
private tableau(
|
|
102
92
|
donnee: any[],
|
|
103
93
|
schema: TSelecteur | undefined,
|
|
104
94
|
|
|
105
95
|
chemin: string[],
|
|
106
|
-
metasPropriete?: TMetasAttribut,
|
|
107
96
|
schemaParent?: TObjet
|
|
108
97
|
) {
|
|
109
98
|
|
|
@@ -111,12 +100,11 @@ export default class Filtre {
|
|
|
111
100
|
|
|
112
101
|
for (const iElem in donnee) {
|
|
113
102
|
retour.push(
|
|
114
|
-
|
|
103
|
+
this.filtrer(
|
|
115
104
|
donnee[iElem],
|
|
116
105
|
schema,
|
|
117
106
|
|
|
118
107
|
[...chemin, iElem],
|
|
119
|
-
metasPropriete,
|
|
120
108
|
schemaParent
|
|
121
109
|
)
|
|
122
110
|
)
|
|
@@ -125,7 +113,7 @@ export default class Filtre {
|
|
|
125
113
|
return retour;
|
|
126
114
|
}
|
|
127
115
|
|
|
128
|
-
private
|
|
116
|
+
private objet(
|
|
129
117
|
donnee: TObjet,
|
|
130
118
|
schema: TSelecteur | undefined,
|
|
131
119
|
|
|
@@ -167,29 +155,11 @@ export default class Filtre {
|
|
|
167
155
|
}
|
|
168
156
|
|
|
169
157
|
let retour: TObjet = {};
|
|
170
|
-
let metasClasse: TModelMetas | undefined;
|
|
171
|
-
|
|
172
|
-
// Modèle
|
|
173
|
-
// On préfère cette méthode plutot que « instanceof Model »
|
|
174
|
-
// Car la rféérence vers Model peut ne pas être reconnue quand l'instance est créée depuis le projet
|
|
175
|
-
if (donnee._metas !== undefined) {
|
|
176
|
-
|
|
177
|
-
metasClasse = donnee._metas as unknown as TModelMetas;
|
|
178
|
-
|
|
179
|
-
// Injection nom modèle
|
|
180
|
-
// Permet de reconnaitre de quel modèle il s'agit coté client
|
|
181
|
-
// (Ex: retour pouvant avoir plusieurs types différent: Depot | Post)
|
|
182
|
-
retour._modele = metasClasse.name;
|
|
183
|
-
}
|
|
184
158
|
|
|
185
159
|
// Liste des clés à itérer
|
|
186
160
|
let clesAiterer: string[];
|
|
187
161
|
if (schema !== undefined)
|
|
188
162
|
clesAiterer = Object.keys(schema as object);
|
|
189
|
-
// Admin = toutes les données sont exposées à l'api
|
|
190
|
-
// Si la donnée est une instance de classe, on utilise la liste des propriétés exposées à l'api
|
|
191
|
-
else if (metasClasse)
|
|
192
|
-
clesAiterer = metasClasse.api;
|
|
193
163
|
else // En dernier recours, on itère tout simplement les données de l'objet
|
|
194
164
|
clesAiterer = Object.keys(donnee);
|
|
195
165
|
|
|
@@ -199,31 +169,16 @@ export default class Filtre {
|
|
|
199
169
|
const cheminA = [...chemin, nomBranche];
|
|
200
170
|
let donneeBranche = undefined;
|
|
201
171
|
|
|
202
|
-
// Filtrage
|
|
203
|
-
// propriete doit IMPERATIVEMENT être avant tout accès à la donnée
|
|
204
|
-
// Afin que les promises soient bien catchées
|
|
205
|
-
if (metasClasse !== undefined) {
|
|
206
|
-
|
|
207
|
-
donneeBranche = await this.propriete(nomBranche, donnee, metasClasse, cheminA);
|
|
208
|
-
|
|
209
|
-
// Exclusion de cette donnée
|
|
210
|
-
if (donneeBranche === undefined) {
|
|
211
|
-
//debug && console.log('EXCLUSION', cheminA.join('.'));
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
172
|
// Extraction de la valeur de la propriété
|
|
217
173
|
if (donneeBranche === undefined)
|
|
218
174
|
donneeBranche = donnee[nomBranche];
|
|
219
175
|
|
|
220
176
|
// Filtrage de la valeur de la propriété
|
|
221
|
-
retour[nomBranche] =
|
|
177
|
+
retour[nomBranche] = this.filtrer(
|
|
222
178
|
donneeBranche,
|
|
223
179
|
schema !== undefined ? schema[nomBranche] : undefined,
|
|
224
180
|
|
|
225
181
|
cheminA,
|
|
226
|
-
metasClasse === undefined ? undefined : metasClasse.attributes[nomBranche],
|
|
227
182
|
|
|
228
183
|
schema as TObjet
|
|
229
184
|
);
|
|
@@ -233,7 +188,7 @@ export default class Filtre {
|
|
|
233
188
|
}
|
|
234
189
|
|
|
235
190
|
// Traitement des données aux extrémités (auxquelles font référence les true)
|
|
236
|
-
private
|
|
191
|
+
private valeur(
|
|
237
192
|
donnee: any,
|
|
238
193
|
schema: TSelecteur,
|
|
239
194
|
chemin: string[]
|
|
@@ -265,12 +220,12 @@ export default class Filtre {
|
|
|
265
220
|
return donnee;
|
|
266
221
|
}
|
|
267
222
|
|
|
268
|
-
private
|
|
223
|
+
/*private propriete<TModele extends Modele>(
|
|
269
224
|
nom: keyof TModele,
|
|
270
225
|
modele: TModele,
|
|
271
226
|
metasClasse: TModelMetas,
|
|
272
227
|
cheminA: string[]
|
|
273
|
-
):
|
|
228
|
+
): any | undefined {
|
|
274
229
|
|
|
275
230
|
const metasProp = metasClasse.attributes[nom];
|
|
276
231
|
|
|
@@ -285,20 +240,9 @@ export default class Filtre {
|
|
|
285
240
|
}
|
|
286
241
|
|
|
287
242
|
let valeur: any;
|
|
288
|
-
|
|
289
243
|
// Si promise, on lui rattache un catch le plus tôt possible, avant qu'on ne tente d'acceder à sa valeur
|
|
290
244
|
// (un simple acces lançant directement la promise)
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
try {
|
|
294
|
-
valeur = await modele[nom];
|
|
295
|
-
} catch (e) {
|
|
296
|
-
console.error(`${cheminA.join('.')}: Erreur lors de l'execution de la promise ${metasClasse.nom}.${nom}`, e);
|
|
297
|
-
throw e;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
} else
|
|
301
|
-
valeur = modele[nom];
|
|
245
|
+
valeur = modele[nom];
|
|
302
246
|
|
|
303
247
|
// Permissions
|
|
304
248
|
if (!this.controleAcces(modele, metasProp.api.auth, `Elimination de la donnée ${cheminA.join('.')} (${metasClasse.nom}.${nom})`)) {
|
|
@@ -316,7 +260,7 @@ export default class Filtre {
|
|
|
316
260
|
return undefined;
|
|
317
261
|
|
|
318
262
|
// Dernier traitement des valeurs
|
|
319
|
-
//valeur =
|
|
263
|
+
//valeur = filtresProps(valeur, metasProp);
|
|
320
264
|
return valeur;
|
|
321
265
|
}
|
|
322
266
|
|
|
@@ -374,6 +318,6 @@ export default class Filtre {
|
|
|
374
318
|
|
|
375
319
|
return false;
|
|
376
320
|
}
|
|
377
|
-
}
|
|
321
|
+
}*/
|
|
378
322
|
|
|
379
323
|
}
|
|
@@ -24,12 +24,9 @@ const debug = false;
|
|
|
24
24
|
----------------------------------*/
|
|
25
25
|
|
|
26
26
|
// proprieteModele = Si l'objet actuellement traité fait partie des valeurs d'un modèle
|
|
27
|
-
export default
|
|
27
|
+
export default (
|
|
28
28
|
donnee: any,
|
|
29
|
-
selecteurs?: string | TObjetSelecteurs
|
|
30
|
-
|
|
31
|
-
// Facultatif, car il faut pouvoir utiliser filtreApi pour l'emission socket général (ex: résultats selection trading)
|
|
32
|
-
user?: User | null
|
|
29
|
+
selecteurs?: string | TObjetSelecteurs
|
|
33
30
|
) => {
|
|
34
31
|
|
|
35
32
|
// Pas besoin de filtrer
|
|
@@ -48,8 +45,8 @@ export default async (
|
|
|
48
45
|
|
|
49
46
|
debug && console.log('Avant filtrage', donnee);
|
|
50
47
|
|
|
51
|
-
const filtre = new Filter(
|
|
52
|
-
const retour =
|
|
48
|
+
const filtre = new Filter();
|
|
49
|
+
const retour = filtre.filtrer(donnee, selecteursCompiles);
|
|
53
50
|
|
|
54
51
|
// Empêche un nouveau filtrage
|
|
55
52
|
// OBSOLETE: éviter d emodifier le retour des api, car cela peut poser probleme lors du traitement de ces données (ex: itération clés objet)
|
|
@@ -153,7 +153,7 @@ export default class DocumentRenderer {
|
|
|
153
153
|
|
|
154
154
|
private async scripts( response, page ) {
|
|
155
155
|
|
|
156
|
-
const
|
|
156
|
+
const context = safeStringify( response.forSsr(page) );
|
|
157
157
|
|
|
158
158
|
const routesForClient = JSON.stringify( this.router.ssrRoutes );
|
|
159
159
|
|
|
@@ -161,7 +161,7 @@ export default class DocumentRenderer {
|
|
|
161
161
|
{/* JS */}
|
|
162
162
|
{!page.amp && (
|
|
163
163
|
<script type="text/javascript" dangerouslySetInnerHTML={{
|
|
164
|
-
__html: `window.ssr=${
|
|
164
|
+
__html: `window.ssr=${context}; window.routes=${routesForClient};` + (
|
|
165
165
|
this.app.env.profile === 'dev' ? 'window.dev = true;' : ''
|
|
166
166
|
)
|
|
167
167
|
}} />
|
|
@@ -9,8 +9,7 @@ const safeStringify = require('fast-safe-stringify'); // remplace les référenc
|
|
|
9
9
|
|
|
10
10
|
// Core
|
|
11
11
|
import { default as Router, TRouterContext } from "@server/services/router";
|
|
12
|
-
import type
|
|
13
|
-
import type { TRoute } from '@common/router';
|
|
12
|
+
import type { Layout } from '@common/router';
|
|
14
13
|
import PageResponse, { TDataProvider, TFrontRenderer } from "@common/router/response/page";
|
|
15
14
|
|
|
16
15
|
// Composants UI
|
|
@@ -33,6 +32,7 @@ export default class Page<TRouter extends Router = Router> extends PageResponse<
|
|
|
33
32
|
public dataProvider: TDataProvider | null,
|
|
34
33
|
public renderer: TFrontRenderer,
|
|
35
34
|
public context: TRouterContext,
|
|
35
|
+
public layout?: Layout,
|
|
36
36
|
|
|
37
37
|
public route = context.route,
|
|
38
38
|
public router = context.request.router
|
|
@@ -38,11 +38,13 @@ export default class RequestValidator extends ServerSchemaValidator implements R
|
|
|
38
38
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
public validate<TSchemaFieldsA extends TSchemaFields>(
|
|
41
|
+
public validate<TSchemaFieldsA extends TSchemaFields>(
|
|
42
|
+
fields: TSchemaFieldsA | Schema<TSchemaFieldsA>
|
|
43
|
+
): TValidatedData<TSchemaFieldsA> {
|
|
42
44
|
|
|
43
45
|
this.config.debug && console.log(LogPrefix, "Validate request data:", this.request.data);
|
|
44
46
|
|
|
45
|
-
const schema = new Schema(fields);
|
|
47
|
+
const schema = fields instanceof Schema ? fields : new Schema(fields);
|
|
46
48
|
|
|
47
49
|
// Les InputError seront propagées vers le middleware dédié à la gestion des erreurs
|
|
48
50
|
const { values } = schema.validate(
|