Skip to content

Commit b04270e

Browse files
committed
chore: replace @fluent/bundle to @fluent/syntax
1 parent e012faa commit b04270e

5 files changed

+30
-33
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"test": "jest"
1818
},
1919
"dependencies": {
20-
"@fluent/bundle": "0.15.1",
20+
"@fluent/syntax": "0.15.0",
2121
"chokidar": "3.4.0",
2222
"dedent-js": "1.0.1",
2323
"loader-utils": "2.0.0"

src/build-type-messages-key.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
const buildTypeMessagesKey = (resource) => {
2-
const interfaceFields = resource
3-
.map(message => `'${message.id}'`)
1+
const buildTypeMessagesKey = (ast) => {
2+
const messages = ast.body
3+
.filter(node => node.type === 'Message')
4+
5+
const interfaceFields = messages
6+
.map(message => `'${message.id.name}'`)
47
.join(' |\n')
58

69
return `type MessagesKey = ${interfaceFields}`

src/build-type-pattern-arguments.js

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,30 @@
11
import dedent from 'dedent-js'
22

3-
const messageVariables = (message) => {
4-
if (typeof message.value === 'string') {
5-
return []
6-
}
7-
8-
const variables = message.value.reduce(
9-
(acc, current) => current.type === 'var'
10-
? [...acc, current.name]
11-
: acc
12-
, []
13-
)
14-
15-
return variables
16-
}
3+
const messageVariablesName = (message) =>
4+
message.value.elements
5+
.filter(element => element.type === 'Placeable')
6+
.filter(placeable => placeable.expression.type === 'VariableReference')
7+
.map(placeable => placeable.expression.id.name)
178

189
const wrapVariables = variables => variables.map(i => `'${i}': string | number`)
1910

2011
const hasVariables = variables => variables.length > 0
2112

22-
const buildTypePatternArguments = (resource) => {
23-
const options = resource
13+
const buildTypePatternArguments = (ast) => {
14+
const messages = ast.body
15+
const options = messages
2416
.map(message => {
25-
const variables = messageVariables(message)
17+
const variablesName = messageVariablesName(message)
2618

27-
if (hasVariables(variables)) {
19+
if (hasVariables(variablesName)) {
2820
return dedent`
29-
T extends '${message.id}'
30-
? [{ ${wrapVariables(messageVariables(message)).join(',')} }]
21+
T extends '${message.id.name}'
22+
? [{ ${wrapVariables(variablesName).join(',')} }]
3123
`
3224
}
3325

3426
return dedent`
35-
T extends '${message.id}'
27+
T extends '${message.id.name}'
3628
? []
3729
`
3830
}).join(':\n')

src/index.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
import { FluentResource } from '@fluent/bundle'
1+
import { FluentParser } from '@fluent/syntax'
22
import dedent from 'dedent-js'
33
import buildHeader from './build-header'
44
import buildTypeMessagesKey from './build-type-messages-key'
55
import buildTypePatternArguments from './build-type-pattern-arguments'
66

77
const buildFluentTypeModule = (content) => {
8-
const resource = (new FluentResource(content)).body
8+
const parser = new FluentParser({ withSpans: false })
9+
const ast = parser.parse(content)
10+
911
const fluentTypeModule = dedent`
1012
${buildHeader()}
11-
${buildTypeMessagesKey(resource)}
12-
${buildTypePatternArguments(resource)}
13+
${buildTypeMessagesKey(ast)}
14+
${buildTypePatternArguments(ast)}
1315
`
1416

1517
return fluentTypeModule

0 commit comments

Comments
 (0)