diff --git a/packages/conf/package.json b/packages/conf/package.json index ed09839bf..085b03502 100644 --- a/packages/conf/package.json +++ b/packages/conf/package.json @@ -34,5 +34,17 @@ ], "devDependencies": { "ts-node": "^10.9.1" + }, + "peerDependencies": { + "ts-node": ">=10", + "typescript": ">=4" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } } } diff --git a/packages/conf/src/index.ts b/packages/conf/src/index.ts index 9384eeff2..d0db93eaf 100644 --- a/packages/conf/src/index.ts +++ b/packages/conf/src/index.ts @@ -2,9 +2,8 @@ import type { GeneratorOptions } from "@babel/core" import path from "path" import fs from "fs" import chalk from "chalk" -import { cosmiconfigSync } from "cosmiconfig" +import { cosmiconfigSync, type LoaderSync } from "cosmiconfig" import { multipleValidOptions, validate } from "jest-validate" -import { TypeScriptLoader } from "cosmiconfig-typescript-loader"; export type CatalogFormat = "lingui" | "minimal" | "po" | "csv" @@ -104,6 +103,19 @@ function configExists(path) { return path && fs.existsSync(path) } +function TypeScriptLoader(): LoaderSync { + let loaderInstance: LoaderSync + return (filepath, content) => { + if (!loaderInstance) { + const { TypeScriptLoader } = + require("cosmiconfig-typescript-loader") as typeof import("cosmiconfig-typescript-loader") + loaderInstance = TypeScriptLoader() + } + + return loaderInstance(filepath, content) + } +} + export function getConfig({ cwd, configPath,