diff --git a/packages/amplify-category-custom/src/utils/build-custom-resources.ts b/packages/amplify-category-custom/src/utils/build-custom-resources.ts index 0172d3d9929..9c7eeeaafa8 100644 --- a/packages/amplify-category-custom/src/utils/build-custom-resources.ts +++ b/packages/amplify-category-custom/src/utils/build-custom-resources.ts @@ -98,19 +98,8 @@ const buildResource = async (resource: ResourceMeta): Promise => { } } - // get locally installed tsc executable - - const localTscExecutablePath = path.join(targetDir, 'node_modules', '.bin', 'tsc'); - - if (!fs.existsSync(localTscExecutablePath)) { - throw new AmplifyError('MissingOverridesInstallationRequirementsError', { - message: 'TypeScript executable not found.', - resolution: 'Please add it as a dev-dependency in the package.json file for this resource.', - }); - } - try { - execa.sync(localTscExecutablePath, { + execa.sync(packageManager.runner, ['tsc'], { cwd: targetDir, stdio: 'pipe', encoding: 'utf-8', diff --git a/packages/amplify-cli-core/API.md b/packages/amplify-cli-core/API.md index c5f833aab56..4f6c1774776 100644 --- a/packages/amplify-cli-core/API.md +++ b/packages/amplify-cli-core/API.md @@ -1499,6 +1499,8 @@ export interface PackageManager { // (undocumented) readonly packageManager: PackageManagerType; // (undocumented) + readonly runner: string; + // (undocumented) version?: SemVer; } diff --git a/packages/amplify-cli-core/src/overrides-manager/override-skeleton-generator.ts b/packages/amplify-cli-core/src/overrides-manager/override-skeleton-generator.ts index 2ef3baa4f0d..8bc9ab2369d 100644 --- a/packages/amplify-cli-core/src/overrides-manager/override-skeleton-generator.ts +++ b/packages/amplify-cli-core/src/overrides-manager/override-skeleton-generator.ts @@ -93,17 +93,7 @@ export const buildOverrideDir = async (cwd: string, destDirPath: string): Promis const tsConfigSampleFilePath = path.join(__dirname, '..', '..', 'resources', 'overrides-resource', 'tsconfig.resource.json'); fs.writeFileSync(tsConfigDestFilePath, fs.readFileSync(tsConfigSampleFilePath)); - // get locally installed tsc executable - - const localTscExecutablePath = path.join(cwd, 'node_modules', '.bin', 'tsc'); - - if (!fs.existsSync(localTscExecutablePath)) { - throw new AmplifyError('MissingOverridesInstallationRequirementsError', { - message: 'TypeScript executable not found.', - resolution: 'Please add it as a dev-dependency in the package.json file for this resource.', - }); - } - execa.sync(localTscExecutablePath, [`--project`, `${tsConfigDestFilePath}`], { + execa.sync(packageManager.runner, ['tsc', '--project', tsConfigDestFilePath], { cwd: tsConfigDir, stdio: 'pipe', encoding: 'utf-8', diff --git a/packages/amplify-cli-core/src/utils/packageManager.ts b/packages/amplify-cli-core/src/utils/packageManager.ts index d97a962dfd3..f447e882b5e 100644 --- a/packages/amplify-cli-core/src/utils/packageManager.ts +++ b/packages/amplify-cli-core/src/utils/packageManager.ts @@ -19,6 +19,7 @@ export interface PackageManager { readonly packageManager: PackageManagerType; readonly lockFile: string; readonly executable: string; + readonly runner: string; readonly displayValue: string; version?: SemVer; getRunScriptArgs: (scriptName: string) => string[]; @@ -29,6 +30,7 @@ class NpmPackageManager implements PackageManager { readonly packageManager = 'npm'; readonly displayValue = 'NPM'; readonly executable = 'npm'; + readonly runner = 'npx'; readonly lockFile = 'package-lock.json'; getRunScriptArgs = (scriptName: string) => ['run-script', scriptName]; @@ -39,6 +41,7 @@ class YarnPackageManager implements PackageManager { readonly packageManager: PackageManagerType = 'yarn'; readonly displayValue = 'Yarn'; readonly executable = 'yarn'; + readonly runner = this.executable; readonly lockFile = 'yarn.lock'; version?: SemVer; @@ -66,6 +69,7 @@ class PnpmPackageManager implements PackageManager { readonly packageManager: PackageManagerType = 'pnpm'; readonly displayValue = 'PNPM'; readonly executable = 'pnpm'; + readonly runner = this.executable; readonly lockFile = 'pnpm-lock.yaml'; getRunScriptArgs = (scriptName: string) => [scriptName]; @@ -77,11 +81,13 @@ class CustomPackageManager implements PackageManager { readonly displayValue = 'Custom Build Command or Script Path'; lockFile; executable; + runner; version?: SemVer; constructor() { this.lockFile = ''; this.executable = ''; + this.runner = ''; } getRunScriptArgs = () => { throw new AmplifyError('PackagingLambdaFunctionError', {