Skip to content

Commit

Permalink
fixup! WIP - REFACTOR - fix(scripts): resolve api-extractor execution…
Browse files Browse the repository at this point in the history
… issue wihin packages with new DX
  • Loading branch information
Hotell committed Aug 11, 2021
1 parent 7129d58 commit 155b939
Showing 1 changed file with 37 additions and 24 deletions.
61 changes: 37 additions & 24 deletions scripts/tasks/api-extractor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,27 @@ const apiExtractorConfigs = glob
const localBuild = !process.env.TF_BUILD;

export function apiExtractor() {
console.log({ configPath: path.join(process.cwd(), 'config/api-extractor*.json'), apiExtractorConfigs });

return apiExtractorConfigs.length
? series(
...apiExtractorConfigs.map(([configPath, configName]) => {
const { modified, original } = backportTsAliasedPackages({ apiExtractorConfigPath: configPath });
// note we have `"strictNullChecks": false,` turned off - so from TS point of view this always returns API 🚨
const overrideApi = overrideExtractorConfigForPackagesWithTsPathAliases({
apiExtractorConfigPath: configPath,
tsConfigPath: resolveCwd('./tsconfig.json'),
});

const taskName = `api-extractor:${configName}`;

task(
taskName,
series(
() => modified(),
() => {
overrideApi && overrideApi.overrideConfig();
},
apiExtractorVerifyTask({ configJsonFilePath: configPath, localBuild }),
() => original(),
() => {
overrideApi && overrideApi.resetConfig();
},
),
);

Expand All @@ -39,43 +45,50 @@ export function apiExtractor() {

interface TsConfig {
extends?: string;
// typescript doesn't provide a correct type for the compiler options file
// (typescript.CompilerOptions has enum values instead of raw options in some cases)

/**
* typescript doesn't provide a correct type for the compiler options file
* -> (typescript.CompilerOptions has enum values instead of raw options in some cases)
*/
compilerOptions: TscTaskOptions;
include?: string[];
exclude?: string[];
}

function backportTsAliasedPackages(options: { apiExtractorConfigPath: string }) {
console.log({ options });
const tsConfigFilePath = resolveCwd('./tsconfig.json');
const tsConfig: TsConfig = jju.parse(fs.readFileSync(tsConfigFilePath, 'utf-8'));

const normalizedOptions = { ...tsConfig };
function overrideExtractorConfigForPackagesWithTsPathAliases(options: {
tsConfigPath: string;
apiExtractorConfigPath: string;
}) {
const tsConfig: TsConfig = jju.parse(fs.readFileSync(options.tsConfigPath, 'utf-8'));
const overriddenTsConfig = { ...tsConfig };
const shouldOverrideConfig = Boolean(overriddenTsConfig.extends);

if (normalizedOptions.extends) {
logger.info(`package is using TS path aliases. Overriding ts compiler settings for api-extractor.`);
normalizedOptions.compilerOptions.baseUrl = '.';
if (!shouldOverrideConfig) {
return null;
}

const originalContent = fs.readFileSync(options.apiExtractorConfigPath, 'utf-8');
logger.info(`📣 API-EXTRACTOR: package is using TS path aliases. Overriding ts compiler settings for api-extractor.`);

const originalContent = fs.readFileSync(options.apiExtractorConfigPath, 'utf-8');
const apiExtractorConfigOriginal = jju.parse(originalContent, { mode: 'json' });
console.log({ apiExtractorConfigOriginal });

overriddenTsConfig.compilerOptions.baseUrl = '.';
apiExtractorConfigOriginal.compiler = {
overrideTsconfig: normalizedOptions,
overrideTsconfig: overriddenTsConfig,
};

const writeConfig = {
modified: () => {
// console.log(jju.stringify(apiExtractorConfigNew, { mode: 'json' }));
console.log({ apiExtractorConfigOriginal });

const api = {
overrideConfig: () => {
const newContent = jju.update(originalContent, apiExtractorConfigOriginal, { mode: 'json', indent: 2 });

fs.writeFileSync(options.apiExtractorConfigPath, newContent, 'utf-8');
},
original: () => {
resetConfig: () => {
fs.writeFileSync(options.apiExtractorConfigPath, originalContent, 'utf-8');
},
};

return writeConfig;
return api;
}

0 comments on commit 155b939

Please sign in to comment.