What is cosmiconfig-typescript-loader?
The cosmiconfig-typescript-loader package is designed to enable the loading of TypeScript files by cosmiconfig, a library used for finding and loading configuration files for Node.js projects. This loader allows cosmiconfig to read and parse configurations written in TypeScript, providing a seamless integration for projects that prefer TypeScript for configuration.
What are cosmiconfig-typescript-loader's main functionalities?
Loading TypeScript configuration files
This feature allows cosmiconfig to load and parse TypeScript files as configuration files. The code sample demonstrates how to configure cosmiconfig to use the cosmiconfig-typescript-loader for '.ts' files, enabling the loading of TypeScript configurations.
const { cosmiconfig } = require('cosmiconfig');
const { cosmiconfigTypescriptLoader } = require('cosmiconfig-typescript-loader');
const explorer = cosmiconfig('yourModuleName', {
searchPlaces: ['config.ts', 'otherConfig.ts'],
loaders: {
'.ts': cosmiconfigTypescriptLoader
}
});
explorer.search().then((result) => {
console.log(result.config);
});
Other packages similar to cosmiconfig-typescript-loader
ts-node
ts-node is a TypeScript execution engine and REPL for Node.js. It allows Node.js to execute TypeScript directly without precompilation. While ts-node is not specifically a configuration loader, it enables the execution of TypeScript files, which can indirectly support loading configurations written in TypeScript. Compared to cosmiconfig-typescript-loader, ts-node offers a broader scope of functionality beyond just configuration loading.
typescript-json-schema
typescript-json-schema generates JSON schemas from TypeScript types. This tool is useful for validating configuration objects against a schema defined in TypeScript. While it does not load configuration files directly, it complements the process by ensuring that loaded configurations adhere to a predefined schema. Compared to cosmiconfig-typescript-loader, typescript-json-schema focuses on validation rather than loading.
cosmiconfig-typescript-loader
⚙️🚀 TypeScript config file support for cosmiconfig
Usage
Simply add TypeScriptLoader
to the list of loaders for the .ts
file type, and await
loading:
import { cosmiconfig } from "cosmiconfig";
import { TypeScriptLoader } from "cosmiconfig-typescript-loader";
const moduleName = "module";
const explorer = cosmiconfig("test", {
searchPlaces: [
"package.json",
`.${moduleName}rc`,
`.${moduleName}rc.json`,
`.${moduleName}rc.yaml`,
`.${moduleName}rc.yml`,
`.${moduleName}rc.js`,
`.${moduleName}rc.ts`,
`.${moduleName}rc.cjs`,
`${moduleName}.config.js`,
`${moduleName}.config.ts`,
`${moduleName}.config.cjs`,
],
loaders: {
".ts": TypeScriptLoader(),
},
});
const cfg = await explorer.load("./");
Or more simply if you only support loading of a TypeScript based configuration file:
import { cosmiconfig } from "cosmiconfig";
import { TypeScriptLoader } from "cosmiconfig-typescript-loader";
const moduleName = "module";
const explorer = cosmiconfig("test", {
loaders: {
".ts": TypeScriptLoader(),
},
});
const cfg = await explorer.load("./amazing.config.ts");
Synchronously loading
With the release of Jiti 2, the synchronous loader has now been deprecated. It can still be used by using the TypeScriptLoaderSync
export:
import { cosmiconfig } from "cosmiconfig";
import { TypeScriptLoaderSync } from "cosmiconfig-typescript-loader";
const moduleName = "module";
const explorer = cosmiconfig("test", {
loaders: {
".ts": TypeScriptLoaderSync(),
},
});
const cfg = explorer.load("./amazing.config.ts");
@endemolshinegroup/cosmiconfig-typescript-loader
This package serves as a drop in replacement for @endemolshinegroup/cosmiconfig-typescript-loader
. At the time of publishing this, endemolshinegroup
is not maintaining the original package. I can only assume this is to do with the fact that Endemol Shine Group was purchased and absorbed by another business. This discontinuation of development efforts towards the original package left any open issues and pull requests unresolved.
This new package resolves the following original issues:
#134
: "Doesn't work with Cosmiconfig sync API"#147
: "doesn't provide typescript, requested by ts-node"#155
: "Misleading TypeScriptCompileError when user's tsconfig.json "module" is set to "es2015""