Skip to content

Commit 663cb2a

Browse files
authored
fix: Fix tsconfig files handling (#190)
1 parent 256540c commit 663cb2a

File tree

4 files changed

+40
-4
lines changed

4 files changed

+40
-4
lines changed

src/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,11 @@ export class TypeScriptPlugin {
113113
}
114114

115115
get rootFileNames() {
116-
return typescript.extractFileNames(
116+
return _.union(typescript.extractFileNames(
117117
this.originalServicePath,
118118
this.serverless.service.provider.name,
119119
this.functions
120-
)
120+
), typescript.getTypescriptCompileFiles(this.originalServicePath))
121121
}
122122

123123
prepare() {

src/typescript.ts

+23-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ export async function run(fileNames: string[], options: ts.CompilerOptions): Pro
8282
if (!diagnostic.file) {
8383
console.log(diagnostic)
8484
}
85-
const {line, character} = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start)
85+
const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start)
8686
const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n')
8787
console.log(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`)
8888
})
@@ -148,3 +148,25 @@ export function getTypescriptConfig(
148148

149149
return makeDefaultTypescriptConfig()
150150
}
151+
152+
export function getTypescriptCompileFiles(
153+
cwd: string,
154+
): string[] {
155+
const configFilePath = path.join(cwd, 'tsconfig.json')
156+
157+
if (fs.existsSync(configFilePath)) {
158+
159+
const configFileText = fs.readFileSync(configFilePath).toString()
160+
const result = ts.parseConfigFileTextToJson(configFilePath, configFileText)
161+
if (result.error) {
162+
throw new Error(JSON.stringify(result.error))
163+
}
164+
165+
const configParseResult = ts.parseJsonConfigFileContent(result.config, ts.sys, path.dirname(configFilePath))
166+
if (configParseResult.errors.length > 0) {
167+
throw new Error(JSON.stringify(configParseResult.errors))
168+
}
169+
return configParseResult.fileNames.map(f => f.replace(cwd + '/', ''))
170+
}
171+
return []
172+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {getTypescriptCompileFiles} from '../src/typescript'
2+
import * as path from 'path'
3+
describe('getTypescriptCompileFiles', () => {
4+
it(`returns all typescript compile files including the tsconfig.json include`, () => {
5+
expect(
6+
getTypescriptCompileFiles(path.resolve(__dirname, '../'))
7+
).toEqual(
8+
['src/Serverless.d.ts', 'src/index.ts', 'src/typescript.ts', 'src/watchFiles.ts']
9+
)
10+
})
11+
})

tsconfig.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
"sourceMap": true,
77
"outDir": "dist"
88
},
9+
"include": [
10+
"src/**.ts"
11+
],
912
"exclude": [
1013
"node_modules"
1114
]
12-
}
15+
}

0 commit comments

Comments
 (0)