Skip to content

Commit

Permalink
WIP - REFACTOR - fix(scripts): resolve api-extractor execution issue …
Browse files Browse the repository at this point in the history
…wihin packages with new DX
  • Loading branch information
Hotell committed Aug 11, 2021
1 parent 5b17fa2 commit 7129d58
Showing 1 changed file with 60 additions and 2 deletions.
62 changes: 60 additions & 2 deletions scripts/tasks/api-extractor.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import fs from 'fs';
import * as glob from 'glob';
import * as path from 'path';
import { apiExtractorVerifyTask, task, series } from 'just-scripts';
import jju from 'jju';
import { apiExtractorVerifyTask, task, series, resolveCwd, logger, TscTaskOptions } from 'just-scripts';

const apiExtractorConfigs = glob
.sync(path.join(process.cwd(), 'config/api-extractor*.json'))
Expand All @@ -11,13 +13,69 @@ 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 });

const taskName = `api-extractor:${configName}`;
task(taskName, apiExtractorVerifyTask({ configJsonFilePath: configPath, localBuild }));

task(
taskName,
series(
() => modified(),
apiExtractorVerifyTask({ configJsonFilePath: configPath, localBuild }),
() => original(),
),
);

return taskName;
}),
)
: 'no-op';
}

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)
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 };

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

const originalContent = fs.readFileSync(options.apiExtractorConfigPath, 'utf-8');

const apiExtractorConfigOriginal = jju.parse(originalContent, { mode: 'json' });
console.log({ apiExtractorConfigOriginal });
apiExtractorConfigOriginal.compiler = {
overrideTsconfig: normalizedOptions,
};

const writeConfig = {
modified: () => {
// console.log(jju.stringify(apiExtractorConfigNew, { mode: 'json' }));
const newContent = jju.update(originalContent, apiExtractorConfigOriginal, { mode: 'json', indent: 2 });
fs.writeFileSync(options.apiExtractorConfigPath, newContent, 'utf-8');
},
original: () => {
fs.writeFileSync(options.apiExtractorConfigPath, originalContent, 'utf-8');
},
};

return writeConfig;
}

0 comments on commit 7129d58

Please sign in to comment.