diff --git a/src/index.ts b/src/index.ts index a249ce58..e0fa32fb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -89,11 +89,11 @@ export class TypeScriptPlugin { } get rootFileNames() { - return typescript.extractFileNames( + return _.union(typescript.extractFileNames( this.originalServicePath, this.serverless.service.provider.name, this.functions - ) + ), typescript.getTypescriptCompileFiles(this.originalServicePath)) } prepare() { diff --git a/src/typescript.ts b/src/typescript.ts index 22f7354a..182822e1 100644 --- a/src/typescript.ts +++ b/src/typescript.ts @@ -82,7 +82,7 @@ export async function run(fileNames: string[], options: ts.CompilerOptions): Pro if (!diagnostic.file) { console.log(diagnostic) } - const {line, character} = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start) + const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start) const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n') console.log(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`) }) @@ -144,3 +144,25 @@ export function getTypescriptConfig( return makeDefaultTypescriptConfig() } + +export function getTypescriptCompileFiles( + cwd: string, +): string[] { + const configFilePath = path.join(cwd, 'tsconfig.json') + + if (fs.existsSync(configFilePath)) { + + const configFileText = fs.readFileSync(configFilePath).toString() + const result = ts.parseConfigFileTextToJson(configFilePath, configFileText) + if (result.error) { + throw new Error(JSON.stringify(result.error)) + } + + const configParseResult = ts.parseJsonConfigFileContent(result.config, ts.sys, path.dirname(configFilePath)) + if (configParseResult.errors.length > 0) { + throw new Error(JSON.stringify(configParseResult.errors)) + } + return configParseResult.fileNames.map(f => f.replace(cwd + '/', '')) + } + return [] +} \ No newline at end of file diff --git a/tests/typescript.getTypescriptCompileFiles.test.ts b/tests/typescript.getTypescriptCompileFiles.test.ts new file mode 100644 index 00000000..889e0555 --- /dev/null +++ b/tests/typescript.getTypescriptCompileFiles.test.ts @@ -0,0 +1,11 @@ +import {getTypescriptCompileFiles} from '../src/typescript' +import * as path from 'path' +describe('getTypescriptCompileFiles', () => { + it(`returns all typescript compile files including the tsconfig.json include`, () => { + expect( + getTypescriptCompileFiles(path.resolve(__dirname, '../')) + ).toEqual( + ['src/Serverless.d.ts', 'src/index.ts', 'src/typescript.ts', 'src/watchFiles.ts'] + ) + }) +}) \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 4eb97c5d..5427fbec 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,7 +6,10 @@ "sourceMap": true, "outDir": "dist" }, + "include": [ + "src/**.ts" + ], "exclude": [ "node_modules" ] -} +} \ No newline at end of file