Skip to content

Commit fad30a2

Browse files
authored
feat(validate-icu): add a cli to validates icu locales files (#1046)
* feat(validate-icu): add a cli to validates icu locales files * feat(icu): use node instead of node-ts * fix(shebang): add rollup plugin preserve shebang * fix(async): use async functions * fix(errors): return errors
1 parent 20bea37 commit fad30a2

File tree

14 files changed

+558
-6
lines changed

14 files changed

+558
-6
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ scaleway-lib is a set of NPM packages used at Scaleway.
104104
![npm bundle size](https://img.shields.io/bundlephobia/min/@scaleway/outdated-browser)
105105
![npm](https://img.shields.io/npm/v/@scaleway/outdated-browser)
106106

107+
- [`@scaleway/validate-icu-locales`](./packages/validate-icu-locales/README.md): A small cli to check ICU locales error
108+
109+
![npm](https://img.shields.io/npm/dm/@scaleway/validate-icu-locales)
110+
![npm bundle size](https://img.shields.io/bundlephobia/min/@scaleway/validate-icu-locales)
111+
![npm](https://img.shields.io/npm/v/@scaleway/validate-icu-locales)
112+
107113
## Development
108114

109115
### Locally

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"packages/*"
66
],
77
"type": "module",
8+
"packageManager": "[email protected]",
89
"devDependencies": {
910
"@babel/core": "7.19.6",
1011
"@babel/eslint-parser": "7.19.1",
@@ -42,6 +43,7 @@
4243
"read-pkg": "7.1.0",
4344
"rollup": "3.2.3",
4445
"rollup-plugin-dts": "5.0.0",
46+
"rollup-plugin-preserve-shebangs": "^0.2.0",
4547
"rollup-plugin-visualizer": "5.8.3",
4648
"tsd-lite": "0.6.0",
4749
"typescript": "4.8.4",
@@ -117,6 +119,5 @@
117119
}
118120
]
119121
]
120-
},
121-
"packageManager": "[email protected]"
122+
}
122123
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const { join } = require('path')
2+
3+
module.exports = {
4+
rules: {
5+
'import/no-extraneous-dependencies': [
6+
'error',
7+
{ packageDir: [__dirname, join(__dirname, '../../')] },
8+
],
9+
},
10+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# `@scaleway/validate-icu-locales`
2+
3+
## A tiny cli to handle ICU errors on locales files.
4+
## Install
5+
6+
Requirements
7+
- Node should be installed
8+
9+
```bash
10+
$ pnpm add -D @scaleway/validate-icu-locales
11+
```
12+
## Usage
13+
14+
We can parse JSON, TS and JS if theses files use default export.
15+
16+
17+
```
18+
validate-icu "../**/en.json"
19+
```
20+
21+
If there is an error on a local, the CLI will throw an Error and print all errors.
22+
23+
24+
## Error
25+
```
26+
export default from: ../src/__tests__/locales/en-1.js is not an object
27+
{
28+
errors: [
29+
{
30+
message: 'EXPECT_ARGUMENT_CLOSING_BRACE',
31+
value: '{count, plural, =0 {Minute} =1 {Minute} other {Minutes',
32+
key: 'units.minutes.label',
33+
filePath: '../../packages/validate-icu-locales/src/__tests__/locales/en.js'
34+
},
35+
{
36+
message: 'EXPECT_ARGUMENT_CLOSING_BRACE',
37+
value: '{count, plural, =0 {Minute} =1 {Minute} other {Minutes',
38+
key: 'units.minutes.label',
39+
filePath: '../../packages/validate-icu-locales/src/__tests__/locales/en.json'
40+
},
41+
{
42+
message: 'EXPECT_ARGUMENT_CLOSING_BRACE',
43+
value: '{count, plural, =0 {Minute} =1 {Minute} other {Minutes',
44+
key: 'units.minutes.label',
45+
filePath: '../../packages/validate-icu-locales/src/__tests__/locales/en.ts'
46+
}
47+
]
48+
}
49+
```
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name": "@scaleway/validate-icu-locales",
3+
"version": "1.0.0",
4+
"description": "A small cli to handle icu errors on locales files",
5+
"keywords": [
6+
"icu",
7+
"i18n",
8+
"cli"
9+
],
10+
"type": "module",
11+
"bin": {
12+
"validate-icu": "dist/index.js"
13+
},
14+
"publishConfig": {
15+
"access": "public"
16+
},
17+
"repository": {
18+
"type": "git",
19+
"url": "https://github.com/scaleway/scaleway-lib",
20+
"directory": "packages/validate-icu-locales"
21+
},
22+
"license": "MIT",
23+
"dependencies": {
24+
"@formatjs/icu-messageformat-parser": "^2.1.10",
25+
"globby": "^13.1.2",
26+
"module-from-string": "^3.3.0"
27+
}
28+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export const locales = {
2+
// error on this one missing bracket
3+
4+
'units.minutes.label':
5+
'{count, plural, =0 {Minute} =1 {Minute} other {Minutes',
6+
'units.hours.label': '{count, plural, =0 {Hour} =1 {Hour} other {Hours}}',
7+
'units.days.label': '{count, plural, =0 {Day} =1 {Day} other {Days}}',
8+
'units.months.label': '{count, plural, =0 {Month} =1 {Month} other {Months}}',
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export const toto = {
2+
// error on this one missing bracket
3+
4+
'units.minutes.label':
5+
'{count, plural, =0 {Minute} =1 {Minute} other {Minutes',
6+
'units.hours.label': '{count, plural, =0 {Hour} =1 {Hour} other {Hours}}',
7+
'units.days.label': '{count, plural, =0 {Day} =1 {Day} other {Days}}',
8+
'units.months.label': '{count, plural, =0 {Month} =1 {Month} other {Months}}',
9+
} as const
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export default {
2+
// error on this one missing bracket
3+
4+
'units.minutes.label':
5+
'{count, plural, =0 {Minute} =1 {Minute} other {Minutes',
6+
'units.hours.label': '{count, plural, =0 {Hour} =1 {Hour} other {Hours}}',
7+
'units.days.label': '{count, plural, =0 {Day} =1 {Day} other {Days}}',
8+
'units.months.label': '{count, plural, =0 {Month} =1 {Month} other {Months}}',
9+
} as const
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export default {
2+
// error on this one missing bracket
3+
4+
'units.minutes.label':
5+
'{count, plural, =0 {Minute} =1 {Minute} other {Minutes',
6+
'units.hours.label': '{count, plural, =0 {Hour} =1 {Hour} other {Hours}}',
7+
'units.days.label': '{count, plural, =0 {Day} =1 {Day} other {Days}}',
8+
'units.months.label': '{count, plural, =0 {Month} =1 {Month} other {Months}}',
9+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"units.minutes.label": "{count, plural, =0 {Minute} =1 {Minute} other {Minutes",
3+
"units.hours.label": "{count, plural, =0 {Hour} =1 {Hour} other {Hours}}",
4+
"units.days.label": "{count, plural, =0 {Day} =1 {Day} other {Days}}",
5+
"units.months.label": "{count, plural, =0 {Month} =1 {Month} other {Months}}"
6+
}

0 commit comments

Comments
 (0)