UNPKG

10.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","names":["metaSearchPlaces","defaultLoaders","Object","freeze","loaders","loadJs","loadJson","loadYaml","noExt","identity","x","replaceMetaPlaceholders","paths","moduleName","map","path","replace","getExplorerOptions","options","metaExplorer","ExplorerSync","packageProp","stopDir","process","cwd","searchPlaces","ignoreEmptySearchPlaces","usePackagePropInConfigFiles","transform","cache","metaConfigFilePath","metaConfig","searchSync","normalizeOptions","config","Error","overrideOptions","filepath","mergedOptions","cosmiconfig","normalizedOptions","explorer","Explorer","search","bind","load","clearLoadCache","clearSearchCache","clearCaches","cosmiconfigSync","explorerSync","loadSync","defaults","os","homedir","assign"],"sources":["../src/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport os from 'os';\nimport { Explorer } from './Explorer';\nimport { ExplorerSync } from './ExplorerSync';\nimport { loaders } from './loaders';\nimport {\n Config,\n CosmiconfigResult,\n ExplorerOptions,\n ExplorerOptionsSync,\n Loaders,\n LoadersSync,\n} from './types';\n\ntype LoaderResult = Config | null;\nexport type Loader =\n | ((filepath: string, content: string) => Promise<LoaderResult>)\n | LoaderSync;\nexport type LoaderSync = (filepath: string, content: string) => LoaderResult;\n\nexport type Transform =\n | ((CosmiconfigResult: CosmiconfigResult) => Promise<CosmiconfigResult>)\n | TransformSync;\n\nexport type TransformSync = (\n CosmiconfigResult: CosmiconfigResult,\n) => CosmiconfigResult;\n\ninterface OptionsBase {\n packageProp?: string | Array<string>;\n searchPlaces?: Array<string>;\n ignoreEmptySearchPlaces?: boolean;\n stopDir?: string;\n cache?: boolean;\n}\n\nexport interface Options extends OptionsBase {\n loaders?: Loaders;\n transform?: Transform;\n}\n\nexport interface OptionsSync extends OptionsBase {\n loaders?: LoadersSync;\n transform?: TransformSync;\n}\n\nexport interface PublicExplorerBase {\n clearLoadCache: () => void;\n clearSearchCache: () => void;\n clearCaches: () => void;\n}\n\nexport interface PublicExplorer extends PublicExplorerBase {\n search: (searchFrom?: string) => Promise<CosmiconfigResult>;\n load: (filepath: string) => Promise<CosmiconfigResult>;\n}\n\nexport interface PublicExplorerSync extends PublicExplorerBase {\n search: (searchFrom?: string) => CosmiconfigResult;\n load: (filepath: string) => CosmiconfigResult;\n}\n\n// this needs to be hardcoded, as this is intended for end users, who can't supply options at this point\nexport const metaSearchPlaces = [\n 'package.json',\n '.config.json',\n '.config.yaml',\n '.config.yml',\n '.config.js',\n '.config.cjs',\n];\n\n// do not allow mutation of default loaders. Make sure it is set inside options\nconst defaultLoaders = Object.freeze({\n '.cjs': loaders.loadJs,\n '.js': loaders.loadJs,\n '.json': loaders.loadJson,\n '.yaml': loaders.loadYaml,\n '.yml': loaders.loadYaml,\n noExt: loaders.loadYaml,\n} as const);\n\nconst identity: TransformSync = function identity(x) {\n return x;\n};\n\nfunction replaceMetaPlaceholders(\n paths: Array<string>,\n moduleName: string,\n): Array<string> {\n return paths.map((path) => path.replace('{name}', moduleName));\n}\n\nfunction getExplorerOptions(\n moduleName: string,\n options: OptionsSync,\n): ExplorerOptionsSync;\nfunction getExplorerOptions(\n moduleName: string,\n options: Options,\n): ExplorerOptions;\nfunction getExplorerOptions(\n moduleName: string,\n options: Options | OptionsSync,\n): ExplorerOptions | ExplorerOptionsSync {\n const metaExplorer = new ExplorerSync({\n packageProp: 'cosmiconfig',\n stopDir: process.cwd(),\n searchPlaces: metaSearchPlaces,\n ignoreEmptySearchPlaces: false,\n usePackagePropInConfigFiles: true,\n loaders: defaultLoaders,\n transform: identity,\n cache: true,\n metaConfigFilePath: null,\n });\n const metaConfig = metaExplorer.searchSync();\n\n if (!metaConfig) {\n return normalizeOptions(moduleName, options);\n }\n\n if (metaConfig.config?.loaders) {\n throw new Error('Can not specify loaders in meta config file');\n }\n\n const overrideOptions = metaConfig.config ?? {};\n\n if (overrideOptions.searchPlaces) {\n overrideOptions.searchPlaces = replaceMetaPlaceholders(\n overrideOptions.searchPlaces,\n moduleName,\n );\n }\n\n overrideOptions.metaConfigFilePath = metaConfig.filepath;\n\n const mergedOptions = { ...options, ...overrideOptions };\n\n return normalizeOptions(moduleName, mergedOptions);\n}\n\nfunction cosmiconfig(\n moduleName: string,\n options: Options = {},\n): PublicExplorer {\n const normalizedOptions: ExplorerOptions = getExplorerOptions(\n moduleName,\n options,\n );\n\n const explorer = new Explorer(normalizedOptions);\n\n return {\n search: explorer.search.bind(explorer),\n load: explorer.load.bind(explorer),\n clearLoadCache: explorer.clearLoadCache.bind(explorer),\n clearSearchCache: explorer.clearSearchCache.bind(explorer),\n clearCaches: explorer.clearCaches.bind(explorer),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction cosmiconfigSync(\n moduleName: string,\n options: OptionsSync = {},\n): PublicExplorerSync {\n const normalizedOptions: ExplorerOptionsSync = getExplorerOptions(\n moduleName,\n options,\n );\n\n const explorerSync = new ExplorerSync(normalizedOptions);\n\n return {\n search: explorerSync.searchSync.bind(explorerSync),\n load: explorerSync.loadSync.bind(explorerSync),\n clearLoadCache: explorerSync.clearLoadCache.bind(explorerSync),\n clearSearchCache: explorerSync.clearSearchCache.bind(explorerSync),\n clearCaches: explorerSync.clearCaches.bind(explorerSync),\n };\n}\n\nfunction normalizeOptions(\n moduleName: string,\n options: OptionsSync,\n): ExplorerOptionsSync;\nfunction normalizeOptions(\n moduleName: string,\n options: Options,\n): ExplorerOptions;\nfunction normalizeOptions(\n moduleName: string,\n options: Options | OptionsSync,\n): ExplorerOptions | ExplorerOptionsSync {\n const defaults: ExplorerOptions | ExplorerOptionsSync = {\n packageProp: moduleName,\n searchPlaces: [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.cjs`,\n `.config/${moduleName}rc`,\n `.config/${moduleName}rc.json`,\n `.config/${moduleName}rc.yaml`,\n `.config/${moduleName}rc.yml`,\n `.config/${moduleName}rc.js`,\n `.config/${moduleName}rc.cjs`,\n `${moduleName}.config.js`,\n `${moduleName}.config.cjs`,\n ],\n ignoreEmptySearchPlaces: true,\n stopDir: os.homedir(),\n cache: true,\n transform: identity,\n loaders: defaultLoaders,\n metaConfigFilePath: null,\n };\n\n let loaders = {\n ...defaults.loaders,\n };\n\n if (options.loaders) {\n Object.assign(loaders, options.loaders);\n }\n\n return {\n ...defaults,\n ...options,\n loaders,\n };\n}\n\nexport { cosmiconfig, cosmiconfigSync, defaultLoaders };\n"],"mappings":"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"}
\No newline at end of file