From bba99d262d9433fc382a45a25f91e28eb087a6c2 Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Sat, 22 Mar 2025 08:24:25 +0100 Subject: [PATCH 1/2] feat: introduce build args type and mapper --- src/services/build/build.services.ts | 43 ++++++++++++++++++++++------ src/types/build.ts | 4 +++ 2 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 src/types/build.ts diff --git a/src/services/build/build.services.ts b/src/services/build/build.services.ts index 3ac5f5bc..1fa0c94f 100644 --- a/src/services/build/build.services.ts +++ b/src/services/build/build.services.ts @@ -8,26 +8,22 @@ import { DEVELOPER_PROJECT_SATELLITE_INDEX_MJS, DEVELOPER_PROJECT_SATELLITE_INDEX_TS } from '../../constants/dev.constants'; +import {type BuildArgs} from '../../types/build'; import {buildJavaScript, buildTypeScript} from './build.javascript'; import {buildRust} from './build.rust.services'; export const build = async (args?: string[]) => { - const path = nextArg({args, option: '-p'}) ?? nextArg({args, option: '--path'}); - - const lang = nextArg({args, option: '-l'}) ?? nextArg({args, option: '--lang'}); + const {lang, path} = buildArgs(args); // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check - switch (lang?.toLowerCase()) { + switch (lang) { case 'rs': - case 'rust': await buildRust({path}); return; case 'ts': - case 'typescript': await buildTypeScript({path}); return; - case 'js': - case 'javascript': + case 'mjs': await buildJavaScript({path}); return; } @@ -77,3 +73,34 @@ export const build = async (args?: string[]) => { ) ); }; + +const buildArgs = (args?: string[]): BuildArgs => { + const path = nextArg({args, option: '-p'}) ?? nextArg({args, option: '--path'}); + + const {lang} = buildLang(args); + + return { + path, + lang + }; +}; + +const buildLang = (args?: string[]): Pick => { + const lang = nextArg({args, option: '-l'}) ?? nextArg({args, option: '--lang'}); + + switch (lang?.toLowerCase()) { + case 'rs': + case 'rust': + return {lang: 'rs'}; + case 'ts': + case 'mts': + case 'typescript': + return {lang: 'ts'}; + case 'js': + case 'mjs': + case 'javascript': + return {lang: 'mjs'}; + default: + return {}; + } +}; diff --git a/src/types/build.ts b/src/types/build.ts new file mode 100644 index 00000000..f0c77143 --- /dev/null +++ b/src/types/build.ts @@ -0,0 +1,4 @@ +export interface BuildArgs { + lang?: 'ts' | 'mjs' | 'rs'; + path?: string | undefined; +} From f4ee4bf266a7669814b76dd6e0d787c8c6cf5ab4 Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Sat, 22 Mar 2025 10:08:58 +0100 Subject: [PATCH 2/2] feat: use BuildArgs --- src/services/build/build.javascript.ts | 11 +++++++---- src/services/build/build.rust.services.ts | 3 ++- src/types/build.ts | 4 +++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/services/build/build.javascript.ts b/src/services/build/build.javascript.ts index cc083ead..077cc369 100644 --- a/src/services/build/build.javascript.ts +++ b/src/services/build/build.javascript.ts @@ -9,18 +9,21 @@ import { INDEX_MJS, INDEX_TS } from '../../constants/dev.constants'; +import type {BuildArgs, BuildLang} from '../../types/build'; import {detectPackageManager} from '../../utils/pm.utils'; import {confirmAndExit} from '../../utils/prompt.utils'; -export const buildTypeScript = async ({path}: {path?: string | undefined} = {}) => { +export const buildTypeScript = async ({path}: Pick = {}) => { await build({lang: 'ts', path}); }; -export const buildJavaScript = async ({path}: {path?: string | undefined} = {}) => { +export const buildJavaScript = async ({path}: Pick = {}) => { await build({lang: 'mjs', path}); }; -const build = async (params: {lang: 'ts' | 'mjs'; path?: string | undefined}) => { +type BuildArgsTsJs = {lang: Omit} & Pick; + +const build = async (params: BuildArgsTsJs) => { await installEsbuild(); await createTargetDir(); @@ -28,7 +31,7 @@ const build = async (params: {lang: 'ts' | 'mjs'; path?: string | undefined}) => await buildWithEsbuild(params); }; -const buildWithEsbuild = async ({lang, path}: {lang: 'ts' | 'mjs'; path?: string | undefined}) => { +const buildWithEsbuild = async ({lang, path}: BuildArgsTsJs) => { const infile = path ?? join(DEVELOPER_PROJECT_SATELLITE_PATH, lang === 'mjs' ? INDEX_MJS : INDEX_TS); diff --git a/src/services/build/build.rust.services.ts b/src/services/build/build.rust.services.ts index 88155380..b5e436a3 100644 --- a/src/services/build/build.rust.services.ts +++ b/src/services/build/build.rust.services.ts @@ -13,6 +13,7 @@ import { DEVELOPER_PROJECT_SATELLITE_PATH, IC_WASM_MIN_VERSION } from '../../constants/dev.constants'; +import type {BuildArgs} from '../../types/build'; import {readSatelliteDid} from '../../utils/did.utils'; import {checkCargoBinInstalled, checkIcWasmVersion, checkRustVersion} from '../../utils/env.utils'; import {confirmAndExit} from '../../utils/prompt.utils'; @@ -20,7 +21,7 @@ import {confirmAndExit} from '../../utils/prompt.utils'; const CARGO_RELEASE_DIR = join(process.cwd(), 'target', 'wasm32-unknown-unknown', 'release'); const SATELLITE_OUTPUT = join(DEPLOY_LOCAL_REPLICA_PATH, 'satellite.wasm'); -export const buildRust = async ({path}: {path?: string | undefined} = {}) => { +export const buildRust = async ({path}: Pick = {}) => { const {valid: validRust} = await checkRustVersion(); if (validRust === 'error' || !validRust) { diff --git a/src/types/build.ts b/src/types/build.ts index f0c77143..772f5a99 100644 --- a/src/types/build.ts +++ b/src/types/build.ts @@ -1,4 +1,6 @@ +export type BuildLang = 'ts' | 'mjs' | 'rs'; + export interface BuildArgs { - lang?: 'ts' | 'mjs' | 'rs'; + lang?: BuildLang; path?: string | undefined; }