UNPKG

@jfconley/di-compiler

Version:

A Custom Transformer for Typescript that enables compile-time Dependency Injection

1 lines 7.07 kB
{"version":3,"file":"loader.cjs","sources":["../../src/loader/shared.ts","../../src/loader/cjs.ts"],"sourcesContent":["import {getTsconfig, parseTsconfig, type TsConfigResult, type TsConfigJsonResolved} from \"get-tsconfig\";\nimport type {MaybeArray} from \"helpertypes\";\nimport {FileCache} from \"../transformer/cache.js\";\nimport type {TransformOptions, TransformResult} from \"../transformer/transform-options\";\nimport type {TS} from \"../type/type\";\nimport {booleanize} from \"../util/util.js\";\n\nexport const ENV_VARIABLE_TSCONFIG_PATH = \"DI_COMPILER_TSCONFIG_PATH\";\nexport const ENV_VARIABLE_IDENTIFIER = \"DI_COMPILER_IDENTIFIER\";\nexport const ENV_VARIABLE_DISABLE_CACHE = \"DI_COMPILER_DISABLE_CACHE\";\n// Only these formats have type information that can be transpiled with DICompiler\nexport const ALLOWED_EXTENSIONS = new Set([\".ts\", \".mts\", \".cts\"]);\n\ninterface DiTsconfigOptions {\n\t/**\n\t * The identifier(s) that should be considered instances of DIContainer. When not given, an attempt will be\n\t * made to evaluate and resolve the value of identifiers to check if they are instances of DIContainer.\n\t * Providing one or more identifiers up front can be considered an optimization, as this step can be skipped that way\n\t */\n\tidentifier?: MaybeArray<string>;\n\tdisableCache: boolean;\n}\n\ninterface ExtendedTsconfig {\n\tdi?: Partial<DiTsconfigOptions>;\n\tcompilerOptions: TS.CompilerOptions;\n}\n\nexport function resolveOptions(typescript: typeof TS): Partial<TransformOptions> {\n\tconst tsconfig = upgradeTsconfig(\n\t\ttypescript,\n\t\tprocess.env[ENV_VARIABLE_TSCONFIG_PATH] != null\n\t\t\t? {\n\t\t\t\t\tpath: process.env[ENV_VARIABLE_TSCONFIG_PATH],\n\t\t\t\t\tconfig: parseTsconfig(process.env[ENV_VARIABLE_TSCONFIG_PATH])\n\t\t\t }\n\t\t\t: getTsconfig() ?? undefined\n\t);\n\n\tlet identifier =\n\t\tprocess.env[ENV_VARIABLE_IDENTIFIER]?.split(\",\")\n\t\t\t.map(item => item.trim())\n\t\t\t.filter(item => item.length > 0) ?? tsconfig.di?.identifier;\n\n\tif (Array.isArray(identifier) && identifier.length === 1) {\n\t\tidentifier = identifier[0];\n\t}\n\n\tconst disableCache = process.env[ENV_VARIABLE_DISABLE_CACHE] == null ? tsconfig.di?.disableCache ?? false : booleanize(process.env[ENV_VARIABLE_DISABLE_CACHE]);\n\n\treturn {\n\t\tidentifier,\n\n\t\tcompilerOptions: tsconfig?.compilerOptions,\n\t\tcache: disableCache ? new Map<string, TransformResult>() : new FileCache<TransformResult>(),\n\t\tprinter: typescript.createPrinter()\n\t};\n}\n\nfunction upgradeTsconfig(typescript: typeof TS, input?: TsConfigResult | TsConfigJsonResolved): ExtendedTsconfig {\n\tif (input == null) {\n\t\treturn {\n\t\t\tcompilerOptions: overrideCompilerOptions(typescript.getDefaultCompilerOptions())\n\t\t};\n\t}\n\tconst inputDiOptions = \"config\" in input ? (input.config as {di?: Partial<DiTsconfigOptions>}).di : (input as {di?: Partial<DiTsconfigOptions>}).di;\n\tconst inputCompilerOptions = \"config\" in input ? input.config.compilerOptions : input.compilerOptions;\n\tif (inputCompilerOptions == null) {\n\t\treturn {\n\t\t\tdi: inputDiOptions,\n\t\t\tcompilerOptions: overrideCompilerOptions(typescript.getDefaultCompilerOptions())\n\t\t};\n\t}\n\treturn {\n\t\tdi: inputDiOptions,\n\t\tcompilerOptions: overrideCompilerOptions(typescript.convertCompilerOptionsFromJson(inputCompilerOptions, inputCompilerOptions.baseUrl ?? \".\").options)\n\t};\n}\n\nfunction overrideCompilerOptions(input: TS.CompilerOptions): TS.CompilerOptions {\n\treturn {\n\t\t...input,\n\t\t// We always want to inline source maps when DICompiler is used as a loader\n\t\t...(input.sourceMap === true ? {inlineSourceMap: true} : {}),\n\t\tpreserveValueImports: true\n\t};\n}\n","import typescript from \"typescript\";\nimport {transform} from \"../transformer/transform.js\";\nimport pirates from \"pirates\";\nimport {ALLOWED_EXTENSIONS, resolveOptions} from \"./shared\";\n\nconst transformOptions = resolveOptions(typescript);\n\npirates.addHook(\n\t(code, filename) =>\n\t\ttransform(code.toString(), filename, {\n\t\t\t...transformOptions,\n\t\t\ttypescript\n\t\t}).code,\n\t{exts: [...ALLOWED_EXTENSIONS]}\n);\n"],"names":["parseTsconfig","getTsconfig","booleanize","FileCache","typescript","transform"],"mappings":"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"}