Skip to content

Commit 3bcbd37

Browse files
committed
refactor: minor optimization
1 parent f7df9ed commit 3bcbd37

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/loaders.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,19 @@ import { Language, Message, MessageKey, Messages, PluralKey } from "./Messages"
2121

2222
export type MessagesObject = {[messageKey in MessageKey]: string | {[pluralKey: string]: string}}
2323

24+
export type MessagesByLanguage = {[key in Language]: MessagesObject}
25+
2426
/**
2527
* An implementation of `MessageLoader` that "loads" `Messages` from given Javascript objects.
2628
* This implemenation is especially usefull when loading messages from JSON files that are included
2729
* during Javascript assembly.
2830
*/
2931
export class ObjectMessageLoader implements MessageLoader {
30-
constructor(private readonly defaultMessages: MessagesObject, private readonly messagesByLanguage: { [key in Language]: MessagesObject }) { }
32+
private readonly messagesByLanguage: MessagesByLanguage
33+
34+
constructor(private readonly defaultMessages: MessagesObject, messagesByLanguage?: MessagesByLanguage) {
35+
this.messagesByLanguage = messagesByLanguage ?? {}
36+
}
3137

3238
loadDefaultMessages(): Promise<Messages> {
3339
return Promise.resolve(this.transformMessagesObject(this.defaultMessages))
@@ -122,7 +128,10 @@ export class JsonMessageLoaderError extends Error {
122128
* i.e. `"1"` with their numeric keys.
123129
*/
124130
export class JsonMessageLoader implements MessageLoader {
125-
constructor(private readonly defaultsLoader: JsonSource, private readonly localizedLoader: JsonSource) { }
131+
private readonly localizedLoader: JsonSource
132+
constructor(private readonly defaultsLoader: JsonSource, localizedLoader?: JsonSource) {
133+
this.localizedLoader = localizedLoader ?? this.defaultsLoader
134+
}
126135

127136
loadDefaultMessages(): Promise<Messages> {
128137
return this.parseJson(this.defaultsLoader())

test/loaders.test.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,23 @@
1+
/*
2+
* This file is part of wecco.
3+
*
4+
* Copyright (c) 2021 Alexander Metzner.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
119
import { expect } from "iko"
2-
import { ObjectMessageLoader, CascadingMessageLoader, Messages } from ".."
3-
import { JsonMessageLoader } from "../src/loaders"
20+
import { ObjectMessageLoader, CascadingMessageLoader, JsonMessageLoader, Messages } from ".."
421

522
describe("ObjectMessageLoader", () => {
623
const defaultMessages = {

0 commit comments

Comments
 (0)