Skip to content

Commit

Permalink
Merge pull request #1437 from flexn-io/feat/cli-updates
Browse files Browse the repository at this point in the history
CLI improvements
  • Loading branch information
pavjacko committed Mar 7, 2024
2 parents e258801 + a354017 commit 08f9a4c
Show file tree
Hide file tree
Showing 82 changed files with 478 additions and 527 deletions.
97 changes: 12 additions & 85 deletions __mocks__/@rnv/core.ts
Expand Up @@ -21,14 +21,21 @@ const _chalkCols: any = {
blue: (v) => v,
cyan: (v) => v,
magenta: (v) => v,
bold: (v) => v,
rgb: (v) => v,
};
_chalkCols.rgb = () => (v) => v;
_chalkCols.bold = _chalkCols;
function mockChalk() {
return _chalkCols;
}
Object.assign(mockChalk, _chalkCols);
Object.keys(_chalkCols).forEach((key) => {
_chalkCols[key] = mockChalk;
});
const _chalkMono = {
..._chalkCols,
};

export const generateRnvConfigPathObj = () => {
const generateRnvConfigPathObj = () => {
return {
configs: [],
configsPrivate: [],
Expand All @@ -45,15 +52,15 @@ export const generateRnvConfigPathObj = () => {
};
};

export const generateRnvConfigFileObj = () => {
const generateRnvConfigFileObj = () => {
return {
configs: [],
configsLocal: [],
configsPrivate: [],
};
};

export const generateContextDefaults = (ctx?: Context) => {
const generateContextDefaults = (ctx?: Context) => {
const runtime: any = {
currentEngine: { rootPath: '' },
enginesByPlatform: {},
Expand Down Expand Up @@ -244,90 +251,10 @@ export const generateContextDefaults = (ctx?: Context) => {
},
};
};

rnvcore.getEngineRunnerByPlatform = () => ({
getOriginalPlatformTemplatesDir: () => 'sometemptdir',
});
rnvcore.executeTask = jest.fn();
rnvcore.shouldSkipTask = () => false;
rnvcore.generatePlatformChoices = () => [];
rnvcore.executeAsync = jest.fn();
rnvcore.removeDirs = jest.fn();
rnvcore.fsExistsSync = jest.fn();
rnvcore.fsReaddirSync = () => [];
rnvcore.getRealPath = () => '';
rnvcore.copyFolderContentsRecursiveSync = jest.fn();
rnvcore.getConfigProp = jest.fn();
rnvcore.confirmActiveBundler = () => null;
rnvcore.getAppFolder = jest.fn();
rnvcore.logToSummary = jest.fn();
rnvcore.logTask = jest.fn();
rnvcore.logDefault = jest.fn();
rnvcore.logDebug = jest.fn();
rnvcore.logInfo = jest.fn();
rnvcore.logError = jest.fn();
rnvcore.logWarning = jest.fn();
rnvcore.logSuccess = jest.fn();
rnvcore.logSummary = jest.fn();
rnvcore.chalk = () => _chalkMono;
rnvcore.inquirerPrompt = jest.fn();
rnvcore.getPlatformProjectDir = jest.fn();

rnvcore.createRnvContext = (ctx?: Context) => {
rnvcore.__MOCK_RNV_CONTEXT = generateContextDefaults(ctx);
};
rnvcore.getContext = () => rnvcore.__MOCK_RNV_CONTEXT;
rnvcore.generateContextDefaults = generateContextDefaults;

rnvcore.createRnvApi = () => {
global.MOCK_RNV_API = {
doResolve: jest.fn(),
getConfigProp: jest.fn(),
logger: jest.fn(),
analytics: {
captureEvent: () => {
//NOOP
},
captureException() {
//NOOP
},
teardown: async () => {
//NOOP
},
},
prompt: {
generateOptions() {
//NOOP
return {
asString: '',
keysAsArray: [],
keysAsObject: {},
optionsAsArray: [],
valuesAsArray: [],
valuesAsObject: {},
};
},
inquirerPrompt: async () => {
return {};
},
pressAnyKeyToContinue: async () => {
return {};
},
inquirerSeparator() {
return {};
},
},
spinner: jest.fn(),
fsExistsSync: jest.fn(),
fsReadFileSync: jest.fn(),
fsReaddirSync: jest.fn(),
fsWriteFileSync: jest.fn(),
path: jest.fn(),
};
};

rnvcore.getApi = () => {
return global.MOCK_RNV_API;
};

module.exports = rnvcore;
1 change: 1 addition & 0 deletions buildHooks/src/prePublish.ts
Expand Up @@ -29,6 +29,7 @@ const VERSIONED_PACKAGES = [
'sdk-webos',
'sdk-utils',
'renative',
'integration-docker',
];

type PackageConfig = {
Expand Down
1 change: 1 addition & 0 deletions packages/app-harness/package.json
Expand Up @@ -68,6 +68,7 @@
"@rnv/engine-rn-next": "1.0.0-rc.12",
"@rnv/engine-rn-tvos": "1.0.0-rc.12",
"@rnv/engine-rn-web": "1.0.0-rc.12",
"@rnv/integration-starter": "1.0.0-rc.12",
"@rnv/template-starter": "1.0.0-rc.12",
"@types/react": "18.2.52",
"@types/react-dom": "18.2.18",
Expand Down
8 changes: 7 additions & 1 deletion packages/app-harness/renative.json
Expand Up @@ -5,6 +5,9 @@
"crypto": {
"path": "./secrets/privateConfigs.enc"
},
"integrations": {
"@rnv/integration-starter": {}
},
"plugins": {
"react-native-splash-screen": {
"android": {
Expand Down Expand Up @@ -151,7 +154,10 @@
"templateXcode": {
"AppDelegate_h": {
"appDelegateExtensions": ["UNUserNotificationCenterDelegate"],
"appDelegateImports": ["<UserNotifications/UNUserNotificationCenter.h>", "<UserNotifications/UserNotifications.h>"]
"appDelegateImports": [
"<UserNotifications/UNUserNotificationCenter.h>",
"<UserNotifications/UserNotifications.h>"
]
},
"AppDelegate_mm": {
"appDelegateImports": ["<RNCPushNotificationIOS.h>"],
Expand Down
38 changes: 20 additions & 18 deletions packages/cli/src/index.ts
@@ -1,7 +1,7 @@
import program from 'commander';
import fs from 'fs';
import path from 'path';
import { logComplete, logError, getContext, RnvTaskOptionPresets } from '@rnv/core';
import { logComplete, logError, getContext, RnvTaskOptionPresets, generateStringFromTaskOption } from '@rnv/core';
import Spinner from './ora';
import Prompt from './prompt';
import Logger from './logger';
Expand Down Expand Up @@ -29,24 +29,11 @@ export const run = () => {
program.version(packageJson.version, '-v, --version', 'output current version');

RnvTaskOptionPresets.withAll().forEach((param) => {
let cmd = '';
if (param.shortcut) {
cmd += `-${param.shortcut}, `;
}
cmd += `--${param.key}`;

if (param.value) {
if (param.isRequired) {
cmd += ` <${param.value}>`;
} else if (param.variadic) {
cmd += ` [${param.value}...]`;
} else {
cmd += ` [${param.value}]`;
}
}
program.option(cmd, param.description);
program.option(generateStringFromTaskOption(param), param.description);
});

program.allowUnknownOption(true); // integration options are not known ahead of time

// Make both arguments optional un order to allow `$ rnv` top level command
program.arguments('[cmd] [option]').action((cmd, option) => {
cmdValue = cmd;
Expand All @@ -60,7 +47,22 @@ export const run = () => {
process.exit(0);
});

executeRnv({ cmd: cmdValue, subCmd: cmdOption, program, process, spinner: Spinner, prompt: Prompt, logger: Logger })
// If the first argument is a flag, then the subCommand is missing
// this occurs when rnv has to execute unknown commands (ie intergration commands)
// commander does not handle this scenario automatically
if (cmdOption && (cmdOption.startsWith('--') || cmdOption.startsWith('-'))) {
cmdOption = '';
}

executeRnv({
cmd: cmdValue,
subCmd: cmdOption,
program,
process,
spinner: Spinner,
prompt: Prompt,
logger: Logger,
})
.then(() => {
logComplete(!getContext().runtime.keepSessionActive);
})
Expand Down

0 comments on commit 08f9a4c

Please sign in to comment.