Skip to content

Commit 00c1890

Browse files
committed
🆙 update: fix squeezer
1 parent 4a0fb4d commit 00c1890

File tree

2 files changed

+40
-38
lines changed

2 files changed

+40
-38
lines changed

src/squeezer.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,29 @@ const debug = Debug('vue-i18n-locale-message:squeezer')
99
export default function sqeeze (basePath: string, files: SFCFileInfo[]): LocaleMessages {
1010
const descriptors = reflectSFCDescriptor(basePath, files)
1111

12-
const messages: LocaleMessages = {}
13-
descriptors.forEach(descriptor => {
12+
return descriptors.reduce((messages, descriptor) => {
1413
const blockMessages = squeezeFromI18nBlock(descriptor.customBlocks)
1514
const locales = Object.keys(blockMessages)
16-
const collects: LocaleMessages = locales.reduce((messages, locale) => {
17-
const ret = descriptor.hierarchy.reduce((messages, key) => {
18-
return Object.assign({}, { [key]: messages })
19-
}, blockMessages[locale])
20-
return Object.assign(messages, { [locale]: ret })
21-
}, {})
22-
debug('collects', collects)
23-
24-
locales.forEach(locale => {
25-
messages[locale] = messages[locale] || {}
26-
messages[locale] = Object.assign(messages[locale], collects[locale])
27-
})
28-
})
29-
30-
return messages
15+
return locales.reduce((messages, locale) => {
16+
if (!messages[locale]) {
17+
messages[locale] = {}
18+
}
19+
const localeMessages = messages[locale]
20+
const localeBlockMessages = blockMessages[locale]
21+
let target: any = localeMessages
22+
const hierarchy = descriptor.hierarchy.concat()
23+
while (hierarchy.length >= 0) {
24+
const key = hierarchy.shift()
25+
if (!key) { break }
26+
if (!target[key]) {
27+
target[key] = {}
28+
}
29+
target = target[key]
30+
}
31+
Object.assign(target, localeBlockMessages)
32+
return messages
33+
}, messages)
34+
}, {} as LocaleMessages)
3135
}
3236

3337
function squeezeFromI18nBlock (blocks: SFCBlock[]): LocaleMessages {

test/__snapshots__/squeezer.test.ts.snap

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ Object {
66
"App": Object {
77
"title": "Application",
88
},
9-
"Modal": Object {
10-
"components": Object {
9+
"components": Object {
10+
"Modal": Object {
1111
"cancel": "Cancel",
1212
"ok": "OK",
1313
},
14-
},
15-
"RankingTable": Object {
1614
"nest": Object {
17-
"components": Object {
15+
"RankingTable": Object {
1816
"headers": Object {
1917
"name": "Name",
2018
"rank": "Rank",
@@ -28,37 +26,37 @@ Object {
2826
"App": Object {
2927
"title": "アプリケーション",
3028
},
31-
"Login": Object {
32-
"pages": Object {
29+
"components": Object {
30+
"Modal": Object {
31+
"cancel": "キャンセル",
32+
"ok": "OK",
33+
},
34+
},
35+
"pages": Object {
36+
"Login": Object {
3337
"button": "ログイン",
3438
"confirm": "パスワードの確認入力",
3539
"id": "ユーザーID",
3640
"passowrd": "パスワード",
3741
},
3842
},
39-
"Modal": Object {
40-
"components": Object {
41-
"cancel": "キャンセル",
42-
"ok": "OK",
43-
},
44-
},
4543
},
4644
}
4745
`;
4846

4947
exports[`json5 1`] = `
5048
Object {
5149
"en": Object {
52-
"Modal": Object {
53-
"components": Object {
50+
"components": Object {
51+
"Modal": Object {
5452
"cancel": "Cancel",
5553
"ok": "OK",
5654
},
5755
},
5856
},
5957
"ja": Object {
60-
"Modal": Object {
61-
"components": Object {
58+
"components": Object {
59+
"Modal": Object {
6260
"cancel": "キャンセル",
6361
"ok": "OK",
6462
},
@@ -70,16 +68,16 @@ Object {
7068
exports[`yaml 1`] = `
7169
Object {
7270
"en": Object {
73-
"Modal": Object {
74-
"components": Object {
71+
"components": Object {
72+
"Modal": Object {
7573
"cancel": "Cancel",
7674
"ok": "OK",
7775
},
7876
},
7977
},
8078
"ja": Object {
81-
"Modal": Object {
82-
"components": Object {
79+
"components": Object {
80+
"Modal": Object {
8381
"cancel": "キャンセル",
8482
"ok": "OK",
8583
},

0 commit comments

Comments
 (0)