-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(scripts): make current tsc just task to work with ts aliases
- Loading branch information
Showing
1 changed file
with
52 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,48 +1,89 @@ | ||
import fs from 'fs'; | ||
import * as path from 'path'; | ||
import { tscTask, argv } from 'just-scripts'; | ||
import { tscTask, argv, TscTaskOptions, resolveCwd, logger } from 'just-scripts'; | ||
import { Arguments } from 'yargs'; | ||
|
||
interface JustArgs extends Arguments { | ||
production?: boolean; | ||
} | ||
|
||
const libPath = path.resolve(process.cwd(), 'lib'); | ||
const srcPath = path.resolve(process.cwd(), 'src'); | ||
// Temporary hack: only use tsbuildinfo file for things under packages/fluentui | ||
const useTsBuildInfo = | ||
/[\\/]packages[\\/]fluentui[\\/]/.test(process.cwd()) && path.basename(process.cwd()) !== 'perf-test'; | ||
|
||
function getExtraTscParams(args) { | ||
/** | ||
* | ||
* Explicitly set `baseUrl` to current package root for packages (converged packages) that use TS path aliases. | ||
* > - This is a temporary workaround for current way of building packages. | ||
* > - Without setting baseUrl we would get all aliased packages build within outDir | ||
*/ | ||
function backportTsAliasedPackages(options: TscTaskOptions) { | ||
const tsConfigFilePath = resolveCwd('./tsconfig.json'); | ||
const tsConfig = JSON.parse(fs.readFileSync(tsConfigFilePath, 'utf-8')); | ||
|
||
const normalizedOptions = { ...options }; | ||
|
||
if (tsConfig.extends) { | ||
logger.info(`package is using TS path aliases. Overriding baseUrl to package root.`); | ||
normalizedOptions.baseUrl = '.'; | ||
} | ||
|
||
return normalizedOptions; | ||
} | ||
|
||
function getExtraTscParams(args: JustArgs) { | ||
return { | ||
pretty: true, | ||
target: 'es5', | ||
// sourceMap must be true for inlineSources and sourceRoot to work | ||
...(args.production && { inlineSources: true, sourceRoot: path.relative(libPath, srcPath), sourceMap: true }), | ||
}; | ||
} | ||
|
||
function getJustArgv(): JustArgs { | ||
return argv(); | ||
} | ||
|
||
export const ts = { | ||
commonjs: () => { | ||
const extraOptions = getExtraTscParams(argv()); | ||
return tscTask({ | ||
const extraOptions = getExtraTscParams(getJustArgv()); | ||
const options = backportTsAliasedPackages({ | ||
...extraOptions, | ||
outDir: 'lib-commonjs', | ||
module: 'commonjs', | ||
...(useTsBuildInfo && { tsBuildInfoFile: '.commonjs.tsbuildinfo' }), | ||
}); | ||
|
||
return tscTask(options); | ||
}, | ||
esm: () => { | ||
const extraOptions = getExtraTscParams(argv()); | ||
const extraOptions = getExtraTscParams(getJustArgv()); | ||
const options = backportTsAliasedPackages({ | ||
...extraOptions, | ||
outDir: 'lib', | ||
module: 'esnext', | ||
}); | ||
|
||
// Use default tsbuildinfo for this variant | ||
return tscTask({ ...extraOptions, outDir: 'lib', module: 'esnext' }); | ||
return tscTask(options); | ||
}, | ||
amd: () => { | ||
const extraOptions = getExtraTscParams(argv()); | ||
return tscTask({ | ||
const extraOptions = getExtraTscParams(getJustArgv()); | ||
const options = backportTsAliasedPackages({ | ||
...extraOptions, | ||
outDir: 'lib-amd', | ||
module: 'amd', | ||
...(useTsBuildInfo && { tsBuildInfoFile: '.amd.tsbuildinfo' }), | ||
}); | ||
|
||
return tscTask(options); | ||
}, | ||
commonjsOnly: () => { | ||
const extraOptions = getExtraTscParams(argv()); | ||
const extraOptions = getExtraTscParams(getJustArgv()); | ||
// Use default tsbuildinfo for this variant (since it's the only variant) | ||
return tscTask({ ...extraOptions, outDir: 'lib', module: 'commonjs' }); | ||
const options = backportTsAliasedPackages({ ...extraOptions, outDir: 'lib', module: 'commonjs' }); | ||
|
||
return tscTask(options); | ||
}, | ||
}; |