@leo-h/create-nodejs-app 1.0.38 → 1.0.40
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/templates/react-vite/gitignore +3 -0
- package/templates/react-vite/package.json +1 -1
- package/templates/react-vite/pnpm-lock.yaml +11 -11
- package/templates/react-vite/src/lib/zod-i18n-pt-br-translation.json +101 -0
- package/templates/react-vite/src/lib/zod-i18n.ts +12 -4
- package/templates/react-vite/src/lib/zod-i18n-translation-for-end-users.json +0 -103
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@leo-h/create-nodejs-app",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.40",
|
4
4
|
"packageManager": "pnpm@9.15.9",
|
5
5
|
"author": "Leonardo Henrique <leonardo0507.business@gmail.com>",
|
6
6
|
"description": "Create a modern Node.js app with TypeScript using one command.",
|
@@ -47,7 +47,7 @@ importers:
|
|
47
47
|
version: 19.1.2(@types/react@19.1.2)
|
48
48
|
'@vitejs/plugin-react':
|
49
49
|
specifier: 4.4.1
|
50
|
-
version: 4.4.1(vite@6.3.
|
50
|
+
version: 4.4.1(vite@6.3.4(@types/node@22.10.5)(tsx@4.19.4)(yaml@2.7.1))
|
51
51
|
eslint:
|
52
52
|
specifier: 9.25.1
|
53
53
|
version: 9.25.1
|
@@ -88,11 +88,11 @@ importers:
|
|
88
88
|
specifier: 8.31.1
|
89
89
|
version: 8.31.1(eslint@9.25.1)(typescript@5.8.3)
|
90
90
|
vite:
|
91
|
-
specifier: 6.3.
|
92
|
-
version: 6.3.
|
91
|
+
specifier: 6.3.4
|
92
|
+
version: 6.3.4(@types/node@22.10.5)(tsx@4.19.4)(yaml@2.7.1)
|
93
93
|
vite-tsconfig-paths:
|
94
94
|
specifier: 5.1.4
|
95
|
-
version: 5.1.4(typescript@5.8.3)(vite@6.3.
|
95
|
+
version: 5.1.4(typescript@5.8.3)(vite@6.3.4(@types/node@22.10.5)(tsx@4.19.4)(yaml@2.7.1))
|
96
96
|
|
97
97
|
packages:
|
98
98
|
|
@@ -2274,8 +2274,8 @@ packages:
|
|
2274
2274
|
vite:
|
2275
2275
|
optional: true
|
2276
2276
|
|
2277
|
-
vite@6.3.
|
2278
|
-
resolution: {integrity: sha512-
|
2277
|
+
vite@6.3.4:
|
2278
|
+
resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==}
|
2279
2279
|
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
|
2280
2280
|
hasBin: true
|
2281
2281
|
peerDependencies:
|
@@ -3231,14 +3231,14 @@ snapshots:
|
|
3231
3231
|
'@typescript-eslint/types': 8.31.1
|
3232
3232
|
eslint-visitor-keys: 4.2.0
|
3233
3233
|
|
3234
|
-
'@vitejs/plugin-react@4.4.1(vite@6.3.
|
3234
|
+
'@vitejs/plugin-react@4.4.1(vite@6.3.4(@types/node@22.10.5)(tsx@4.19.4)(yaml@2.7.1))':
|
3235
3235
|
dependencies:
|
3236
3236
|
'@babel/core': 7.26.10
|
3237
3237
|
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10)
|
3238
3238
|
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10)
|
3239
3239
|
'@types/babel__core': 7.20.5
|
3240
3240
|
react-refresh: 0.17.0
|
3241
|
-
vite: 6.3.
|
3241
|
+
vite: 6.3.4(@types/node@22.10.5)(tsx@4.19.4)(yaml@2.7.1)
|
3242
3242
|
transitivePeerDependencies:
|
3243
3243
|
- supports-color
|
3244
3244
|
|
@@ -4830,18 +4830,18 @@ snapshots:
|
|
4830
4830
|
|
4831
4831
|
validator@13.12.0: {}
|
4832
4832
|
|
4833
|
-
vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.
|
4833
|
+
vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.3.4(@types/node@22.10.5)(tsx@4.19.4)(yaml@2.7.1)):
|
4834
4834
|
dependencies:
|
4835
4835
|
debug: 4.4.0
|
4836
4836
|
globrex: 0.1.2
|
4837
4837
|
tsconfck: 3.1.4(typescript@5.8.3)
|
4838
4838
|
optionalDependencies:
|
4839
|
-
vite: 6.3.
|
4839
|
+
vite: 6.3.4(@types/node@22.10.5)(tsx@4.19.4)(yaml@2.7.1)
|
4840
4840
|
transitivePeerDependencies:
|
4841
4841
|
- supports-color
|
4842
4842
|
- typescript
|
4843
4843
|
|
4844
|
-
vite@6.3.
|
4844
|
+
vite@6.3.4(@types/node@22.10.5)(tsx@4.19.4)(yaml@2.7.1):
|
4845
4845
|
dependencies:
|
4846
4846
|
esbuild: 0.25.2
|
4847
4847
|
fdir: 6.4.4(picomatch@4.0.2)
|
@@ -0,0 +1,101 @@
|
|
1
|
+
{
|
2
|
+
"types": {
|
3
|
+
"number": "número",
|
4
|
+
"string": "texto",
|
5
|
+
"integer": "número inteiro",
|
6
|
+
"boolean": "verdadeiro ou falso",
|
7
|
+
"date": "data",
|
8
|
+
"bigint": "número",
|
9
|
+
"undefined": "vazio",
|
10
|
+
"null": "vazio",
|
11
|
+
"array": "lista",
|
12
|
+
"object": "objeto"
|
13
|
+
},
|
14
|
+
"errors": {
|
15
|
+
"invalid_type": "O campo deve ser {{expected}}, foi recebido {{received}}.",
|
16
|
+
"invalid_type_received_undefined": "O campo é obrigatório.",
|
17
|
+
"invalid_type_received_null": "O campo não pode estar nulo.",
|
18
|
+
"invalid_literal": "O campo deve ser apenas '{{expected}}'.",
|
19
|
+
"unrecognized_keys": "O campo contém chave(s) não reconhecida(s) no objeto: {{- keys}}.",
|
20
|
+
"invalid_union": "O campo é inválido.",
|
21
|
+
"invalid_union_discriminator": "O campo deve conter apenas os seguintes valores: {{- options}}.",
|
22
|
+
"invalid_enum_value": "O campo deve conter apenas os seguintes valores: {{- options}}.",
|
23
|
+
"invalid_date": "A data é inválida.",
|
24
|
+
"custom": "O campo é inválido.",
|
25
|
+
"invalid_intersection_types": "O campo '{{path}}' não pode conter valores mesclados.",
|
26
|
+
"not_multiple_of": "O número deve ser múltiplo de {{multipleOf}}.",
|
27
|
+
"not_finite": "O número não pode ser infinito.",
|
28
|
+
"invalid_string": {
|
29
|
+
"email": "O e-mail é inválido.",
|
30
|
+
"url": "A URL é inválida.",
|
31
|
+
"uuid": "O UUID é inválido.",
|
32
|
+
"cuid": "O CUID é inválido.",
|
33
|
+
"regex": "O campo é inválido.",
|
34
|
+
"datetime": "A data e a hora são inválidos.",
|
35
|
+
"startsWith": "O campo só pode iniciar com \"{{startsWith}}\".",
|
36
|
+
"endsWith": "O campo só pode iniciar com \"{{endsWith}}\"."
|
37
|
+
},
|
38
|
+
"too_small": {
|
39
|
+
"array": {
|
40
|
+
"exact": "Adicione exatamente {{minimum}} item / itens.",
|
41
|
+
"inclusive": "Adicione no mínimo {{minimum}} item / itens.",
|
42
|
+
"not_inclusive": "Adicione mais de {{minimum}} item / itens."
|
43
|
+
},
|
44
|
+
"string": {
|
45
|
+
"exact": "O campo deve conter exatamente {{minimum}} caractere(s).",
|
46
|
+
"inclusive": "O campo deve conter no mínimo {{minimum}} caractere(s).",
|
47
|
+
"not_inclusive": "O campo deve conter mais de {{minimum}} caractere(s)."
|
48
|
+
},
|
49
|
+
"number": {
|
50
|
+
"exact": "O número deve conter exatamente {{minimum}} caractere(s).",
|
51
|
+
"inclusive": "O número deve ser maior ou igual a {{minimum}}.",
|
52
|
+
"not_inclusive": "O número deve ser maior que {{minimum}}."
|
53
|
+
},
|
54
|
+
"set": {
|
55
|
+
"exact": "O campo é inválido.",
|
56
|
+
"inclusive": "O campo é inválido.",
|
57
|
+
"not_inclusive": "O campo é inválido."
|
58
|
+
},
|
59
|
+
"date": {
|
60
|
+
"exact": "A data deve ser exatamente igual a {{- maximum, datetime}}.",
|
61
|
+
"inclusive": "A data deve ser maior ou igual a {{- minimum, datetime}}.",
|
62
|
+
"not_inclusive": "A data deve ser maior que {{- minimum, datetime}}."
|
63
|
+
}
|
64
|
+
},
|
65
|
+
"too_big": {
|
66
|
+
"array": {
|
67
|
+
"exact": "Adicione exatamente {{maximum}} item / itens.",
|
68
|
+
"inclusive": "Adicione no máximo {{maximum}} item / itens.",
|
69
|
+
"not_inclusive": "Adicione menos de {{maximum}} item / itens."
|
70
|
+
},
|
71
|
+
"string": {
|
72
|
+
"exact": "O campo deve conter exatamente {{maximum}} caractere(s).",
|
73
|
+
"inclusive": "O campo deve conter no máximo {{maximum}} caractere(s).",
|
74
|
+
"not_inclusive": "O campo deve conter menos de {{maximum}} caractere(s)."
|
75
|
+
},
|
76
|
+
"number": {
|
77
|
+
"exact": "O número deve conter exatamente {{maximum}} caractere(s).",
|
78
|
+
"inclusive": "O número deve ser menor ou igual a {{maximum}}.",
|
79
|
+
"not_inclusive": "O número deve ser menor que {{maximum}}."
|
80
|
+
},
|
81
|
+
"set": {
|
82
|
+
"exact": "O campo é inválido.",
|
83
|
+
"inclusive": "O campo é inválido.",
|
84
|
+
"not_inclusive": "O campo é inválido."
|
85
|
+
},
|
86
|
+
"date": {
|
87
|
+
"exact": "A data deve ser exatamente igual a {{- maximum, datetime}}.",
|
88
|
+
"inclusive": "A data deve ser menor ou igual a {{- maximum, datetime}}.",
|
89
|
+
"not_inclusive": "A data deve ser menor que {{- maximum, datetime}}."
|
90
|
+
}
|
91
|
+
}
|
92
|
+
},
|
93
|
+
"validations": {
|
94
|
+
"email": "email",
|
95
|
+
"url": "url",
|
96
|
+
"uuid": "uuid",
|
97
|
+
"cuid": "cuid",
|
98
|
+
"regex": "regex",
|
99
|
+
"datetime": "datetime"
|
100
|
+
}
|
101
|
+
}
|
@@ -2,19 +2,27 @@ import i18next from "i18next";
|
|
2
2
|
import { z } from "zod";
|
3
3
|
import { zodI18nMap } from "zod-i18n-map";
|
4
4
|
import translation from "zod-i18n-map/locales/pt/zod.json";
|
5
|
-
import
|
5
|
+
import zodI18nPtBrTranslation from "./zod-i18n-pt-br-translation.json";
|
6
6
|
|
7
7
|
export function startZodWithI18n() {
|
8
8
|
i18next.init({
|
9
9
|
lng: "pt",
|
10
10
|
resources: {
|
11
11
|
pt: {
|
12
|
-
zod: {
|
12
|
+
zod: {
|
13
|
+
...translation,
|
14
|
+
...zodI18nPtBrTranslation,
|
15
|
+
errors: {
|
16
|
+
...translation.errors,
|
17
|
+
...zodI18nPtBrTranslation.errors,
|
18
|
+
},
|
19
|
+
},
|
13
20
|
},
|
14
21
|
},
|
22
|
+
interpolation: {
|
23
|
+
escapeValue: false,
|
24
|
+
},
|
15
25
|
});
|
16
26
|
|
17
27
|
z.setErrorMap(zodI18nMap);
|
18
28
|
}
|
19
|
-
|
20
|
-
export { z };
|
@@ -1,103 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"types": {
|
3
|
-
"number": "número",
|
4
|
-
"string": "texto",
|
5
|
-
"integer": "número inteiro",
|
6
|
-
"boolean": "verdadeiro ou falso",
|
7
|
-
"date": "data",
|
8
|
-
"bigint": "número",
|
9
|
-
"undefined": "vazio",
|
10
|
-
"null": "vazio",
|
11
|
-
"array": "lista",
|
12
|
-
"object": "objeto"
|
13
|
-
},
|
14
|
-
"errors": {
|
15
|
-
"invalid_type": "O campo deve ser {{expected}}, foi recebido {{received}}.",
|
16
|
-
"invalid_type_received_undefined": "O campo é obrigatório.",
|
17
|
-
"invalid_type_received_null": "O campo é obrigatório.",
|
18
|
-
"invalid_literal": "O campo deve ser apenas \"{{expected}}\".",
|
19
|
-
"unrecognized_keys": "Chave(s) não reconhecida(s) no objeto: {{- keys}}.",
|
20
|
-
"invalid_union": "Entrada inválida.",
|
21
|
-
"invalid_union_discriminator": "O campo deve conter apenas os seguintes valores: {{- options}}.",
|
22
|
-
"invalid_enum_value": "O campo deve conter apenas os seguintes valores: {{- options}}.",
|
23
|
-
"invalid_arguments": "Argumento de função inválido.",
|
24
|
-
"invalid_return_type": "Tipo de retorno de função inválido.",
|
25
|
-
"invalid_date": "A data é inválida.",
|
26
|
-
"custom": "A entrada é inválida.",
|
27
|
-
"invalid_intersection_types": "Os valores não podem ser mesclados.",
|
28
|
-
"not_multiple_of": "O número deverá ser múltiplo de {{multipleOf}}.",
|
29
|
-
"not_finite": "O número não pode ser infinito.",
|
30
|
-
"invalid_string": {
|
31
|
-
"email": "O e-mail é inválido.",
|
32
|
-
"url": "A URL é inválida.",
|
33
|
-
"uuid": "O UUID é inválido.",
|
34
|
-
"cuid": "O CUID é inválido.",
|
35
|
-
"regex": "A combinação é inválida.",
|
36
|
-
"datetime": "A data e a hora são inválidos.",
|
37
|
-
"startsWith": "O campo só pode iniciar com \"{{startsWith}}\".",
|
38
|
-
"endsWith": "O campo só pode iniciar com \"{{endsWith}}\"."
|
39
|
-
},
|
40
|
-
"too_small": {
|
41
|
-
"array": {
|
42
|
-
"exact": "A lista deve conter exatamente {{minimum}} item / itens.",
|
43
|
-
"inclusive": "A lista deve conter no mínimo {{minimum}} item / itens.",
|
44
|
-
"not_inclusive": "A lista deve conter mais de {{minimum}} item / itens."
|
45
|
-
},
|
46
|
-
"string": {
|
47
|
-
"exact": "O campo deve conter exatamente {{minimum}} caracter(es).",
|
48
|
-
"inclusive": "O campo é obrigatório com no mínimo {{minimum}} caracter(es).",
|
49
|
-
"not_inclusive": "O campo deve conter mais de {{minimum}} caracter(es)."
|
50
|
-
},
|
51
|
-
"number": {
|
52
|
-
"exact": "O número deve conter exatamente {{minimum}} caracter(es).",
|
53
|
-
"inclusive": "O número deve ser maior ou igual a {{minimum}}.",
|
54
|
-
"not_inclusive": "O número deve ser maior que {{minimum}}."
|
55
|
-
},
|
56
|
-
"set": {
|
57
|
-
"exact": "Entrada inválida.",
|
58
|
-
"inclusive": "Entrada inválida.",
|
59
|
-
"not_inclusive": "Entrada inválida."
|
60
|
-
},
|
61
|
-
"date": {
|
62
|
-
"exact": "A data deve ser exatamente {{- maximum, datetime}}.",
|
63
|
-
"inclusive": "A data deve ser maior ou igual a {{- minimum, datetime}}.",
|
64
|
-
"not_inclusive": "A data deve ser maior que {{- minimum, datetime}}."
|
65
|
-
}
|
66
|
-
},
|
67
|
-
"too_big": {
|
68
|
-
"array": {
|
69
|
-
"exact": "A lista deve conter exatamente {{minimum}} item / itens.",
|
70
|
-
"inclusive": "A lista deve conter no mínimo {{minimum}} item / itens.",
|
71
|
-
"not_inclusive": "A lista deve conter mais de {{minimum}} item / itens."
|
72
|
-
},
|
73
|
-
"string": {
|
74
|
-
"exact": "O campo deve conter exatamente {{minimum}} caracter(es).",
|
75
|
-
"inclusive": "O campo deve conter pelo menos {{minimum}} caracter(es).",
|
76
|
-
"not_inclusive": "O campo deve conter mais de {{minimum}} caracter(es)."
|
77
|
-
},
|
78
|
-
"number": {
|
79
|
-
"exact": "O número deve conter exatamente {{minimum}} caracter(es).",
|
80
|
-
"inclusive": "O número deve ser maior ou igual a {{minimum}}.",
|
81
|
-
"not_inclusive": "O número deve ser maior que {{minimum}}."
|
82
|
-
},
|
83
|
-
"set": {
|
84
|
-
"exact": "Entrada inválida.",
|
85
|
-
"inclusive": "Entrada inválida.",
|
86
|
-
"not_inclusive": "Entrada inválida."
|
87
|
-
},
|
88
|
-
"date": {
|
89
|
-
"exact": "A data deve ser exatamente {{- maximum, datetime}}.",
|
90
|
-
"inclusive": "A data deve ser maior ou igual a {{- minimum, datetime}}.",
|
91
|
-
"not_inclusive": "A data deve ser maior que {{- minimum, datetime}}."
|
92
|
-
}
|
93
|
-
}
|
94
|
-
},
|
95
|
-
"validations": {
|
96
|
-
"email": "email",
|
97
|
-
"url": "url",
|
98
|
-
"uuid": "uuid",
|
99
|
-
"cuid": "cuid",
|
100
|
-
"regex": "regex",
|
101
|
-
"datetime": "datetime"
|
102
|
-
}
|
103
|
-
}
|