create-procode 1.0.0 → 1.1.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.
@@ -1,146 +1,149 @@
1
- // ---------------------------------------------------------------------------
2
- // The import order below IS the cascade. Each layer expects the ones above it
3
- // to have been declared, and the whole stack is one Sass compilation:
4
- //
5
- // 1. vs-theme design tokens ($space-*, $text-*, colour ramps) — nothing
6
- // above it can reference a token, so it goes first.
7
- // 2. kendo-widget the _kendo-bridge that binds Kendo's variables to those
8
- // tokens; must be declared before Kendo's own theme reads
9
- // them.
10
- // 3. kendo-theme-default Kendo's compiled theme. NOT declared as a peer by
11
- // anything, but the widget library imports it BY NAME — so
12
- // it is a hard build failure when missing, not an extra.
13
- // 4. core runtime layout (prc-cl-N columns, skeletons).
14
- // 5. vs-template toolbar, grid chrome, saved views.
15
- //
16
- // Reordering these produces "Undefined variable" at build time, or a screen
17
- // that renders with the wrong spacing and no error at all.
18
- // ---------------------------------------------------------------------------
19
- @import "procode-vs-theme/scss";
20
- @import "procode-lowcode-kendo-widget/styles";
21
- @import "@progress/kendo-theme-default/dist/all.scss";
22
- @import "procode-lowcode-core/styles";
23
- @import "procode-vs-template/styles";
24
-
25
- // ---------------------------------------------------------------------------
26
- // App styles go BELOW this line.
27
- //
28
- // Reach for a theme token or a utility class before writing a rule, and never a
29
- // literal hex value — the theme ships 200+ utilities that already exist.
30
- // Do not redeclare a `.prc-*` or `.qo-*` class: those belong to the
31
- // libraries, and newer versions guard them with a doubled class, so a host rule
32
- // silently loses anyway.
33
- // ---------------------------------------------------------------------------
34
-
35
- // ---------------------------------------------------------------------------
36
- // THE FONT FAMILY IS SET ONCE, HERE.
37
- //
38
- // The theme's reset sets no `font-family` on `body`, and several of its own
39
- // component classes (`.qo-page-title`, `.qo-page-subtitle`) style size, weight
40
- // and colour only. Anything not carrying `qo-font-family-primary` therefore
41
- // inherits the browser default, which is a SERIF. One line here is the single
42
- // point that makes every screen agree; do not repeat the class per widget.
43
- // ---------------------------------------------------------------------------
44
- body {
45
- font-family: var(--qo-font-family-primary);
46
- }
47
-
48
- // ---------------------------------------------------------------------------
49
- // LOADING PLACEHOLDERS — one height, one sweep, visible on a white card.
50
- //
51
- // Core ships `--skeleton-field-height: 32px`; every control on this stack is
52
- // 40px (`--qo-control-height`), so the form re-flowed 8px a row as data landed.
53
- // Core's `#eee` base with a sheen whose brightest stop is LIGHTER than the base
54
- // reads as "a white background animating" on a `qo-card`; both are restated as
55
- // theme tokens. The two `.prc-loading-container` rules: core nests
56
- // that element inside itself, so two rgba(0,0,0,.1) backdrops stacked, and the
57
- // dim landed on the skeleton base but not its z-index:2000 shimmer.
58
- // ---------------------------------------------------------------------------
59
- :root {
60
- --skeleton-field-height: var(--qo-control-height);
61
- --skeleton-background-color: var(--qo-bg-disabled);
62
- --skeleton-background-linear-gradient: linear-gradient(
63
- 110deg,
64
- var(--qo-bg-disabled) 8%,
65
- var(--qo-bg-light) 18%,
66
- var(--qo-bg-disabled) 33%
67
- );
68
- }
69
-
70
- .prc-loading-container .prc-loading-container {
71
- background-color: transparent;
72
- }
73
-
74
- body:has(.prc-skeleton) .prc-loading-container {
75
- background-color: transparent;
76
- }
77
-
78
- // ---------------------------------------------------------------------------
79
- // Kendo controls that a schema put on the 40px ramp — make the ramp stick.
80
- //
81
- // `qo-h-control` is (0,1,0). kendo-widget's `.k-dropdownlist, .k-picker-solid
82
- // { height: 32px }` ties it and loads later, so DROPDOWNs drew 8px shorter than
83
- // the TEXTBOXes beside them. Doubling the class is (0,2,0) and re-states the
84
- // theme's own token — no `!important`.
85
- // ---------------------------------------------------------------------------
86
- .qo-h-control.k-picker-solid,
87
- .qo-h-control.k-input-solid {
88
- height: var(--qo-control-height);
89
- }
90
-
91
- // A MultiSelect grows with its chips, so it takes a floor and not a height.
92
- .qo-min-h-control.k-input-solid,
93
- .qo-min-h-control.k-picker-solid {
94
- height: auto;
95
- min-height: var(--qo-control-height);
96
- }
97
-
98
- // ---------------------------------------------------------------------------
99
- // Control text — NO RULE HERE, on purpose. 12px label / 13px value.
100
- //
101
- // Add, Edit and View read in one pair of sizes, and all of it comes from the
102
- // libraries: a field label is vs-theme's `qo-label` (12px / 600), and every
103
- // control's text is 13px from kendo-widget 2.8.1 — as are a BLOCK's value and
104
- // the grid toolbar's search from vs-template 2.12.1. Do not put a size on
105
- // `.k-input-inner`: a declaration on the element beats every class on the
106
- // wrapper, and globally it would also pin the toolbar search and filter cells.
107
- // (Apps generated before 1.0.1 carried an 11px rule here; delete it when they
108
- // adopt kendo-widget 2.8.1.)
109
- // ---------------------------------------------------------------------------
110
-
111
- // ---------------------------------------------------------------------------
112
- // Two fields in one row, one label wraps — keep the controls on one line.
113
- //
114
- // The label HOC stacks label over control in `.prc-label-field`; a row of two
115
- // aligns them by their TOP, so a wrapped label pushes its control down a line.
116
- // Aligning the controls by their BOTTOM fixes it at every width. Both
117
- // restrictions are load-bearing: `[class*="prc-cl-"]` keeps it on a column
118
- // SLOT (`:has()` is a descendant test), and `:not(.prc-flx-container)` excludes
119
- // a slot that is itself a layout — a scroll pane carrying `prc-cl-fl` otherwise
120
- // gets bottom-packed and its first section is pushed above the fold, measured.
121
- // Durable home: core's ContainerRenderer styles.
122
- // ---------------------------------------------------------------------------
123
- .prc-flx-container:not(.prc-verticle):not(.prc-verticle-reverse)
124
- > [class*="prc-cl-"]:not(.prc-flx-container):has(.prc-label-field) {
125
- align-self: stretch;
126
- display: flex;
127
- flex-direction: column;
128
- justify-content: flex-end;
129
- }
130
-
131
- // ---------------------------------------------------------------------------
132
- // App screens (src/Screens) — the loader, error and 404 elements main.tsx
133
- // hands to <Core>. They reuse the core classes; only the colour and the
134
- // missing height are restated here, as theme tokens.
135
- // ---------------------------------------------------------------------------
136
- .prc-spinner-arc.prc-spinner-arc {
137
- border-top-color: var(--qo-border-primary);
138
- border-right-color: var(--qo-border-primary);
139
- }
140
-
141
- .prc-404-container.app-screen-message {
142
- min-height: 100dvh;
143
- padding: var(--qo-space-lg);
144
- }
145
-
146
- @import "../../Factory/Widgets/SectionNav/style.scss";
1
+ // ---------------------------------------------------------------------------
2
+ // The import order below IS the cascade. Each layer expects the ones above it
3
+ // to have been declared, and the whole stack is one Sass compilation:
4
+ //
5
+ // 1. vs-theme design tokens ($space-*, $text-*, colour ramps) — nothing
6
+ // above it can reference a token, so it goes first.
7
+ // 2. kendo-widget the _kendo-bridge that binds Kendo's variables to those
8
+ // tokens; must be declared before Kendo's own theme reads
9
+ // them.
10
+ // 3. kendo-theme-default Kendo's compiled theme. NOT declared as a peer by
11
+ // anything, but the widget library imports it BY NAME — so
12
+ // it is a hard build failure when missing, not an extra.
13
+ // 4. core runtime layout (prc-cl-N columns, skeletons).
14
+ // 5. vs-template toolbar, grid chrome, saved views.
15
+ //
16
+ // Reordering these produces "Undefined variable" at build time, or a screen
17
+ // that renders with the wrong spacing and no error at all.
18
+ // ---------------------------------------------------------------------------
19
+ @import "procode-vs-theme/scss";
20
+ @import "procode-lowcode-kendo-widget/styles";
21
+ @import "@progress/kendo-theme-default/dist/all.scss";
22
+ @import "procode-lowcode-core/styles";
23
+ @import "procode-vs-template/styles";
24
+
25
+ // ---------------------------------------------------------------------------
26
+ // App styles go BELOW this line.
27
+ //
28
+ // Reach for a theme token or a utility class before writing a rule, and never a
29
+ // literal hex value — the theme ships 200+ utilities that already exist.
30
+ // Do not redeclare a `.prc-*` or `.qo-*` class: those belong to the
31
+ // libraries, and newer versions guard them with a doubled class, so a host rule
32
+ // silently loses anyway.
33
+ // ---------------------------------------------------------------------------
34
+
35
+ // ---------------------------------------------------------------------------
36
+ // THE FONT FAMILY IS SET ONCE, HERE.
37
+ //
38
+ // The theme's reset sets no `font-family` on `body`, and several of its own
39
+ // component classes (`.qo-page-title`, `.qo-page-subtitle`) style size, weight
40
+ // and colour only. Anything not carrying `qo-font-family-primary` therefore
41
+ // inherits the browser default, which is a SERIF. One line here is the single
42
+ // point that makes every screen agree; do not repeat the class per widget.
43
+ // ---------------------------------------------------------------------------
44
+ body {
45
+ font-family: var(--qo-font-family-primary);
46
+ }
47
+
48
+ // ---------------------------------------------------------------------------
49
+ // LOADING PLACEHOLDERS — one height, one sweep, visible on a white card.
50
+ //
51
+ // Core ships `--skeleton-field-height: 32px`; every control on this stack is
52
+ // 40px (`--qo-control-height`), so the form re-flowed 8px a row as data landed.
53
+ // Core's `#eee` base with a sheen whose brightest stop is LIGHTER than the base
54
+ // reads as "a white background animating" on a `qo-card`; both are restated as
55
+ // theme tokens. The two `.prc-loading-container` rules: core nests
56
+ // that element inside itself, so two rgba(0,0,0,.1) backdrops stacked, and the
57
+ // dim landed on the skeleton base but not its z-index:2000 shimmer.
58
+ // ---------------------------------------------------------------------------
59
+ :root {
60
+ --skeleton-field-height: var(--qo-control-height);
61
+ --skeleton-background-color: var(--qo-bg-disabled);
62
+ --skeleton-background-linear-gradient: linear-gradient(
63
+ 110deg,
64
+ var(--qo-bg-disabled) 8%,
65
+ var(--qo-bg-light) 18%,
66
+ var(--qo-bg-disabled) 33%
67
+ );
68
+ }
69
+
70
+ .prc-loading-container .prc-loading-container {
71
+ background-color: transparent;
72
+ }
73
+
74
+ body:has(.prc-skeleton) .prc-loading-container {
75
+ background-color: transparent;
76
+ }
77
+
78
+ // ---------------------------------------------------------------------------
79
+ // Kendo controls that a schema put on the 40px ramp — make the ramp stick.
80
+ //
81
+ // `qo-h-control` is (0,1,0). kendo-widget's `.k-dropdownlist, .k-picker`
82
+ // `{ height: 32px }` ties it and loads later, so DROPDOWNs drew 8px shorter than
83
+ // the TEXTBOXes beside them. Doubling the class is (0,2,0) and re-states the
84
+ // theme's own token — no `!important`.
85
+ // ---------------------------------------------------------------------------
86
+ // KendoReact 13+ emits no fill-mode class (`k-picker-solid`, `k-input-solid`) when
87
+ // the theme decides the fill, so the solid default is the bare base class; the
88
+ // `:where()` keeps "not flat / not outline" at the old (0,2,0) specificity.
89
+ .qo-h-control.k-picker:where(:not(.k-picker-flat, .k-picker-outline)),
90
+ .qo-h-control.k-input:where(:not(.k-input-flat, .k-input-outline)) {
91
+ height: var(--qo-control-height);
92
+ }
93
+
94
+ // A MultiSelect grows with its chips, so it takes a floor and not a height.
95
+ .qo-min-h-control.k-input:where(:not(.k-input-flat, .k-input-outline)),
96
+ .qo-min-h-control.k-picker:where(:not(.k-picker-flat, .k-picker-outline)) {
97
+ height: auto;
98
+ min-height: var(--qo-control-height);
99
+ }
100
+
101
+ // ---------------------------------------------------------------------------
102
+ // Control text — NO RULE HERE, on purpose. 12px label / 13px value.
103
+ //
104
+ // Add, Edit and View read in one pair of sizes, and all of it comes from the
105
+ // libraries: a field label is vs-theme's `qo-label` (12px / 600), and every
106
+ // control's text is 13px from kendo-widget 2.8.1 — as are a BLOCK's value and
107
+ // the grid toolbar's search from vs-template 2.12.1. Do not put a size on
108
+ // `.k-input-inner`: a declaration on the element beats every class on the
109
+ // wrapper, and globally it would also pin the toolbar search and filter cells.
110
+ // (Apps generated before 1.0.1 carried an 11px rule here; delete it when they
111
+ // adopt kendo-widget 2.8.1.)
112
+ // ---------------------------------------------------------------------------
113
+
114
+ // ---------------------------------------------------------------------------
115
+ // Two fields in one row, one label wraps — keep the controls on one line.
116
+ //
117
+ // The label HOC stacks label over control in `.prc-label-field`; a row of two
118
+ // aligns them by their TOP, so a wrapped label pushes its control down a line.
119
+ // Aligning the controls by their BOTTOM fixes it at every width. Both
120
+ // restrictions are load-bearing: `[class*="prc-cl-"]` keeps it on a column
121
+ // SLOT (`:has()` is a descendant test), and `:not(.prc-flx-container)` excludes
122
+ // a slot that is itself a layout — a scroll pane carrying `prc-cl-fl` otherwise
123
+ // gets bottom-packed and its first section is pushed above the fold, measured.
124
+ // Durable home: core's ContainerRenderer styles.
125
+ // ---------------------------------------------------------------------------
126
+ .prc-flx-container:not(.prc-verticle):not(.prc-verticle-reverse)
127
+ > [class*="prc-cl-"]:not(.prc-flx-container):has(.prc-label-field) {
128
+ align-self: stretch;
129
+ display: flex;
130
+ flex-direction: column;
131
+ justify-content: flex-end;
132
+ }
133
+
134
+ // ---------------------------------------------------------------------------
135
+ // App screens (src/Screens) — the loader, error and 404 elements main.tsx
136
+ // hands to <Core>. They reuse the core classes; only the colour and the
137
+ // missing height are restated here, as theme tokens.
138
+ // ---------------------------------------------------------------------------
139
+ .prc-spinner-arc.prc-spinner-arc {
140
+ border-top-color: var(--qo-border-primary);
141
+ border-right-color: var(--qo-border-primary);
142
+ }
143
+
144
+ .prc-404-container.app-screen-message {
145
+ min-height: 100dvh;
146
+ padding: var(--qo-space-lg);
147
+ }
148
+
149
+ @import "../../Factory/Widgets/SectionNav/style.scss";
@@ -1,61 +1,90 @@
1
+ /// <reference types="vitest" /> // @tests
1
2
  import { fileURLToPath } from "node:url";
2
- import { defineConfig } from "vite";
3
+ import { defineConfig, loadEnv } from "vite";
3
4
  import react from "@vitejs/plugin-react";
4
5
 
5
6
  // https://vitejs.dev/config/
6
- export default defineConfig({
7
- // Must match VITE_HOMEPAGE in .env. The app is served from this segment, so a
8
- // screen lives at <base>/<slug> — e.g. __BASE_PATH_SLASH__sample.
9
- base: "__BASE_PATH_SLASH__",
10
-
11
- plugins: [react()],
12
-
13
- resolve: {
14
- alias: [
15
- {
16
- // procode-lowcode-core exports "./styles" as src/Assets/styles/index.scss,
17
- // but the package ships the folder as src/assets/. Windows and macOS
18
- // ignore the case and build; Linux (CI, Docker) fails the @import. This
19
- // points the import at the real path on every OS.
20
- find: /^procode-lowcode-core\/styles$/,
21
- replacement: fileURLToPath(
22
- new URL("./node_modules/procode-lowcode-core/src/assets/styles/index.scss", import.meta.url),
23
- ),
7
+ export default defineConfig(({ command, mode }) => {
8
+ // A personal dev token must never ship. `vite build` reads .env.local like
9
+ // `vite dev` does, so a VITE_HARDCODED_TOKEN left there would be compiled into
10
+ // dist/ and every user of the build would act as that developer. Refuse
11
+ // instead. (ALLOW_TOKEN_IN_BUILD=1 overrides it for a throwaway local build.)
12
+ const env = loadEnv(mode, process.cwd(), "");
13
+ if (command === "build" && env.VITE_HARDCODED_TOKEN && process.env.ALLOW_TOKEN_IN_BUILD !== "1") {
14
+ throw new Error(
15
+ "VITE_HARDCODED_TOKEN is set (usually in .env.local). Remove it before building — " +
16
+ "a built app authenticates from the AuthToken cookie. For a throwaway local build only: ALLOW_TOKEN_IN_BUILD=1.",
17
+ );
18
+ }
19
+
20
+ return {
21
+ // Must match VITE_HOMEPAGE in .env. The app is served from this segment, so a
22
+ // screen lives at <base>/<slug> — e.g. __BASE_PATH_SLASH__sample.
23
+ base: "__BASE_PATH_SLASH__",
24
+
25
+ plugins: [react()],
26
+
27
+ resolve: {
28
+ alias: [
29
+ {
30
+ // procode-lowcode-core exports "./styles" as src/Assets/styles/index.scss,
31
+ // but the package ships the folder as src/assets/. Windows and macOS
32
+ // ignore the case and build; Linux (CI, Docker) fails the @import. This
33
+ // points the import at the real path on every OS.
34
+ find: /^procode-lowcode-core\/styles$/,
35
+ replacement: fileURLToPath(
36
+ new URL("./node_modules/procode-lowcode-core/src/assets/styles/index.scss", import.meta.url),
37
+ ),
38
+ },
39
+ ],
40
+ },
41
+
42
+ build: {
43
+ // Must stay >= es2018. Object rest/spread is an ES2018 feature, and the
44
+ // es2015 downlevel transform miscompiles a `const` that declares two rest
45
+ // patterns at once — it drops bindings and emits a bare `{} = null`, which
46
+ // throws "Cannot destructure 'null' as it is null" at runtime. Kendo's
47
+ // CalendarCell.shouldComponentUpdate is written that way, so the date picker
48
+ // crashes on open in built bundles only — never in dev, which skips this
49
+ // transform. Do not lower this to chase bundle size.
50
+ target: "es2020",
51
+ minify: false,
52
+ },
53
+
54
+ esbuild: {
55
+ target: "es2020",
56
+ },
57
+
58
+ // The two runtime libraries ship CommonJS-interop shapes that Vite's dep
59
+ // scanner does not find on its own; pre-bundling them keeps dev reloads fast
60
+ // and avoids "outdated optimize dep" full-page reloads on every save.
61
+ optimizeDeps: {
62
+ include: ["procode-lowcode-kendo-widget", "procode-lowcode-core"],
63
+ },
64
+
65
+ // Some transitive dependencies still reference the Node `global`.
66
+ define: {
67
+ global: "globalThis",
68
+ },
69
+
70
+ server: {
71
+ fs: {
72
+ allow: ["..", "."],
73
+ },
74
+ },
75
+
76
+ // @tests-start
77
+ // `npm test` (vitest). The ProCode packages ship sources that import SCSS and
78
+ // JSON; inlining them lets Vite transform them in the test run as it does in
79
+ // the app — without this every test importing a package fails to load.
80
+ test: {
81
+ include: ["src/**/*.test.ts"],
82
+ server: {
83
+ deps: {
84
+ inline: [/procode-/],
85
+ },
24
86
  },
25
- ],
26
- },
27
-
28
- build: {
29
- // Must stay >= es2018. Object rest/spread is an ES2018 feature, and the
30
- // es2015 downlevel transform miscompiles a `const` that declares two rest
31
- // patterns at once — it drops bindings and emits a bare `{} = null`, which
32
- // throws "Cannot destructure 'null' as it is null" at runtime. Kendo's
33
- // CalendarCell.shouldComponentUpdate is written that way, so the date picker
34
- // crashes on open in built bundles only — never in dev, which skips this
35
- // transform. Do not lower this to chase bundle size.
36
- target: "es2020",
37
- minify: false,
38
- },
39
-
40
- esbuild: {
41
- target: "es2020",
42
- },
43
-
44
- // The two runtime libraries ship CommonJS-interop shapes that Vite's dep
45
- // scanner does not find on its own; pre-bundling them keeps dev reloads fast
46
- // and avoids "outdated optimize dep" full-page reloads on every save.
47
- optimizeDeps: {
48
- include: ["procode-lowcode-kendo-widget", "procode-lowcode-core"],
49
- },
50
-
51
- // Some transitive dependencies still reference the Node `global`.
52
- define: {
53
- global: "globalThis",
54
- },
55
-
56
- server: {
57
- fs: {
58
- allow: ["..", "."],
59
87
  },
60
- },
88
+ // @tests-end
89
+ };
61
90
  });
@@ -0,0 +1,76 @@
1
+ {
2
+ "validation.required": "Ce champ est obligatoire",
3
+ "validation.email": "L'adresse e-mail est invalide",
4
+ "validation.bulkEmail": "Une ou plusieurs adresses e-mail sont invalides",
5
+ "validation.alphanumericSpace": "Seuls les lettres, les chiffres et les espaces sont autorisés",
6
+ "validation.maxChars": "{maxCharCount} caractères maximum",
7
+ "validation.minChars": "{minCharCount} caractères minimum",
8
+ "validation.greaterThan": "La valeur doit être supérieure à {value}",
9
+ "validation.greaterThanEqual": "La valeur doit être supérieure ou égale à {value}",
10
+ "validation.lessThan": "La valeur doit être inférieure à {value}",
11
+ "validation.lessThanEqual": "La valeur doit être inférieure ou égale à {value}",
12
+ "validation.between": "La valeur doit être comprise entre {min} et {max}",
13
+ "validation.notBetween": "La valeur ne doit pas être comprise entre {min} et {max}",
14
+ "validation.invalidNumber": "Valeur numérique invalide",
15
+ "validation.invalidDate": "Valeur de date invalide",
16
+ "validation.invalidList": "Valeur de liste invalide",
17
+ "validation.invalidValue": "Valeur {dataType} invalide",
18
+ "validation.itemCount_one": "{count} élément",
19
+ "validation.itemCount_other": "{count} éléments",
20
+ "validation.misconfigured.comparisonValueMissing": "Validation mal configurée : la valeur de comparaison est absente",
21
+ "validation.misconfigured.minBoundaryMissing": "Validation mal configurée : la borne minimale est absente",
22
+ "validation.misconfigured.maxBoundaryMissing": "Validation mal configurée : la borne maximale est absente",
23
+ "validation.misconfigured.maxCharCountMissing": "Validation mal configurée : le paramètre maxCharCount est absent",
24
+ "validation.misconfigured.minCharCountMissing": "Validation mal configurée : le paramètre minCharCount est absent",
25
+ "action.notAvailable": "Cette action n'est pas disponible. Veuillez contacter le support.",
26
+ "action.denied": "Vous n'avez pas l'autorisation d'effectuer cette action.",
27
+ "action.permissionsLoading": "Les autorisations sont encore en cours de chargement. Veuillez réessayer.",
28
+ "screen.denied": "Vous n'avez pas l'autorisation de consulter cet écran.",
29
+ "screen.loadError": "Une erreur s'est produite lors du chargement de cet écran.",
30
+ "screen.oops": "Oups !",
31
+ "screen.notFoundTitle": "404 - PAGE INTROUVABLE",
32
+ "screen.notFoundDescription": "La page que vous recherchez a peut-être été supprimée, renommée ou est temporairement indisponible.",
33
+ "screen.unexpectedError": "Une erreur inattendue s'est produite.",
34
+ "locale.label": "Langue",
35
+ "http.GET.200": "Récupération réussie",
36
+ "http.GET.204": "Aucun contenu",
37
+ "http.GET.400": "Requête incorrecte",
38
+ "http.GET.401": "Non autorisé",
39
+ "http.GET.404": "Entité introuvable",
40
+ "http.GET.415": "Type de média non pris en charge",
41
+ "http.GET.500": "Erreur",
42
+ "http.POST.201": "Création réussie",
43
+ "http.POST.204": "Aucun contenu",
44
+ "http.POST.400": "Requête incorrecte",
45
+ "http.POST.401": "Non autorisé",
46
+ "http.POST.409": "Entrée en double",
47
+ "http.POST.415": "Type de média non pris en charge",
48
+ "http.POST.422": "Erreur de validation",
49
+ "http.POST.500": "Erreur",
50
+ "http.PUT.201": "Mise à jour réussie",
51
+ "http.PUT.204": "Aucun contenu",
52
+ "http.PUT.400": "Requête incorrecte",
53
+ "http.PUT.401": "Non autorisé",
54
+ "http.PUT.404": "Entité introuvable",
55
+ "http.PUT.409": "Entrée en double",
56
+ "http.PUT.415": "Type de média non pris en charge",
57
+ "http.PUT.422": "Erreur de validation",
58
+ "http.PUT.500": "Erreur",
59
+ "http.PATCH.201": "Mise à jour réussie",
60
+ "http.PATCH.204": "Aucun contenu",
61
+ "http.PATCH.400": "Requête incorrecte",
62
+ "http.PATCH.401": "Non autorisé",
63
+ "http.PATCH.404": "Entité introuvable",
64
+ "http.PATCH.409": "Entrée en double",
65
+ "http.PATCH.415": "Type de média non pris en charge",
66
+ "http.PATCH.422": "Erreur de validation",
67
+ "http.PATCH.500": "Erreur",
68
+ "http.DELETE.200": "Suppression réussie",
69
+ "http.DELETE.204": "Aucun contenu",
70
+ "http.DELETE.401": "Non autorisé",
71
+ "http.DELETE.404": "Entité introuvable",
72
+ "http.DELETE.409": "Entrée en double",
73
+ "http.DELETE.415": "Type de média non pris en charge",
74
+ "http.DELETE.422": "Erreur de validation",
75
+ "http.DELETE.500": "Erreur"
76
+ }