repo-tools: update to work with new dynamic imports
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
@@ -39,9 +39,7 @@ function registerPackageCommand(program: Command) {
|
||||
'Initialize any required files to use the OpenAPI tooling for this package.',
|
||||
)
|
||||
.action(
|
||||
lazy(() =>
|
||||
import('./package/schema/openapi/init').then(m => m.singleCommand),
|
||||
),
|
||||
lazy(() => import('./package/schema/openapi/init'), 'singleCommand'),
|
||||
);
|
||||
|
||||
openApiCommand
|
||||
@@ -60,11 +58,7 @@ function registerPackageCommand(program: Command) {
|
||||
)
|
||||
.option('--watch')
|
||||
.description('Watch the OpenAPI spec for changes and regenerate on save.')
|
||||
.action(
|
||||
lazy(() =>
|
||||
import('./package/schema/openapi/generate').then(m => m.command),
|
||||
),
|
||||
);
|
||||
.action(lazy(() => import('./package/schema/openapi/generate'), 'command'));
|
||||
|
||||
openApiCommand
|
||||
.command('fuzz')
|
||||
@@ -81,18 +75,14 @@ function registerPackageCommand(program: Command) {
|
||||
'--exclude-checks <excludeChecks>',
|
||||
'Exclude checks from schemathesis run',
|
||||
)
|
||||
.action(
|
||||
lazy(() => import('./package/schema/openapi/fuzz').then(m => m.command)),
|
||||
);
|
||||
.action(lazy(() => import('./package/schema/openapi/fuzz'), 'command'));
|
||||
|
||||
openApiCommand
|
||||
.command('diff')
|
||||
.option('--ignore', 'Ignore linting failures and only log the results.')
|
||||
.option('--json', 'Output the results as JSON')
|
||||
.option('--since <ref>', 'Diff the API against a specific ref')
|
||||
.action(
|
||||
lazy(() => import('./package/schema/openapi/diff').then(m => m.command)),
|
||||
);
|
||||
.action(lazy(() => import('./package/schema/openapi/diff'), 'command'));
|
||||
}
|
||||
|
||||
function registerRepoCommand(program: Command) {
|
||||
@@ -113,11 +103,7 @@ function registerRepoCommand(program: Command) {
|
||||
.description(
|
||||
'Verify that all OpenAPI schemas are valid and set up correctly.',
|
||||
)
|
||||
.action(
|
||||
lazy(() =>
|
||||
import('./repo/schema/openapi/verify').then(m => m.bulkCommand),
|
||||
),
|
||||
);
|
||||
.action(lazy(() => import('./repo/schema/openapi/verify'), 'bulkCommand'));
|
||||
|
||||
openApiCommand
|
||||
.command('lint [paths...]')
|
||||
@@ -126,17 +112,13 @@ function registerRepoCommand(program: Command) {
|
||||
'--strict',
|
||||
'Fail on any linting severity messages, not just errors.',
|
||||
)
|
||||
.action(
|
||||
lazy(() => import('./repo/schema/openapi/lint').then(m => m.bulkCommand)),
|
||||
);
|
||||
.action(lazy(() => import('./repo/schema/openapi/lint'), 'bulkCommand'));
|
||||
|
||||
openApiCommand
|
||||
.command('test [paths...]')
|
||||
.description('Test OpenAPI schemas against written tests')
|
||||
.option('--update', 'Update the spec on failure.')
|
||||
.action(
|
||||
lazy(() => import('./repo/schema/openapi/test').then(m => m.bulkCommand)),
|
||||
);
|
||||
.action(lazy(() => import('./repo/schema/openapi/test'), 'bulkCommand'));
|
||||
|
||||
openApiCommand
|
||||
.command('fuzz')
|
||||
@@ -145,9 +127,7 @@ function registerRepoCommand(program: Command) {
|
||||
'--since <ref>',
|
||||
'Only fuzz packages that have changed since the given ref',
|
||||
)
|
||||
.action(
|
||||
lazy(() => import('./repo/schema/openapi/fuzz').then(m => m.command)),
|
||||
);
|
||||
.action(lazy(() => import('./repo/schema/openapi/fuzz'), 'command'));
|
||||
|
||||
openApiCommand
|
||||
.command('diff')
|
||||
@@ -159,9 +139,7 @@ function registerRepoCommand(program: Command) {
|
||||
'Diff the API against a specific ref',
|
||||
'origin/master',
|
||||
)
|
||||
.action(
|
||||
lazy(() => import('./repo/schema/openapi/diff').then(m => m.command)),
|
||||
);
|
||||
.action(lazy(() => import('./repo/schema/openapi/diff'), 'command'));
|
||||
}
|
||||
|
||||
function registerLintCommand(program: Command) {
|
||||
@@ -174,10 +152,10 @@ function registerLintCommand(program: Command) {
|
||||
'Lint backend plugin packages for legacy exports and make sure it conforms to the new export pattern',
|
||||
)
|
||||
.action(
|
||||
lazy(() =>
|
||||
import(
|
||||
'./lint-legacy-backend-exports/lint-legacy-backend-exports'
|
||||
).then(m => m.lint),
|
||||
lazy(
|
||||
() =>
|
||||
import('./lint-legacy-backend-exports/lint-legacy-backend-exports'),
|
||||
'lint',
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -215,16 +193,12 @@ export function registerCommands(program: Command) {
|
||||
'Turn on release tag validation for the public, beta, and alpha APIs',
|
||||
)
|
||||
.description('Generate an API report for selected packages')
|
||||
.action(
|
||||
lazy(() =>
|
||||
import('./api-reports/api-reports').then(m => m.buildApiReports),
|
||||
),
|
||||
);
|
||||
.action(lazy(() => import('./api-reports/api-reports'), 'buildApiReports'));
|
||||
|
||||
program
|
||||
.command('type-deps')
|
||||
.description('Find inconsistencies in types of all packages and plugins')
|
||||
.action(lazy(() => import('./type-deps/type-deps').then(m => m.default)));
|
||||
.action(lazy(() => import('./type-deps/type-deps'), 'default'));
|
||||
|
||||
program
|
||||
.command('peer-deps')
|
||||
@@ -232,7 +206,7 @@ export function registerCommands(program: Command) {
|
||||
'Ensure your packages are using the correct peer dependency format.',
|
||||
)
|
||||
.option('--fix', 'Fix the issues found')
|
||||
.action(lazy(() => import('./peer-deps/peer-deps').then(m => m.default)));
|
||||
.action(lazy(() => import('./peer-deps/peer-deps'), 'default'));
|
||||
|
||||
program
|
||||
.command('generate-catalog-info')
|
||||
@@ -246,10 +220,9 @@ export function registerCommands(program: Command) {
|
||||
)
|
||||
.description('Create or fix info yaml files for all backstage packages')
|
||||
.action(
|
||||
lazy(() =>
|
||||
import('./generate-catalog-info/generate-catalog-info').then(
|
||||
m => m.default,
|
||||
),
|
||||
lazy(
|
||||
() => import('./generate-catalog-info/generate-catalog-info'),
|
||||
'default',
|
||||
),
|
||||
);
|
||||
|
||||
@@ -278,20 +251,14 @@ export function registerCommands(program: Command) {
|
||||
.description(
|
||||
'Generate a patch for the selected package in the target repository',
|
||||
)
|
||||
.action(
|
||||
lazy(() =>
|
||||
import('./generate-patch/generate-patch').then(m => m.default),
|
||||
),
|
||||
);
|
||||
.action(lazy(() => import('./generate-patch/generate-patch'), 'default'));
|
||||
|
||||
program
|
||||
.command('knip-reports [paths...]')
|
||||
.option('--ci', 'CI run checks that there is no changes on knip reports')
|
||||
.description('Generate a knip report for selected packages')
|
||||
.action(
|
||||
lazy(() =>
|
||||
import('./knip-reports/knip-reports').then(m => m.buildKnipReports),
|
||||
),
|
||||
lazy(() => import('./knip-reports/knip-reports'), 'buildKnipReports'),
|
||||
);
|
||||
|
||||
registerPackageCommand(program);
|
||||
@@ -299,13 +266,25 @@ export function registerCommands(program: Command) {
|
||||
registerLintCommand(program);
|
||||
}
|
||||
|
||||
type ActionFunc = (...args: any[]) => Promise<void>;
|
||||
type ActionExports<TModule extends object> = {
|
||||
[KName in keyof TModule as TModule[KName] extends ActionFunc
|
||||
? KName
|
||||
: never]: TModule[KName];
|
||||
};
|
||||
|
||||
// Wraps an action function so that it always exits and handles errors
|
||||
function lazy(
|
||||
getActionFunc: () => Promise<(...args: any[]) => Promise<void>>,
|
||||
export function lazy<TModule extends object>(
|
||||
moduleLoader: () => Promise<TModule>,
|
||||
exportName: keyof ActionExports<TModule>,
|
||||
): (...args: any[]) => Promise<never> {
|
||||
return async (...args: any[]) => {
|
||||
try {
|
||||
const actionFunc = await getActionFunc();
|
||||
const mod = await moduleLoader();
|
||||
const actualModule = (
|
||||
mod as unknown as { default: ActionExports<TModule> }
|
||||
).default;
|
||||
const actionFunc = actualModule[exportName] as ActionFunc;
|
||||
await actionFunc(...args);
|
||||
|
||||
process.exit(0);
|
||||
|
||||
@@ -54,7 +54,7 @@ async function verify(directoryPath: string) {
|
||||
schemaPath = join(directoryPath, OLD_SCHEMA_PATH);
|
||||
}
|
||||
|
||||
const schema = await import(resolvePath(schemaPath));
|
||||
const { default: schema } = await import(resolvePath(schemaPath));
|
||||
|
||||
if (!schema.spec) {
|
||||
throw new Error(`\`${TS_SCHEMA_PATH}\` needs to have a 'spec' export.`);
|
||||
|
||||
Reference in New Issue
Block a user