Skip to content

Commit 8da122d

Browse files
author
Timofey
authored
fix(conf): proper typescript cosmiconfig loader (#1386)
1 parent db5d3c3 commit 8da122d

5 files changed

Lines changed: 71 additions & 80 deletions

File tree

packages/conf/package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
"dependencies": {
2222
"@babel/runtime": "^7.11.2",
2323
"chalk": "^4.1.0",
24-
"cosmiconfig": "^7.0.0",
25-
"cosmiconfig-typescript-loader": "^2.0.1",
24+
"cosmiconfig": "^8.0.0",
25+
"cosmiconfig-typescript-loader": "^4.3.0",
2626
"jest-validate": "^26.5.2",
2727
"lodash.get": "^4.4.2"
2828
},
@@ -31,5 +31,8 @@
3131
"README.md",
3232
"index.js",
3333
"index.d.ts"
34-
]
34+
],
35+
"devDependencies": {
36+
"ts-node": "^10.9.1"
37+
}
3538
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"locales": ["en-US"],
3+
"fallbackLocale": "en"
4+
}

packages/conf/src/index.test.ts

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import path from "path"
2-
import mockFs from "mock-fs"
32
import { validate } from "jest-validate"
43
import {
54
getConfig,
@@ -143,34 +142,24 @@ describe("@lingui/conf", function () {
143142
})
144143
})
145144

146-
it("loads TypeScript config", function () {
147-
// hide validation warning about missing locales
148-
mockConsole(() => {
149-
const config = getConfig({
150-
configPath: path.resolve(
151-
__dirname,
152-
path.join("fixtures", "valid", "custom.config.ts")
153-
),
154-
})
155-
expect(config.locales).toEqual(["pl"])
145+
it("loads TypeScript config", () => {
146+
const config = getConfig({
147+
configPath: path.resolve(
148+
__dirname,
149+
path.join("fixtures", "valid", "custom.config.ts")
150+
),
156151
})
152+
expect(config.locales).toEqual(["pl"])
157153
})
158154

159155
describe("fallbackLocales logic", () => {
160-
afterEach(() => {
161-
mockFs.restore()
162-
})
163-
164156
it("if fallbackLocale is defined, we use the default one on fallbackLocales", () => {
165-
mockFs({
166-
".linguirc": JSON.stringify({
167-
locales: ["en-US"],
168-
fallbackLocale: "en",
169-
}),
170-
})
171157
mockConsole((console) => {
172158
const config = getConfig({
173-
configPath: ".linguirc",
159+
configPath: path.resolve(
160+
__dirname,
161+
path.join("fixtures", "fallback-locales", ".linguirc")
162+
),
174163
})
175164
expect(config.fallbackLocales.default).toEqual("en")
176165
expect(getConsoleMockCalls(console.warn)).toMatchSnapshot()

packages/conf/src/index.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import fs from "fs"
44
import chalk from "chalk"
55
import { cosmiconfigSync } from "cosmiconfig"
66
import { multipleValidOptions, validate } from "jest-validate"
7+
import { TypeScriptLoader } from "cosmiconfig-typescript-loader";
78

89
export type CatalogFormat = "lingui" | "minimal" | "po" | "csv"
910

@@ -127,7 +128,7 @@ export function getConfig({
127128
`${moduleName}.config.js`,
128129
],
129130
loaders: {
130-
".ts": TypeScriptLoader,
131+
".ts": TypeScriptLoader(),
131132
},
132133
})
133134

@@ -576,12 +577,3 @@ export function catalogMigration(
576577

577578
const pipe = (...functions: Array<Function>) => (args: any): any =>
578579
functions.reduce((arg, fn) => fn(arg), args)
579-
580-
/** Typescript loader using just typescript API and eval(), instead of using ts-node/register which is slower */
581-
function TypeScriptLoader(filePath: string) {
582-
const tsc = require("typescript")
583-
const fileContent = fs.readFileSync(filePath, "utf-8")
584-
const { outputText } = tsc.transpileModule(fileContent, { compilerOptions: { module: tsc.ModuleKind.CommonJS }});
585-
const configFileParsed = eval(outputText)
586-
return configFileParsed
587-
}

yarn.lock

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1482,16 +1482,11 @@
14821482
chalk "^4.0.0"
14831483

14841484
"@jridgewell/resolve-uri@^3.0.3":
1485-
version "3.0.7"
1486-
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe"
1487-
integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==
1488-
1489-
"@jridgewell/sourcemap-codec@^1.4.10":
1490-
version "1.4.13"
1491-
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c"
1492-
integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==
1485+
version "3.1.0"
1486+
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
1487+
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
14931488

1494-
"@jridgewell/sourcemap-codec@^1.4.13":
1489+
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
14951490
version "1.4.14"
14961491
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
14971492
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
@@ -2784,24 +2779,24 @@
27842779
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
27852780

27862781
"@tsconfig/node10@^1.0.7":
2787-
version "1.0.8"
2788-
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
2789-
integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==
2782+
version "1.0.9"
2783+
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
2784+
integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
27902785

27912786
"@tsconfig/node12@^1.0.7":
2792-
version "1.0.9"
2793-
resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"
2794-
integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==
2787+
version "1.0.11"
2788+
resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
2789+
integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
27952790

27962791
"@tsconfig/node14@^1.0.0":
2797-
version "1.0.1"
2798-
resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"
2799-
integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==
2792+
version "1.0.3"
2793+
resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
2794+
integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
28002795

28012796
"@tsconfig/node16@^1.0.2":
2802-
version "1.0.2"
2803-
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
2804-
integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
2797+
version "1.0.3"
2798+
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
2799+
integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
28052800

28062801
"@types/aria-query@^4.2.0":
28072802
version "4.2.0"
@@ -3512,9 +3507,9 @@ acorn@^7.1.1, acorn@^7.4.0:
35123507
integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
35133508

35143509
acorn@^8.4.1:
3515-
version "8.7.1"
3516-
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
3517-
integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
3510+
version "8.8.2"
3511+
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
3512+
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
35183513

35193514
agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0:
35203515
version "4.3.0"
@@ -3697,6 +3692,11 @@ argparse@^1.0.7:
36973692
dependencies:
36983693
sprintf-js "~1.0.2"
36993694

3695+
argparse@^2.0.1:
3696+
version "2.0.1"
3697+
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
3698+
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
3699+
37003700
argv@0.0.2:
37013701
version "0.0.2"
37023702
resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab"
@@ -4996,13 +4996,10 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
49964996
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
49974997
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
49984998

4999-
cosmiconfig-typescript-loader@^2.0.1:
5000-
version "2.0.1"
5001-
resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.1.tgz#5622bb1eb87d293570bcc3a57f406940e0960113"
5002-
integrity sha512-B9s6sX/omXq7I6gC6+YgLmrBFMJhPWew7ty/X5Tuwtd2zOSgWaUdXjkuVwbe3qqcdETo60+1nSVMekq//LIXVA==
5003-
dependencies:
5004-
cosmiconfig "^7"
5005-
ts-node "^10.8.0"
4999+
cosmiconfig-typescript-loader@^4.3.0:
5000+
version "4.3.0"
5001+
resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073"
5002+
integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==
50065003

50075004
cosmiconfig@^5.1.0:
50085005
version "5.2.1"
@@ -5025,27 +5022,26 @@ cosmiconfig@^6.0.0:
50255022
path-type "^4.0.0"
50265023
yaml "^1.7.2"
50275024

5028-
cosmiconfig@^7:
5029-
version "7.0.1"
5030-
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d"
5031-
integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
5025+
cosmiconfig@^7.0.0:
5026+
version "7.0.0"
5027+
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
5028+
integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
50325029
dependencies:
50335030
"@types/parse-json" "^4.0.0"
50345031
import-fresh "^3.2.1"
50355032
parse-json "^5.0.0"
50365033
path-type "^4.0.0"
50375034
yaml "^1.10.0"
50385035

5039-
cosmiconfig@^7.0.0:
5040-
version "7.0.0"
5041-
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
5042-
integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
5036+
cosmiconfig@^8.0.0:
5037+
version "8.0.0"
5038+
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.0.0.tgz#e9feae014eab580f858f8a0288f38997a7bebe97"
5039+
integrity sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==
50435040
dependencies:
5044-
"@types/parse-json" "^4.0.0"
50455041
import-fresh "^3.2.1"
5042+
js-yaml "^4.1.0"
50465043
parse-json "^5.0.0"
50475044
path-type "^4.0.0"
5048-
yaml "^1.10.0"
50495045

50505046
create-ecdh@^4.0.0:
50515047
version "4.0.4"
@@ -8291,6 +8287,13 @@ js-yaml@3.14.0, js-yaml@^3.10.0, js-yaml@^3.13.1:
82918287
argparse "^1.0.7"
82928288
esprima "^4.0.0"
82938289

8290+
js-yaml@^4.1.0:
8291+
version "4.1.0"
8292+
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
8293+
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
8294+
dependencies:
8295+
argparse "^2.0.1"
8296+
82948297
jsbn@~0.1.0:
82958298
version "0.1.1"
82968299
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -12685,10 +12688,10 @@ ts-jest@^26.4.1:
1268512688
semver "7.x"
1268612689
yargs-parser "20.x"
1268712690

12688-
ts-node@^10.8.0:
12689-
version "10.8.0"
12690-
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.0.tgz#3ceb5ac3e67ae8025c1950626aafbdecb55d82ce"
12691-
integrity sha512-/fNd5Qh+zTt8Vt1KbYZjRHCE9sI5i7nqfD/dzBBRDeVXZXS6kToW6R7tTU6Nd4XavFs0mAVCg29Q//ML7WsZYA==
12691+
ts-node@^10.9.1:
12692+
version "10.9.1"
12693+
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
12694+
integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
1269212695
dependencies:
1269312696
"@cspotcode/source-map-support" "^0.8.0"
1269412697
"@tsconfig/node10" "^1.0.7"

0 commit comments

Comments
 (0)