From 1627f52043599dd0d9aad8d66747da959be4e3f2 Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Thu, 1 Apr 2021 17:55:45 +0200 Subject: [PATCH] feat: warnOnce & graceful error handling --- packages/webpack5/src/helpers/config.ts | 15 ++++++++++++--- packages/webpack5/src/helpers/index.ts | 10 ++++++++-- packages/webpack5/src/helpers/log.ts | 10 ++++++++++ packages/webpack5/src/helpers/platform.ts | 13 ++++++++++--- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/packages/webpack5/src/helpers/config.ts b/packages/webpack5/src/helpers/config.ts index 3e8951a16..ae649ead9 100644 --- a/packages/webpack5/src/helpers/config.ts +++ b/packages/webpack5/src/helpers/config.ts @@ -1,11 +1,15 @@ import { env } from '../index'; -import { error } from './log'; +import { error, warnOnce } from './log'; function getCLILib() { if (!env.nativescriptLibPath) { - throw error(` + warnOnce( + 'getCLILib', + ` Cannot find NativeScript CLI path. Make sure --env.nativescriptLibPath is passed - `); + ` + ); + return false; } return require(env.nativescriptLibPath); @@ -15,10 +19,15 @@ function getCLILib() { * Utility to get a value from the nativescript.config.ts file. * * @param {string} key The key to get from the config. Supports dot-notation. + * @param defaultValue The fallback value if the key is not set in the config. */ export function getValue(key: string, defaultValue?: any): T { const lib = getCLILib(); + if (!lib) { + return defaultValue; + } + return (lib.projectConfigService as { getValue(key: string, defaultValue?: any): T; }).getValue(key, defaultValue); diff --git a/packages/webpack5/src/helpers/index.ts b/packages/webpack5/src/helpers/index.ts index 405087f5a..56637d566 100644 --- a/packages/webpack5/src/helpers/index.ts +++ b/packages/webpack5/src/helpers/index.ts @@ -1,11 +1,15 @@ import { merge } from 'webpack-merge'; +import { + getPackageJson, + getProjectRootPath, + getProjectFilePath, +} from './project'; import { addVirtualEntry, addVirtualModule } from './virtualModules'; -import { getPackageJson, getProjectRootPath } from './project'; import { applyFileReplacements } from './fileReplacements'; import { addCopyRule, removeCopyRule } from './copyRules'; +import { error, info, warn, warnOnce } from './log'; import { determineProjectFlavor } from './flavor'; -import { error, info, warn } from './log'; import { getValue } from './config'; import { getIPS } from './host'; import { @@ -51,6 +55,7 @@ export default { error, info, warn, + warnOnce, }, platform: { addPlatform, @@ -62,6 +67,7 @@ export default { getPlatformName, }, project: { + getProjectFilePath, getProjectRootPath, getPackageJson, }, diff --git a/packages/webpack5/src/helpers/log.ts b/packages/webpack5/src/helpers/log.ts index 725048848..ac70c163a 100644 --- a/packages/webpack5/src/helpers/log.ts +++ b/packages/webpack5/src/helpers/log.ts @@ -28,6 +28,16 @@ export function warn(...data: any): void { console.warn(`[@nativescript/webpack] Warn: \n`, ...cleanup(data)); } +const warnedMap: any = {}; +export function warnOnce(key: string, ...data: any): void { + if (warnedMap[key]) { + return; + } + + warnedMap[key] = true; + warn(...data); +} + export function info(...data: any): void { if (env.verbose) { console.log(`[@nativescript/webpack] Info: \n`, ...cleanup(data)); diff --git a/packages/webpack5/src/helpers/platform.ts b/packages/webpack5/src/helpers/platform.ts index 2619f5287..f59389af1 100644 --- a/packages/webpack5/src/helpers/platform.ts +++ b/packages/webpack5/src/helpers/platform.ts @@ -1,7 +1,7 @@ import { dirname, resolve } from 'path'; import { getPackageJson, getProjectRootPath } from './project'; -import { error, info } from './log'; +import { error, info, warnOnce } from './log'; import { env } from '../'; import AndroidPlatform from '../platforms/android'; @@ -65,13 +65,20 @@ export function getPlatformName(): Platform { `); } - throw error(` + warnOnce( + 'getPlatformName', + ` You need to provide a target platform! Available platforms: ${Object.keys(platforms).join(', ')} Use --env.platform= or --env.android, --env.ios to specify the target platform. - `); + + Defaulting to "ios". + ` + ); + + return 'ios'; } /**