From bde049045da8493945f62d373b11c8ca8643e6c6 Mon Sep 17 00:00:00 2001 From: Daniel Derevjanik Date: Thu, 18 Jul 2024 20:49:25 +0200 Subject: [PATCH] feat: add esm option --- src/cli.ts | 6 +++++- src/generator.ts | 14 ++++++++------ src/index.ts | 5 +++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index beb3fc1..69fe0d2 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -44,6 +44,10 @@ const conf = yargs(process.argv.slice(2)) description: "Maximum count of definitions with the same name but increased suffix. Will throw an error if exceeded.", }) + .option("esm", { + type: "boolean", + description: "Generate imports with .js suffix", + }) .option("quiet", { type: "boolean", description: "Suppress all logs", @@ -55,7 +59,7 @@ const conf = yargs(process.argv.slice(2)) .option("no-color", { type: "boolean", description: "Logs without colors", - }).argv; + }).parseSync(); // Logger section diff --git a/src/generator.ts b/src/generator.ts index 08d201a..7f7e871 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -15,11 +15,13 @@ import { Logger } from "./utils/logger"; export interface GeneratorOptions { emitDefinitionsOnly: boolean; modelPropertyNaming: ModelPropertyNaming; + esm: boolean; } const defaultOptions: GeneratorOptions = { emitDefinitionsOnly: false, modelPropertyNaming: null, + esm: false, }; /** @@ -177,13 +179,13 @@ export async function generate( ); addSafeImport( clientImports, - `./definitions/${method.paramDefinition.name}`, + `./definitions/${method.paramDefinition.name}${mergedOptions.esm ? ".js" : ""}`, method.paramDefinition.name ); } addSafeImport( portImports, - `../definitions/${method.paramDefinition.name}`, + `../definitions/${method.paramDefinition.name}${mergedOptions.esm ? ".js" : ""}`, method.paramDefinition.name ); } @@ -200,13 +202,13 @@ export async function generate( ); addSafeImport( clientImports, - `./definitions/${method.returnDefinition.name}`, + `./definitions/${method.returnDefinition.name}${mergedOptions.esm ? ".js" : ""}`, method.returnDefinition.name ); } addSafeImport( portImports, - `../definitions/${method.returnDefinition.name}`, + `../definitions/${method.returnDefinition.name}${mergedOptions.esm ? ".js" : ""}`, method.returnDefinition.name ); } @@ -230,7 +232,7 @@ export async function generate( }); } // End of PortMethod if (!mergedOptions.emitDefinitionsOnly) { - addSafeImport(serviceImports, `../ports/${port.name}`, port.name); + addSafeImport(serviceImports, `../ports/${port.name}${mergedOptions.esm ? ".js" : ""}`, port.name); servicePorts.push({ name: sanitizePropName(port.name), isReadonly: true, @@ -252,7 +254,7 @@ export async function generate( } // End of Port if (!mergedOptions.emitDefinitionsOnly) { - addSafeImport(clientImports, `./services/${service.name}`, service.name); + addSafeImport(clientImports, `./services/${service.name}${mergedOptions.esm ? ".js" : ""}`, service.name); clientServices.push({ name: sanitizePropName(service.name), type: service.name }); serviceFile.addImportDeclarations(serviceImports); diff --git a/src/index.ts b/src/index.ts index 1d5416f..57ea9e8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -41,6 +41,10 @@ export interface Options { * Property naming convention ('camelCase' or 'PascalCase')" */ modelPropertyNaming: ModelPropertyNaming; + /** + * Generate imports with .js suffix + */ + esm: boolean /** * Print verbose logs * @default false @@ -65,6 +69,7 @@ export const defaultOptions: Options = { caseInsensitiveNames: false, maxRecursiveDefinitionName: 64, modelPropertyNaming: null, + esm: false, // verbose: false, quiet: false,