diff --git a/config/scripts/ci-unit-indirect-inputs.mjs b/config/scripts/ci-unit-indirect-inputs.mjs index 31d2c560b0d..57d188b96dc 100644 --- a/config/scripts/ci-unit-indirect-inputs.mjs +++ b/config/scripts/ci-unit-indirect-inputs.mjs @@ -2,7 +2,7 @@ import ts from 'typescript-api' import { literalString, propertyName, unwrap } from './static-module-specifiers.mjs' const INDIRECT_NAME = - /^(?:readFile\w*|readdir\w*|glob(?:Sync|Stream|Iterate|SyncIterate|StreamSync)?|spawn(?:Sync)?|execFile(?:Sync)?|execSync|runProcess\w*|fork|Worker|createRequire|getBuiltinModule|eval|Function)$/ + /^(?:readFile\w*|readdir\w*|glob(?:Sync|Stream|Iterate|SyncIterate|StreamSync)?|spawn(?:Sync)?|execFile(?:Sync)?|execSync|runProcess\w*|fork|Worker|createRequire|getBuiltinModule|create(?:Incremental|Watch|EmitAndSemanticDiagnosticsBuilder|SemanticDiagnosticsBuilder)?Program|createSolutionBuilder(?:WithWatch)?|createLanguageService|getParsedCommandLineOfConfigFile|parseJson(?:SourceFile)?ConfigFileContent|readConfigFile|resolveModuleName|resolveTypeReferenceDirective|readDirectory|eval|Function)$/ const INDIRECT_CANDIDATE = new RegExp( `\\b${INDIRECT_NAME.source.slice(1, -1)}\\b|\\b(?:import|require)\\s*\\(|\\bURL\\b` ) diff --git a/config/scripts/ci-unit-indirect-inputs.test.mjs b/config/scripts/ci-unit-indirect-inputs.test.mjs index e15f7573f11..ee930f5e5a1 100644 --- a/config/scripts/ci-unit-indirect-inputs.test.mjs +++ b/config/scripts/ci-unit-indirect-inputs.test.mjs @@ -23,7 +23,8 @@ it.each([ 'export interface Config { spawnToken: string; Worker: string }', 'export type Config = { readFile: string; global: boolean }', "export const url = new URL('https://example.test/data')", - 'export const spawnToken = "opaque-token"' + 'export const spawnToken = "opaque-token"', + "const ast = ts.createSourceFile('source.ts', source, target)" ])('does not retain unrelated tests for syntax that loads no repository inputs: %s', (source) => { expect(selected(source)).toEqual(['src/changed.test.ts']) }) @@ -42,6 +43,21 @@ it.each([ "const read = fs['readFileSync']; read(path)", 'const execute = runProcess; execute(command)', 'const load = process.getBuiltinModule; load(moduleName)', + 'const program = ts.createProgram(options)', + 'const program = ts.createIncrementalProgram(options)', + 'const program = ts.createWatchProgram(options)', + 'const config = ts.getParsedCommandLineOfConfigFile(path, {}, ts.sys)', + 'const config = ts.parseJsonConfigFileContent(config, ts.sys, root)', + 'const config = ts.parseJsonSourceFileConfigFileContent(config, ts.sys, root)', + 'const config = ts.readConfigFile(path, ts.sys.readFile)', + 'const program = ts.createEmitAndSemanticDiagnosticsBuilderProgram(options)', + 'const program = ts.createSemanticDiagnosticsBuilderProgram(options)', + 'const builder = ts.createSolutionBuilder(host, roots, options)', + 'const builder = ts.createSolutionBuilderWithWatch(host, roots, options)', + 'const service = ts.createLanguageService(host)', + 'const resolved = ts.resolveModuleName(name, file, options, host)', + 'const resolved = ts.resolveTypeReferenceDirective(name, file, options, host)', + 'const files = ts.sys.readDirectory(directory)', 'eval(source)', 'const execute = new Function(source); execute()', 'spawn( @@@'